Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I create an EC2 image from a running instance using boto?

I'm trying to create a simple python backup script for my EC2 instances. This script's purpose is to create daily/weekly snapshots of the current machine (see this question on ServerFault). I'm using the boto python package for EC2 API, and would like to create an EBS AMI from a given instance (like ElasticFox's "Create Image" action)

# This script will look up all your running EC2 images, find the current one, and back it up by creating an AMI 

# Configuration
accessKeyId = "..."
accessKeySecret = "..."
target = "..."

def resolveIp(target):
    import socket
    ip = repr(socket.gethostbyname_ex(target)[2][0])
    return ip

def find_target(target, connection) :
    ip = resolveIp(target)
    print "Finding instance for " + target + " (IP " + ip + ")"
    reservations = connection.get_all_instances();
    for reservation in reservations:
        instances = reservation.instances
        if len(instances) != 1:
            print "Skipping reservation " + reservation
            continue
        instance = instances[0]
        instanceIp = resolveIp(instance.dns_name)
        if instanceIp == ip:
            return instance

    raise Exception("Can't find instance with IP " + ip)

from boto.ec2.connection import EC2Connection

print "Connecting to EC2"
conn = EC2Connection(accessKeyId, accessKeySecret)
print "Connected to EC2"

instance = find_target(target, conn)
print "Backing up instance '{}'".format(instance)

# Now, I'd like to create a new image out of this instance
# Can you help?

(Also reported as an issue on the boto project page, since I didn't find a mailing list)

like image 457
ripper234 Avatar asked Mar 10 '11 07:03

ripper234


People also ask

How do I clone an AWS EC2 instance?

Log in to the AWS Management Console. If required, use the region selector in the top right corner to switch to the region where your instance was launched. Select your instance and then select the “Create Image” option in the “Actions” menu. Specify the name for the new image and then click the “Create Image” button.


1 Answers

You want the "create_image" method of the EC2Connection object. See the docs here. You can also ask questions on the boto-users Google Group.

like image 61
garnaat Avatar answered Oct 20 '22 17:10

garnaat