Назад | Перейти на главную страницу

Как вы помечаете и называете инстанс EC2, который был запущен спотовым запросом EC2?

У меня есть пара спотовых запросов EC2, которые запускают инстансы EC2 по подходящей цене. Я бы хотел, чтобы полученные экземпляры были помечены Name и Role , чтобы мой инструмент управления конфигурацией знал, что это за машина.

ОБНОВИТЬ:

Я воспользовался советом Hyper Anthony и реализовал его - поскольку опрос должен был быть подвержен ошибкам и требовал много ресурсов, я добавил сценарий запуска в свой AMI, который обновляет теги при запуске экземпляра. Я предпринял следующие шаги:

Убедитесь, что Boto установлен на любом AMI, который вы используете

pip install boto

Назначьте роль IAM экземпляру EC2

У запускаемого экземпляра должен быть какой-то способ доступа к информации о спотовом запросе. Используйте роль 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 отмечает, что этот тип ресурса может быть помечен, но результирующие теги не переносятся в фактические экземпляры:

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

Поэтому вам нужно будет добавить теги после запуска экземпляров. Здесь у вас есть несколько вариантов:

  • Скрипт пользовательских данных на созданном экземпляре: Напишите сценарий пользовательских данных, который использует инструменты командной строки и Служба метаданных EC2 чтобы позволить экземпляру обнаружить свой идентификатор экземпляра и создать теги для себя. Вы можете использовать AWS CLI создать теги пометить любой из ваших ресурсов EC2. В качестве альтернативы вы можете записать это в AMI в качестве сценария запуска для любой ОС, которую вы собираетесь использовать. В любой ситуации экземпляр должен иметь достаточные разрешения создать для себя теги EC2.
  • Внешняя утилита, которая отслеживает ваш спотовый запрос: Вы можете использовать один из пакетов SDK AWS для отслеживания спотовых запросов и пометить экземпляры после их создания. 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

Интересно, что моя жалоба заключается в том, что он помечает только экземпляр и не помечает спотовый запрос, что противоположно вашей проблеме.