2

我想获取创建 ami 的实例 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?

4

3 回答 3

4

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

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

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

于 2015-07-14T19:05:34.967 回答
1
instances = ec2.instances.filter(
    Filters=[{'Name': 'instance-state-name', 'Values': ['running']}])
for instance in instances:
    print(instance.id, instance.instance_type)

(在此处的 boto3 文档中找到)

于 2016-03-11T09:55:58.627 回答
1

您可以查找您的 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']
于 2016-07-06T22:36:02.827 回答