Como você marca e nomeia a Instância do EC2 que foi iniciada por uma Solicitação Spot do EC2?

7

Eu tenho algumas Solicitações Spot do EC2 que iniciam instâncias do EC2 quando o preço está correto. Gostaria que as instâncias resultantes fossem marcadas com uma tag Name e Role , portanto, minha ferramenta de gerenciamento de configuração sabe que tipo de máquina é.

UPDATE :

Eu segui o conselho do Hyper Anthony e o implementei - porque a pesquisa seria propensa a erros e com uso intensivo de recursos, adicionei um script de inicialização à minha AMI, que atualiza as tags quando uma instância é lançada, essas são as etapas:

Verifique se o Boto está instalado em qualquer AMI que você esteja usando

pip install boto

Atribuir uma função do IAM à instância do EC2

A instância que você está iniciando deve ter alguma maneira de acessar informações sobre a solicitação pontual. Use uma função do IAM ou, como alternativa, disponibilize as chaves de acesso à sua instância. A política que associei à função do IAM que utilizei é:

{
    "Statement": [
        {
            "Action": [
                "ec2:CreateTags",
                "ec2:DescribeTags",
                "ec2:DescribeInstances"
            ],
            "Effect": "Allow",
            "Resource": [
                "*"
            ],
            "Sid": "Stmt1432737176000"
        }
    ],
    "Version": "2012-10-17"
}

Execute um script na inicialização para atualizar as tags

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)
    
por c4urself 29.04.2015 / 19:17

3 respostas

9

Solicitações de instâncias spot são um tipo de recurso EC2. A documentação da AWS observa que esse tipo de recurso pode ser marcado , mas as tags resultantes não são transportadas para as instâncias reais:

The tags that you create for your Spot Instance requests only apply to the requests. These tags are not added automatically to the Spot Instance that the Spot service launches to fulfill the request. You must add tags to a Spot Instance yourself when you create the Spot Instance request or after the Spot Instance is launched.

Você precisará adicionar as tags após o lançamento das instâncias. Você tem algumas opções aqui:

  • Script de Dados do Usuário na instância criada: Escreva um script de dados do usuário que use ferramentas de linha de comando e o Serviço de meta-dados do EC2 para permitir que a instância descubra seu Id da instância e crie tags para si mesmo. Você pode usar o AWS CLI create-tags para marcar qualquer um dos seus Recursos EC2. Alternativamente, você poderia assar isso na AMI como um script de inicialização para qualquer sistema operacional que você pretenda usar. Em qualquer situação, a instância terá que ter permissões suficientes para criar Tags EC2 para si.
  • Utilitário externo que monitora sua solicitação spot: Você pode usar um dos SDKs da AWS para monitorar sua solicitação pontual e marcar as instâncias depois que elas forem criadas. AWS tem um tutorial sobre este mesmo tópico sob o título " Como marcar suas solicitações e instâncias "cabeçalho". Sem ficar muito detalhado, isso simplesmente envolve pesquisar Descrever solicitações de instância spot até um ID de instância criado está disponível e, em seguida, chamando Criar tags .
por 29.04.2015 / 23:52
5

Agora você pode fornecer tags para sua SpotFleetLaunchSpecification ao criar uma solicitação de frota spot, e essas tags serão aplicadas às novas instâncias dessa frota automaticamente.

link

    
por 22.08.2017 / 14:25
1

Outra possibilidade é usar o Ansible como sua ferramenta de gerenciamento de configuração. No módulo ec2, que permite ativar instâncias de ciclo de vida normais e pontuais, você pode adicionar os atributos "instance_tags" para criar as tags. Um manual simples seria:

  - 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

Curiosamente, minha reclamação é que ele marca apenas a instância e não marca a solicitação pontual, o oposto do problema.

    
por 31.08.2015 / 03:06