A Amazon adicionou recentemente o recurso maravilhoso de marcar instâncias EC2 com pares de valor-chave para tornar o gerenciamento de um grande número de VMs um pouco mais fácil.
Existe alguma maneira de consultar essas tags da mesma maneira que alguns dos outros dados definidos pelo usuário? Por exemplo:
$ curl http://169.254.169.254/latest/meta-data/placement/availability-zone
us-east-1d
Existe alguma maneira semelhante de consultar as tags?
amazon-web-services
amazon-ec2
Josh Lindsey
fonte
fonte
ec2metadata --instance-id
--out = json | jq '.Tags [] | select (.Key == "role") | .Value 'ec2metadata
ferramenta está obsoleta. Agora você consulta o URL 'mágico' em 169.254.169.254/latest/meta-data - acesse -o com cURL e ele fornece pontos de extremidade mágicos que você pode usar para obter vários bits de dados. Neste caso,curl http://169.254.169.254/latest/meta-data/instance-id
obtém o seu ID de instânciaO script bash a seguir retorna o Nome da sua instância ec2 atual (o valor da tag "Nome"). Modifique TAG_NAME para seu caso específico.
Para instalar o aws cli
Caso você use IAM em vez de credenciais explícitas, use estas permissões de IAM:
fonte
aws ec2 describe-tags
. Eu precisava adicionar este IAM às políticas embutidas da minha função IAM. Obrigado!| cut -f5
por--query="Tags[0].Value"
.Depois de ter
ec2-metadata
eec2-describe-tags
instalado (como mencionado na resposta de Ranieri acima ), aqui está um exemplo de comando shell para obter o "nome" da instância atual, supondo que você tenha uma tag "Nome = Foo" nela.Presume que as variáveis de ambiente EC2_PRIVATE_KEY e EC2_CERT estão definidas.
Isso retorna
Foo
.fonte
ec2-describe-tags
padrão éus-east-2
. Passe a--region
bandeira para usar uma região diferente.Você pode adicionar este script aos seus dados de usuário de inicialização em nuvem para baixar tags EC2 para um arquivo local:
Você precisa das ferramentas AWS CLI instaladas em seu sistema: você pode instalá-las com uma
packages
seção em um arquivo de configuração em nuvem antes do script, usar uma AMI que já as inclui ou adicionar um comandoapt
ouyum
no início do script.Para acessar tags EC2, você precisa de uma política como esta na função IAM da sua instância:
As tags EC2 da instância estarão disponíveis
/etc/ec2-tags
neste formato:Você pode incluir o arquivo como está em um script de shell usando
. /etc/ec2-tags
, por exemplo:As tags são baixadas durante a inicialização da instância, portanto, não refletirão as alterações subsequentes.
O script e a política do IAM são baseados na resposta de itaifrenkel.
fonte
aws:autoscaling:groupName
aws ec2 describe-tags --region $REGION --filter "Name=resource-id,Values=$INSTANCE_ID" --output=text | sed -r 's/TAGS\t(.*)\t.*\t.*\t(.*)/EC2_TAG_\1="\2"/' |sed -r 's/aws:autoscaling:/aws_autoscaling_/' > /etc/ec2-tags
Se você não estiver na zona de disponibilidade padrão, os resultados do overthink retornarão vazios.
Se você quiser adicionar um filtro para obter uma tag específica (elasticbeanstalk: nome-do-ambiente no meu caso), você pode fazer isso.
E para obter apenas o valor da tag que filtrou, canalizamos para cortar e obter o quinto campo.
fonte
elasticbeanstalk:environment-name
porName
Para Python:
fonte
instance_metadata = utils.get_instance_metadata(timeout=0.5, num_retries=1)
Você também pode usar a
describe-instances
chamada cli em vez dedescribe-tags
:Este exemplo mostra como obter o valor da tag 'my-tag-name' para a instância:
Mude a região para se adequar às suas circunstâncias locais. Isso pode ser útil quando sua instância tem o privilégio describe-instances, mas não descreva-as tags na política de perfil da instância
fonte
Usando as APIs de 'dados do usuário' e 'metadados' da AWS, é possível escrever um script que envolve o fantoche para iniciar a execução de um fantoche com um nome de certificado personalizado.
Primeiro inicie uma instância aws com dados de usuário personalizados: 'role: webserver'
Isso chama puppet com um certname como 'webserver.i-hfg453.aws', você pode então criar um manifesto de nó chamado 'webserver' e puppets 'fuzzy node matching' significará que é usado para provisionar todos os servidores web.
Este exemplo pressupõe que você construiu uma imagem de base com fantoche instalado, etc.
Benefícios:
1) Você não precisa passar suas credenciais
2) Você pode ser tão granular quanto quiser com as configurações de função.
fonte
Eu reuni o seguinte que é esperançosamente mais simples e mais limpo do que algumas das respostas existentes e usa apenas o AWS CLI e nenhuma ferramenta adicional.
Este exemplo de código mostra como obter o valor da tag 'myTag' para a instância EC2 atual:
Usando tags de descrição :
Ou, alternativamente, usando describe-instances :
fonte
Uma variação de algumas das respostas acima, mas foi assim que obtive o valor de uma tag específica do script de dados do usuário em uma instância
fonte
Instale o AWS CLI:
Obtenha as tags para a instância atual:
Saídas:
Use um pouco de perl para extrair as tags:
Retorna:
fonte
ec2metadata
não está no aws-cli, mas pode ser substituído porcurl --silent http://169.254.169.254/latest/meta-data/instance-id
. também,jq
pode analisar o json mais facilmente, ou um formato de saída diferente é ainda mais fácil.sudo apt-get -y install python
eexport AWS_DEFAULT_REGION=us-west-1
instance-id: i-07f59f3564618f148
Baixe e execute um executável autônomo para fazer isso.
Às vezes, não é possível instalar o awscli que depende do python. o docker também pode estar fora de cogitação.
Aqui está minha implementação em golang: https://github.com/hmalphettes/go-ec2-describe-tags
fonte
Jq + ec2metadata torna-o um pouco mais agradável. Estou usando cf e tenho acesso à região. Caso contrário, você pode pegá-lo no bash.
fonte
Para aqueles loucos o suficiente para usar Fish shell no EC2, aqui está um trecho útil para seu /home/ec2-user/.config/fish/config.fish. O comando hostdata agora irá listar todas as suas tags, bem como o IP público e o nome do host.
fonte