DEV Community

Cover image for Usando Inventário Dinâmico com Ansible e AWS para Criar e Configurar Instâncias EC2
Marcos Vilela
Marcos Vilela

Posted on

Usando Inventário Dinâmico com Ansible e AWS para Criar e Configurar Instâncias EC2

Durante um projeto recente, precisei automatizar a criação e configuração de instâncias EC2 com Ansible, para tarefas assim o ideal são ferramentas como Terraform e semelhantes, no entanto, para tarefas com menores fluxos e menos intervenções, o Ansible se torna um aliado a estas ações pontuais, reduzindo assim mais um ponto de responsabilidade, além de, com os avanços da ferramenta o mesmo pode manipular muito bem infraestrutura não somente o configurando. Neste assunto, usando inventário dinâmico via plugin aws_ec2. O objetivo era simples: criar a instância uma vez e, depois disso, apenas configurar ou gerenciar, sem a recriar.

Neste post, mostro como resolvi problemas comuns nesse fluxo, como:

  • Obter IP público via inventário dinâmico
  • Executar tarefas apenas em instâncias já existentes
  • Ligar instâncias desligadas com Ansible

Estrutura do Projeto

  • Inventário dinâmico: inventories/aws_ec2.yml
  • Playbooks com tags (ex: ec2_create_instance, setup)
  • Roles separadas para criação e configuração
  • Chave SSH já cadastrada na AWS

Exemplo de Inventário Dinâmico

# inventories/aws_ec2.yml plugin: amazon.aws.aws_ec2 regions: - us-east-1 keyed_groups: - prefix: aws key: tags.Name 
Enter fullscreen mode Exit fullscreen mode

Para listar os hosts disponíveis:

ansible-inventory -i inventories/aws_ec2.yml --graph 
Enter fullscreen mode Exit fullscreen mode

Exemplo de saída:

@all: |--@aws_nome_do_grupo: | |--75.172.111.222 
Enter fullscreen mode Exit fullscreen mode

Criando a instância (com tag ec2_create_instance)

- name: Criar instância EC2 amazon.aws.ec2_instance: name: "{{ instance_name }}" image_id: "{{ ami_id }}" instance_type: t3.micro ... register: ec2_instance - name: Adicionar host dinâmico add_host: name: "{{ ec2_instance.instances[0].network_interfaces[0].association.public_ip }}" groups: aws_novo_grupo when: ec2_instance is defined 
Enter fullscreen mode Exit fullscreen mode

Configurando a instância já existente

Após a criação, você pode aplicar configurações usando apenas o inventário dinâmico e uma tag da instância.

- name: Configurar instância hosts: tag_Name_nome_do_grupo become: true tasks: - name: Instalar NGINX apt: name: nginx state: present 
Enter fullscreen mode Exit fullscreen mode

Execução:

ansible-playbook -i inventories/aws_ec2.yml playbooks/configurar.yml -l tag_Name_nome_do_grupo 
Enter fullscreen mode Exit fullscreen mode

Ligando uma instância desligada via Ansible

- name: Ligar instância EC2 hosts: localhost tasks: - name: Start EC2 amazon.aws.ec2: instance_ids: [i-0abc1234def56789] state: running wait: yes 
Enter fullscreen mode Exit fullscreen mode

Descobrindo o IP da instância

Com o inventário dinâmico, basta rodar:

ansible-inventory -i inventories/aws_ec2.yml --list | jq 
Enter fullscreen mode Exit fullscreen mode

Ou:

ansible-inventory -i inventories/aws_ec2.yml --graph 
Enter fullscreen mode Exit fullscreen mode

Você verá os IPs públicos e os grupos associados dinamicamente.

Conclusão

Esse fluxo permite:

  • Criar instâncias EC2 sob demanda
  • Usar inventário dinâmico para evitar hardcoding de IPs
  • Executar configurações de forma controlada
  • Gerenciar instâncias existentes com segurança e reusabilidade

💬 Se você também usa Ansible com AWS e quer trocar ideias, comenta aí ou me manda uma mensagem! Estou sempre aprendendo e ajustando esse fluxo para ambientes reais de DevOps/SRE.

Top comments (0)