如何使用Boto3从ami获取实例id

2024-10-04 15:26:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我想获取创建am I的实例id

    sess = Boto3Connecton.get_boto3_session(arn)
    elb_conn = sess.client(service_name='ec2', region_name=region)
    images = conn.describe_images(Owners=['self'])["Images"]
    for image in images:
        instance_id=image["InstanceId"]
        print "the instance which creates this ami is {0}".format(instance_id)

但是上面的脚本抛出了一个异常消息“没有找到InstanceId key”,因为当前函数没有提供创建这个ami的实例的信息。

有什么方法可以确定使用amazon-boto3创建那个ami的实例id吗?


Tags: 实例instancenameimageidgetboto3conn
3条回答
instances = ec2.instances.filter(
    Filters=[{'Name': 'instance-state-name', 'Values': ['running']}])
for instance in instances:
    print(instance.id, instance.instance_type)

(在boto3 doc here中找到)

您可以查找IAM角色可以描述的与本地主机名匹配的实例:

def get_ec2_instance_id():
    import socket
    hostname = socket.gethostname()
    ec2_client = boto3.client('ec2', region_name=REGION_NAME)
    for reservation in ec2_client.describe_instances()['Reservations']:
        for instance in reservation['Instances']:
            if instance['PrivateDnsName'].startswith(hostname):
                return instance['InstanceId']

没有实例ID,即使有,它还有什么用?AMI是在过去的某个时间从一个正在运行或已停止的EC2实例创建的,但该实例的ID并不重要。

您可以看到可用于图像here的特定属性,例如architecture和creationDate。

或许值得一问:你到底想在这里做什么?你为什么认为你需要一个实例ID?

相关问题 更多 >

    热门问题