Ansible: Criado AMI Windows personalizada na AWS (Parte 2)

Criando Windows personalizado e gerando AMI com Ansible

Featured image

Na parte 1 aprendemos como usar um script AWS User Data para configurar uma senha de Administrador e configurar o WinRM no Windows. Agora que sabemos como criar uma instância setando um senha especifica, vamos ao restante dos procedimentos. Vamos estruturar nosso projeto e manter as coisas organizadas.

Recursos utilizados, caso não tenha algo instalado, não funcionará :

Python 3.8.0
Módulos pip:

Ansible 2.9.2

Já podemos supor que você tenha o Ansible configurado corretamente para sua conta da AWS (por exemplo, boto instalado, credenciais do IAM configuradas). Consulte o Guia da AWS da Ansible se precisar de ajuda para fazer isso. Por simplicidade, esses exemplos também pressupõem que você tenha uma VPC padrão funcional em sua região (você deve ter, a menos que a tenha excluído). Se você precisar de ajuda para configurar isso, consulte a página da Amazon em VPCs padrão.

Caso queira ir direto para os arquivos usados, pode acessar no github: https://github.com/sidneiweber/ansible-windows-ami

Vamos iniciar pelas nossas variáveis, onde vamos setar a região da AWS, o tipo de instância, nossa chave, vpc e subnet, nossa senha que usamos na primeira parte do artigo e alguns detalhes sobre os volumes:

# cat group_vars/all.yml
target_aws_region: us-east-1
instance_type: t3.small
keypair: keypair
vpc_id: vpc-xxxxx
subnet: subnet-xxxxx
win_initial_password: myTempPassword123!
volumes:
  - device_name: /dev/sda1
    device_type: gp2
    volume_size: 30
    delete_on_termination: true

Nosso arquivo hosts ficará assim. O grupo win é onde será adicionada a instância após a criação:

Com essas váriaveis em mãos, vamos iniciar nossa instância base já usando o userdata assim como fizemos no painel da AWS, só que dessa vez diretamente pelo ansible:

Agora vamos conectar na instância e fazer a instalação do que precisamos, vamos contar com auxilio de um script para instalar o Chocolatey e algumas ferramentas (JDK e git) somente para exemplo.
Vamos também instalar algumas features do Windows como IIS, Powershell e .NET Framework, também somente para aprendizado. Também usaremos o módulo do Chocolatey para instalar o 7zip.

Agora vamos gerar nossa AMI personalizada, lembrando que o nome deve ser sempre diferente ao gerar uma nova AMI, aqui é interessante incluir uma variável com o número do build do seu pipeline por exemplo:

Para não ficarmos com essa instância base rodando sem necessidade, vamos exclui-la:

Então nosso arquivo principal para realizarmos essa tarega ficará assim:

E para rodar tudo e ser feliz basta executar: ansible-playbook -i hosts deploy.yml

Iniciando a execução:

Iniciando Instância

Instância rodando na AWS:

Instância iniciada

Instalando aplicações e configurações:

Realizando deploy das aplicações

Gerando a AMI e encerrando a instância base:

Gerando a AMI e encerrando instância

AMI gerada no painel da AWS:

AMI gerada

Resumo das execuções no Ansible:

Resumo das execuções

Referencia: http://blog.rolpdog.com/2015/09/manage-stock-windows-amis-with-ansible_3.html