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

How to get instance id from the ami using Boto3

我想获取创建 ami.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)

但是上面的脚本会抛出一条异常消息,"No InstanceId key Found"因为当前函数没有提供创建这个 ami 的实例的信息。

有什么方法可以确定使用 amazon-boto3 创建该 ami 的实例 ID?

没有实例ID,就算有又有什么用呢? AMI 是过去某个时间从 运行 或已停止的 EC2 实例创建的,但该实例的 ID 无关紧要。

您可以查看图像可用的特定属性 here,例如架构和创建日期。

可能值得一问:你到底想在这里做什么?您认为您为什么需要实例 ID?

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']