python boto3 - Boto EC2: создать экземпляр с тегами




2 Answers

Теги не могут быть созданы до тех пор, пока экземпляр не будет создан. Хотя функция называется create_instance, то, что она действительно делает, является резервирование и экземпляр. Затем этот экземпляр может быть запущен или не запущен. (Обычно это так, но иногда ...)

Таким образом, вы не можете добавить тег, пока он не будет запущен. И нет способа узнать, запущен ли он без опроса. Вот так:

reservation = conn.run_instances( ... )

# NOTE: this isn't ideal, and assumes you're reserving one instance. Use a for loop, ideally.
instance = reservation.instances[0]

# Check up on its status every so often
status = instance.update()
while status == 'pending':
    time.sleep(10)
    status = instance.update()

if status == 'running':
    instance.add_tag("Name","{{INSERT NAME}}")
else:
    print('Instance status: ' + status)
    return None

# Now that the status is running, it's not yet launched. The only way to tell if it's fully up is to try to SSH in.
if status == "running":
    retry = True
    while retry:
        try:
            # SSH into the box here. I personally use fabric
            retry = False
        except:
            time.sleep(10)

# If we've reached this point, the instance is up and running, and we can SSH and do as we will with it. Or, there never was an instance to begin with.
example s3

Есть ли способ с помощью API boto python указать теги при создании экземпляра? Я пытаюсь избежать создания экземпляра, получить его и добавить теги. Было бы намного проще иметь экземпляр, предварительно настроенный на наличие определенных тегов, или указать теги при выполнении следующей команды:

ec2server.create_instance(
        ec2_conn, ami_name, security_group, instance_type_name, key_pair_name, user_data
    )



Вы можете пометить экземпляр или том при создании

Из run_instances docs :

Вы можете пометить экземпляры и объемы EBS во время запуска, после запуска или обоих. Дополнительные сведения см. В разделе « CreateTags и « Тегирование ресурсов Amazon EC2» .

Использование тегов AWS doc содержит таблицу с ресурсами, поддерживающими тегирование и поддерживающие тегирование при создании (поддержка экземпляров и EBS томов как с 01-MAY-2017)

Вот фрагмент кода для экземпляра тега во время создания в Python (другие ссылки SDK перечислены на этой странице ):

from pkg_resources import parse_version
import boto3
assert parse_version(boto3.__version__) >= parse_version('1.4.4'), \
    "Older version of boto3 installed {} which doesn't support instance tagging on creation. Update with command 'pip install -U boto3>=1.4.4'".format(boto3.__version__)
import botocore
assert parse_version(botocore.__version__) >= parse_version('1.5.63'), \
   "Older version of botocore installed {} which doesn't support instance tagging on creation. Update with command 'pip install -U botocore>=1.5.63'".format(botocore.__version__)
ec2 = boto3.resource('ec2')
tag_purpose_test = {"Key": "Purpose", "Value": "Test"}
instance = ec2.create_instances(
    ImageId=EC2_IMAGE_ID,
    MinCount=1,
    MaxCount=1,
    InstanceType=EC2_INSTANCE_TYPE,
    KeyName=EC2_KEY_NAME,
    SecurityGroupIds=[EC2_DEFAULT_SEC_GROUP],
    SubnetId=EC2_SUBNET_ID,
    TagSpecifications=[{'ResourceType': 'instance',
                        'Tags': [tag_purpose_test]}])[0]

я использовал

Python 2.7.13
boto3 (1.4.4)
botocore (1.5.63)



Related

python amazon-ec2 amazon-web-services boto