Skip to content
This repository


Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

Simple version of Perl Amazon EC2 modules that supports the tag API

Fetching latest commit…


Cannot retrieve the latest commit at this time

Octocat-spinner-32 bin
Octocat-spinner-32 lib
Octocat-spinner-32 t
Octocat-spinner-32 Build.PL
Octocat-spinner-32 Changes
Octocat-spinner-32 DISCLAIMER.txt
Octocat-spinner-32 LICENSE
Octocat-spinner-32 MANIFEST
Octocat-spinner-32 MANIFEST.SKIP
Octocat-spinner-32 README
This is an interface to Amazon EC2 REST tools that follows the
2013-07-15 API. I created it because I needed access to the Tag and
TagSet interfaces, and neither euca2ools nor Net::Amazon::EC2 provided
this functionality. Almost all of the Amazon API is supported, but API
calls for VM/volume import, bundle task management, and reserved instance
marketplace are not currently implemented.

The module provides an extensible object-oriented interface as
illustrated by the following code:

 # get new EC2 object
 my $ec2 = VM::EC2->new(-access_key => 'access key id',
                        -secret_key => 'aws_secret_key',
                        -endpoint   => '');

 # fetch an image by its ID
 my $image = $ec2->describe_images('ami-12345');

 # get some information about the image
 my $architecture = $image->architecture;
 my $description  = $image->description;
 my @devices      = $image->blockDeviceMapping;
 for my $d (@devices) {
    print $d->deviceName,"\n";
    print $d->snapshotId,"\n";
    print $d->volumeSize,"\n";

 # run two instances
 my @instances = $image->run_instances(-key_name      =>'My_key',
                                       -min_count     =>2,
                                       -instance_type => 't1.micro')
           or die $ec2->error_str;

 # wait for both instances to reach "running" or other terminal state

 # print out both instance's current state and DNS name
 for my $i (@instances) {
    my $status = $i->current_status;
    my $dns    = $i->dnsName;
    print "$i: [$status] $dns\n";

 # tag both instances with Role "server"
 foreach (@instances) {$_->add_tag(Role=>'server');

 # stop both instances
 foreach (@instances) {$_->stop}

 $ec2->wait_for_instances(@instances); # wait till they stop
 # create an image from both instance, tag them, and make them public
 for my $i (@instances) {
     my $img = $i->create_image("Autoimage from $i","Test image");
     $img->add_tags(Name  => "Autoimage from $i",
                    Role  => 'Server',
                    Status=> 'Production');

Copying AMIs Between Regions

This library provides a command-line script that makes it easy to move
an EBS-backed Amazon Machine Image (AMI) from one region to another. --from us-east-1 --to ap-southeast-1 ami-123456

This script will be installed for you when you install the library.

Development and bug reports

This module is supported using GitHub at To report a bug please open
the Issues tag and file a bug report using the "New Issue" button.

To contribute to development of this module, please obtain a github
account for yourself and then either:
 1) Fork a copy of the repository, make your changes against this repository, 
    and send a pull request to me to incorporate your changes.

 2) Contact me by email and ask for push privileges on the repository.

See for help getting started.


Many thanks to Lance Kinley, who contributed support for Network ACLs,
VPC VPNs, Elastic Load Balancing, and many smaller feature
enhancements as well as bug and documentation fixes.


Lincoln D. Stein <>
13 September 2012

Something went wrong with that request. Please try again.