如何使用boto从运行中的实例创建EC2镜像?

9 投票
1 回答
9457 浏览
提问于 2025-04-16 13:25

我正在尝试为我的EC2实例创建一个简单的Python备份脚本。这个脚本的目的是每天或每周对当前的机器进行快照(可以参考这个ServerFault上的问题)。我使用的是boto这个Python包来操作EC2的API,并且想要从一个指定的实例创建一个EBS AMI(就像ElasticFox中的“创建镜像”操作一样)

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

(这也被报告为boto项目页面上的一个问题,因为我没有找到邮件列表)

1 个回答

9

你需要使用EC2Connection对象的“create_image”方法。具体的说明可以在这里找到。如果你还有其他问题,也可以在boto-users的谷歌小组里询问。

撰写回答