Na empresa que trabalho tenho que constantemente criar instância EC2 Windows no AWS. E percebi que esse processo demorava em média 30 minutos para criar e colocar a máquina no domínio (Active Directory). Outra coisa que observei foi o gerenciamento e padronização de tags dos objetos relacionado à uma instância, como: tags na instância, volumes, security groups, security group rules e key pairs.

Pensando nisso, criei um Shell Script para agilizar este processo. Esse script serve para criar qualquer tipo instância EC2 desde que informemos um AMI-Id. Porém, como estou em um ambiente empresarial é ideal que tenhamos um template de uma instância com todos os softwares básicos necessários instalados. Mas não basta simplesmente criar uma instância e depois fazer uma imagem (AMI) dele. Provavelmente, assim como na minha empresa, vocês vão querer definir uma senha de administrador local para cada instância ou vão querer gerar uma chave de criptografia para cada instância. Para que isso seja possível, depois de configurarmos o template com tudo o que é necessário, precisamos configurar o EC2Launch para que ele leia o userdata e faça as alterações determinadas.

Para configurar o EC2Launch

1. Na instância a ser configurada, abra o seguinte arquivo em um editor de texto:

C:\ProgramData\Amazon\EC2-Windows\Launch\Config\LaunchConfig.json

2. Atualize as configurações a seguir conforme necessário e salve suas alterações.

{
 "setComputerName":true,
 "setWallpaper": true,
 "addDnsSuffixList": true,
 "extendBootVolumeSize": true,
 "handleUserData": true,
 "adminPasswordType": "Random",
 "adminPassword": "password that adheres to your security policy (optional)"
}

3. No Windows PowerShell, execute o seguinte comando para agendar o script para ser executado como uma tarefa agendada do Windows. O script é executado uma vez durante a próxima inicialização e se desativa, ou seja, não será executado nos próximos boots.

C:\ProgramData\Amazon\EC2-Windows\Launch\Scripts\InitializeInstance.ps1 -Schedule

Pré-requisitos para usar esse Shell Script

Para usar esse script a única coisa que precisamos fazer é configurar o terminal com uma conta AWS. Para isso precisamos criar um Access Key, instalar configurar aws cli.

Usando o script

Depois que tudo estiver configurado, basta fazer o download do meu script no github, digitando os seguintes comandos:

git clone https://github.com/marceloeliassantos/run-ec2
cd run-ec2
chmod +x run-ec2.sh
./run-ec2.sh

A partir deste ponto, basta responder as perguntas do script, conforme exemplo abaixo:

Veja que as únicas coisas que digitei foram:

  • O nome da instância: Harvard University
  • O hostname para o Windows: harvard01
  • E como a senha deve ser gerada: Opção 1

Os outros parâmetros já estavam salvos porque eu já havia usado esse script. Na verdade, durante o processo de desenvolvimento, teste e amadurecimento da ideia de como esse Shell Script deveria funcionar, eu criei mais 100 instâncias. Os parâmetros que estão entre colchetes serão sempre preservados de acordo com a última especificação do usuário.

Outra coisa que me motivou a desenvolver esse script é que agora eu tenho a maioria dos comandos aws cli relacionados à criação de instâncias em um único lugar. Talvez você não queira usar o script, mas talvez você queira saber qual o comando aws cli para criar uma política de segurança (security group) com seu IP público de Internet, no qual te permita fazer um acesso RDP ou SSH. Pois bem, isso está dentro deste script.

Observações:
  • Antes de executar este Shell Script, abra o código e tente entender o que ele faz. Altere conforme necessário.
  • As configurações do arquivo userdata.conf é somente para Windows.
  • Se aparecer um erro dizendo que o SubnetId não existe, pode ser por dois motivos: 1- Ele realmente não existe. 2- Você pode estar em uma região diferente do SubnetId que você especificou. O qual pode ser o erro mais comum.
  • Ao escolher a opção de usar a senha definida em no userdata, espere pelo menos 3 minutos antes de tentar fazer uma conexão RDP da criação da instância.
  • Caso seja escolhida a opção de senha aleatória com par de chaves, além de exibir a chave criptográfica no terminal, será criado um arquivo com o conteúdo da chave no mesmo diretório deste script, no seguinte formato: hostname-keypair.pem

Isso é tudo pessoal. Se esse script foi útil para você de alguma forma, deixe-me saber através dos comentários abaixo. Valeu.

Categorized in:

Tagged in:

,