У меня есть пара спотовых запросов EC2, которые запускают инстансы EC2 по подходящей цене. Я бы хотел, чтобы полученные экземпляры были помечены Name
и Role
, чтобы мой инструмент управления конфигурацией знал, что это за машина.
ОБНОВИТЬ:
Я воспользовался советом Hyper Anthony и реализовал его - поскольку опрос должен был быть подвержен ошибкам и требовал много ресурсов, я добавил сценарий запуска в свой AMI, который обновляет теги при запуске экземпляра. Я предпринял следующие шаги:
pip install boto
У запускаемого экземпляра должен быть какой-то способ доступа к информации о спотовом запросе. Используйте роль IAM или сделайте ключи доступа доступными вашему экземпляру. Политика, которую я привязал к роли IAM, которую я использовал:
{
"Statement": [
{
"Action": [
"ec2:CreateTags",
"ec2:DescribeTags",
"ec2:DescribeInstances"
],
"Effect": "Allow",
"Resource": [
"*"
],
"Sid": "Stmt1432737176000"
}
],
"Version": "2012-10-17"
}
def get_tags_from_spot_request():
instance_id = boto.utils.get_instance_identity()['document']['instanceId']
region = boto.utils.get_instance_identity()['document']['region']
conn = boto.ec2.connect_to_region(region)
inst = boto.ec2.instance.Instance(connection=conn)
inst.id = instance_id
inst.update()
spot_id = inst.spot_instance_request_id
tags = conn.get_all_tags(filters={'resource-type': 'spot-instances-request', 'resource-id': spot_id})
for tag in tags:
inst.add_tag(tag.name, tag.value)
Запросы на спотовые инстансы - это тип ресурса EC2. Документация AWS отмечает, что этот тип ресурса может быть помечен, но результирующие теги не переносятся в фактические экземпляры:
Теги, которые вы создаете для запросов на спотовые инстансы, применяются только к запросам. Эти теги не добавляются автоматически к спотовому инстансу, который спотовый сервис запускает для выполнения запроса. Вы должны сами добавить теги к спотовому инстансу при создании запроса спотового инстанса или после его запуска.
Поэтому вам нужно будет добавить теги после запуска экземпляров. Здесь у вас есть несколько вариантов:
Теперь вы можете добавить теги в спецификацию SpotFleetLaunchSpecification при создании запроса спотового парка, и эти теги будут автоматически применяться к новым экземплярам в этом парке.
http://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_SpotFleetLaunchSpecification.html
Другая возможность - использовать Ansible в качестве инструмента управления конфигурацией. В модуле ec2, который позволяет запускать как спотовые, так и обычные экземпляры жизненного цикла, вы можете добавить атрибуты instance_tags для создания тегов. Вот простой сценарий:
- name: Provision Spot Instance
hosts: localhost
connection: local
gather_facts: False
tasks:
- name: Launch the new Spot Instance
local_action:
module: ec2
spot_price: 0.02
group: testSG
instance_type: m3.medium
image: ami-12345
wait: true
instance_tags:
Name: TagValueForName
Foo: TagValueForFoo
region: us-east-1
keypair: mykeypair
Интересно, что моя жалоба заключается в том, что он помечает только экземпляр и не помечает спотовый запрос, что противоположно вашей проблеме.