aws boto — как создать экземпляр и вернуть instance_id

#python #amazon-ec2 #boto #boto3

#python #amazon-ec2 #boto #boto3

Вопрос:

Я хочу создать скрипт на python, в котором я могу передавать аргументы / входные данные для указания типа экземпляра, а затем присоединять дополнительные EBS (при необходимости).

 ec2 = boto3.resource('ec2','us-east-1')
hddSize = input('Enter HDD Size if you want extra space ')
instType = input('Enter the instance type ')

def createInstance():
    ec2.create_instances(
        ImageId=AMI, 
        InstanceType = instType,  
        SubnetId='subnet-31d3ad3', 
        DisableApiTermination=True,
        SecurityGroupIds=['sg-sa4q36fc'],
        KeyName='key'
     )
return instanceID; ## I know this does nothing

def createEBS():
    ebsVol = ec2.Volume(
        id = instanceID,
        volume_type = 'gp2', 
        size = hddSize
        )
 

Теперь, может ли ec2.create_instances() вернуть идентификатор или мне нужно выполнить итерацию резервирования?

или мне сделать ec2.create(instance_id) / вернуть instance_id? Документация здесь не совсем понятна.

Комментарии:

1. create_instance вернет объект ответа, вот где вы получаете идентификатор экземпляра после создания.

Ответ №1:

в boto3 create_instances возвращает список, поэтому, чтобы получить идентификатор экземпляра, который был создан в запросе, выполните следующие действия:

 ec2_client = boto3.resource('ec2','us-east-1')
response = ec2_client.create_instances(ImageId='ami-12345', MinCount=1, MaxCount=1)
instance_id = response[0].instance_id
 

Ответ №2:

В документах указано, что вызов create_instances()

https://boto3.readthedocs.io/en/latest/reference/services/ec2.html#EC2.ServiceResource.create_instances

Возвращает список (ec2.Instance). Таким образом, вы должны иметь возможность получать идентификаторы экземпляров из свойства ‘id’ объекта (объектов) в списке.

Комментарии:

1. Ах, спасибо, Дэн. Я совершенно не видел этого o_O. Спасибо.

Ответ №3:

вы можете выполнить следующее

 def createInstance():
    instance = ec2.create_instances(
        ImageId=AMI, 
        InstanceType = instType,  
        SubnetId='subnet-31d3ad3', 
        DisableApiTermination=True,
        SecurityGroupIds=['sg-sa4q36fc'],
        KeyName='key'
     )
     # return response
     return instance.instance_id
 

фактически create_instances возвращает ec2.instance экземпляр