(R)?ex the friendly automation framework

News

2020-04-05
Rex-1.9.0

The Rex-1.9.0 release is now available on CPAN, and it adds a new feature flag to force writing UTF-8 encoded files, documents configuration options, and fixes bugs.

2020-03-05
Rex-1.8.2

The Rex-1.8.2 release is now available on CPAN, fixing a bug related to task hooks.

2020-02-05
Rex-1.8.1

The Rex-1.8.1 release is now available on CPAN, improving release automation, packaging, and documentation.

2020-01-05
Rex-1.8.0

The Rex-1.8.0 release is now available on CPAN, adding initial support to manage Void Linux systems.

2019-12-05
Rex-1.7.1

The Rex-1.7.1 release is now available on CPAN, fixing a Windows testing issue, and updating some docs.

Conferences

2016-06-21

Need Help?

Rex is a pure open source project, you can find community support in the following places:

Professional support is also available.

» Home » Docs » Guides » Cloud management » Manage your Amazon EC2 instances

Manage your Amazon EC2 instances

Starting Point

In this howto i will show you how to create and manage your Amazon EC2 instances.

Preparation

Creating a Rexfile

At first you need to create a Rexfile in a directory of your choice.

$ mkdir amazon
$ cd amazon
$ touch Rexfile

Open the Rexfile in your preferred editor.

Insert the following code in your new Rexfile.

⁠use Rex -feature => ['1.0'];
⁠use Rex::Commands::Cloud;
⁠
⁠user "root";
⁠public_key "/path/to/your/just/created/amazon-public.key";
⁠private_key "/path/to/your/just/downloaded/amazon-private-key.pem";
⁠
⁠my $access_key        = "your-access-key";
⁠my $secret_access_key = "your-secret-key";
⁠
⁠cloud_service "Amazon";
⁠cloud_auth "$access_key", "$secret_access_key";
⁠cloud_region "ec2.eu-west-1.amazonaws.com";
⁠
⁠task "create", sub {
⁠    cloud_instance create => {
⁠        image_id => "ami-02103876",
⁠        name     => "static01",
⁠        key      => "dev-test",
⁠    };
⁠};

This task create a new Amazon EC2 instance with no EBS block device.

Create an instance with an EBS block volume

Sometimes you need an instance with a persistent storage volume. To achieve this your can use an EBS block volume.

⁠task "create", sub {
⁠    my $vol_id = cloud_volume create => { size => 1, zone => "eu-west-1a", };
⁠    cloud_instance create => {
⁠        image_id => "ami-02103876",
⁠        name     => "static01",
⁠        key      => "dev-test",
⁠        volume   => $vol_id,
⁠        zone     => "eu-west-1a",
⁠    };
⁠};

Listing Regions and zones

To get a list of all regions and zone you can use the following functions.

⁠task "list", sub {
⁠    print Dumper get_cloud_regions;
⁠    print Dumper get_cloud_availability_zones;
⁠};

List your instances

To get a list of all your instances and volumes you can use these functions.

⁠task "list", sub {
⁠    print Dumper cloud_instance_list;
⁠    print Dumper cloud_volume_list;
⁠};

Destroy your instances / volumes

If you don't need your instances or volumes anymore, you can just destroy them.

⁠task "destroy", sub {
⁠    cloud_volume delete      => "$volume_id";
⁠    cloud_instance terminate => "$instance_id";
⁠};

Put all your EC2 instances in a host group

If you have many instances you can easily add them all into a hostgroup.

⁠group ec2 => get_cloud_instances_as_group();

Installing some Software and run Rex

Now we need to add some software to our fresh EC2 instance.

⁠task "prepare",
⁠  group => "ec2",
⁠  sub {
⁠    run "apt-get update";
⁠    install package => "apache2";
⁠
⁠    service apache2 => "ensure", "started";
⁠
⁠    # deploy your webapp, see Rex::Apache::Deploy for more information.    deploy "my-site.tar.gz";
⁠
⁠    # or upload some files    file "/etc/passwd", source => "/etc/passwd";
⁠
⁠    # do what ever you want    use Rex::Commands::Iptables;
⁠    close_port "all";
⁠  };

Now you can run Rex to create the instance and prepare the system for use.

$ rex create prepare
[2011-08-06 10:25:58] (5783) - INFO - Running task: create
[2011-08-06 10:26:38] (5783) - INFO - Running task: prepare
[2011-08-06 10:26:38] (5801) - INFO - Connecting to 46.51.135.11 (root)
[2011-08-06 10:27:14] (5801) - INFO - Installing apache2.
[2011-08-06 10:27:30] (5801) - INFO - Uploadling files/index.html -> /var/www/index.html

Proudly powered by Statocles

Google Group / Twitter / GitHub / Mailinglist / irc.freenode.net #rex   -.ô.-   Disclaimer