使用Python Boto删除Amazon EC2实例

1 投票
2 回答
6034 浏览
提问于 2025-04-17 16:21

我找到了一些示例代码,这些代码看起来可以用Python的boto库来创建一个Amazon EC2实例。不过,我实在搞不懂怎么写一个函数来删除这个实例。

有没有人对Python和boto了解得更多,可以告诉我应该怎么做才能删除这个实例呢?

# Delete EC2 instance
def delete_server():
    print(_yellow("Deleting EC2 instance"))

# Create EC2 instance
def create_server():
    print(_yellow("Creating EC2 instance"))

    image = conn.get_all_images(ec2_amis)

    reservation = image[0].run(1, 1, key_name=ec2_key_pair, security_groups=ec2_security,
        instance_type=ec2_instancetype)

    instance = reservation.instances[0]
    conn.create_tags([instance.id], {"Name":config['INSTANCE_NAME_TAG']})
    while instance.state == u'pending':
        print(_yellow("Instance state: %s" % instance.state))
        time.sleep(10)
        instance.update()

    print(_green("Instance state: %s" % instance.state))
    print(_green("Public dns: %s" % instance.public_dns_name))

    return instance.public_dns_name

2 个回答

0

你可能还想看看 starcluster

这个工具可能比直接使用boto更适合你的需求,不过无论如何,它的代码都是用boto写的,并且提供了很多管理EC2实例和集群的示例,基本上是你可能想做的事情。

6

关于EC2的使用,可以参考boto文档。你已经有了你创建的实例ID,只需要用下面的代码来终止它:

def delete_server(instanceId):
    conn.terminate_instances(instance_ids=[instanceId])

这里的conn是你用来创建实例时用的那个全局连接变量。需要注意的是,boto的调用需要一个实例ID的数组。terminate_instances这个调用会返回一个被终止的实例ID列表。

另外,如果你之前设置了保护,防止通过API终止实例,那你需要先去掉这个保护。你的示例代码没有做这一步,所以你应该可以顺利地去掉保护。

撰写回答