(R)?ex Deployment & Configuration Management

Search

News

2016-09-08

Work with (R)?ex at adjust! Check out their job posting for details, or contact our fellow core developer, FErki.

2016-07-16

(R)?ex 1.4.1 released, fixing many bugs. See the release notes for more details.

2016-03-07

(R)?ex 1.4.0 released, containing lots of goodies. See the release notes for more details.

2015-09-04

(R)?ex 1.3.3 released, fixing a bunch of bugs. See the release notes for more details.

2015-06-22

adjust GmbH is sponsoring the (R)?ex project with a new build server. Thank you for your support!

2015-06-17

(R)?ex 1.3.2 released, fixing issues related to file manipulation when run on BSDs. See the release notes for more details.

2015-06-08

(R)?ex 1.3.1 released, fixing Rex::Commands::DB related tests.

2015-05-27

Read the second part of "Rex in practice" series about Test-driven infrastructure.

2015-05-09

repositor.io 1.1.0 released. repositor.io is a repository management tool for apt, yum, yast and docker. This is a bugfix release with fixes for ubuntu and centos7 installation media mirroring.

2015-05-03

(R)?ex 1.2.0 released. See the release notes for more details.

2015-03-27

View the slides of the talk An introduction to Rex from Andy Beverley.

Conferences

2016-06-21

Training

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
Fork me on GitHub
Google Group / Twitter / GitHub / Mailinglist / irc.freenode.net #rex   -.รด.-   Disclaimer