Как получить идентификатор экземпляра из ami с помощью Boto3

Я хотел получить идентификатор экземпляра, который создает 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)

Но приведенный выше сценарий выдает сообщение об исключении «Ключ InstanceId не найден», поскольку текущая функция не предоставляет информацию об экземпляре, создавшем эту ami.

Есть ли способ определить идентификатор экземпляра, который создает этот ami с помощью amazon-boto3?


person tom    schedule 14.07.2015    source источник


Ответы (3)


Идентификатора экземпляра нет, и даже если бы он был, какой в ​​нем был бы смысл? AMI был создан некоторое время назад из работающего или остановленного экземпляра EC2, но идентификатор этого экземпляра не имеет значения.

Вы можете увидеть определенные свойства, доступные для изображения здесь, для пример архитектуры и даты создания.

Наверное, стоит спросить: что вы на самом деле пытаетесь здесь сделать? Как вы думаете, зачем вам нужен идентификатор экземпляра?

person jarmod    schedule 14.07.2015
comment
Я согласен с вами, мне действительно нужно найти экземпляр (id), который создал этот файл ami. - person tom; 15.07.2015
comment
@anoop Насколько я знаю, вы не можете получить идентификатор экземпляра постфактум. Однако, вероятно, именно вы инициировали создание AMI, так почему бы вам просто не изменить этот процесс, чтобы также записать идентификатор исходного экземпляра, например, как тег в новом AMI? Я до сих пор не понимаю, зачем вам нужен идентификатор экземпляра - это не значимая часть данных. Однако я мог понять, почему вы можете захотеть скопировать теги из исходного экземпляра в AMI - это имело бы смысл. - person jarmod; 15.07.2015
comment
Спасибо @jarmod. :) Мне действительно нужно скопировать все amis (которые создаются экземпляром) в другой регион через Boto Call. - person tom; 15.07.2015
comment
@anoop Мне все еще не ясно, почему идентификатор экземпляра полезен в этом сценарии, но если он вам действительно нужен, просто добавьте его в AMI в качестве тега (или сохраните независимое сопоставление в базе данных идентификатора AMI с идентификатором экземпляра). - person jarmod; 15.07.2015
comment
Да, вы правы. Поскольку я не могу получить идентификатор экземпляра из метаданных ami, я добавил информацию об экземпляре в описание ami. Спасибо. - person tom; 16.07.2015

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

(находится в документе boto3 здесь)

person Claire    schedule 11.03.2016

Вы можете найти любой экземпляр, который может описать ваша роль 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']
person someben    schedule 06.07.2016