Tenho algumas solicitações pontuais do EC2 que iniciam instâncias do EC2 quando o preço é justo. Eu gostaria que as instâncias resultantes fossem marcadas com uma tag Name
e Role
para que minha ferramenta de gerenciamento de configuração soubesse que tipo de máquina é.
ATUALIZAÇÃO :
Segui o conselho do Hyper Anthony e o implementei - como a pesquisa seria propensa a erros e consumiria muitos recursos, adicionei um script de inicialização à minha AMI que atualiza as tags quando uma instância é iniciada. Estas são as etapas que executei:
Certifique-se de que o Boto esteja 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 forma de acessar informações sobre a solicitação spot. Use uma função do IAM ou, como alternativa, disponibilize as chaves de acesso para sua instância. A política que anexei à função IAM que usei é:
{
"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)
As solicitações de instâncias spot são um tipo de recurso do EC2. A documentação da AWS observa que esse tipo de recurso pode ser marcado , mas as marcas resultantes não são transportadas para as instâncias reais:
Portanto, você precisará adicionar as tags depois que as instâncias forem iniciadas. Você tem algumas opções aqui:
Agora você pode fornecer tags para sua SpotFleetLaunchSpecification ao criar uma solicitação de frota spot, e essas tags serão aplicadas a novas instâncias nessa frota automaticamente.
http://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_SpotFleetLaunchSpecification.html
Outra possibilidade é usar o Ansible como sua ferramenta de gerenciamento de configuração. No módulo ec2, que permite acionar instâncias spot e de ciclo de vida normal, você pode adicionar os atributos "instance_tags" para criar as tags. Um manual simples seria:
Curiosamente, minha reclamação é que ele apenas marca a instância e não marca a solicitação pontual, o oposto do seu problema.