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

时间:2015-07-14 18:02:57

标签: python amazon-web-services boto aws-ec2 boto3

我想获得实例ID ,这会创建ami。我正在使用以下脚本 -

    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的instance-id?

3 个答案:

答案 0 :(得分:4)

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

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

可能值得一提的是:你到底想要做什么?为什么你认为你需要一个实例ID?

答案 1 :(得分:1)

instances = ec2.instances.filter(
    Filters=[{'Name': 'instance-state-name', 'Values': ['running']}])
for instance in instances:
    print(instance.id, instance.instance_type)

(见boto3 doc here

答案 2 :(得分:0)

您可以查找您的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']