如何使用boto从正在运行的实例创建EC2映像?

问题描述:

我正在尝试为我的EC2实例创建一个简单的python备份脚本。该脚本的目的是创建当前机器的每日/每周快照(请参阅this question on ServerFault)。我使用的是boto Python包的EC2 API,并想创建一个EBS AMI从一个给定的情况下(如ElasticFox的“创建图像”行动)如何使用boto从正在运行的实例创建EC2映像?

# 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? 

(也有报道为an issue on the boto project page,因为我没有” t找到邮件列表)

您需要EC2Connection对象的“create_image”方法。请参阅文档here。您也可以通过boto-users Google群组提问。