Amazon Webservices: Criando instâncias EC2 com o uso de CloudFormation e User Data
Automatize a criação de instâncias, instalação de Apache (httpd) e regras de firewall
A AWS é uma verdadeira sopa de letrinhas e nomenclaturas. E ainda estou me acostumando ;-)
Mas vamos ao que interessa! Neste artigo explico como subir uma instância EC2 com Apache em menos de 1 minuto utilizando:
- CloudFormation, denominado "infraestrutura como código", onde você escreve um arquivo script e ele cria automaticamente toda a sua infraestrutura.
- User Data, que é o primeiro script a ser executado após criação da instância. Neste caso, estamos instalando o Apache e iniciando o serviço httpd no servidor.

Criando o Script
Crie um arquivo template.json conforme o script abaixo. Se atente ao AvailabilityZone que está apontando para São Paulo (sa-east-1a), a ImageId e a InstanceType.
{
"Resources": {
"MyInstance": {
"Type": "AWS::EC2::Instance",
"Properties": {
"AvailabilityZone": "sa-east-1a",
"ImageId": "ami-003449ffb2605a74c",
"InstanceType": "t2.micro",
"UserData": {
"Fn::Base64": {
"Fn::Join": [
"",
[
"#!/bin/bash -xe\n",
"yum install -y httpd\n",
"echo \"<html>CloufFormation + EC2 + User Data !!</html>\" > /var/www/html/index.html\n",
"cd /var/www/html\n",
"chmod 755 index.html\n",
"chkconfig httpd on\n",
"service httpd start\n",
"service httpd on\n"
]
]
}
},
"Tags": [
{
"Key": "Name",
"Value": "CloudFormation Teste"
},
{
"Key": "Environment",
"Value": "DEV"
}
]
}
}
}
}
A relação de ImageId pode ser consultada no endereço https://sa-east-1.console.aws.amazon.com/ec2/home?region=sa-east-1#LaunchInstanceWizard
Reforço o uso da InstanceType t2.micro, que não é cobrada dentro do período free tier.
CloudFormation
Em Serviços, busque por CloudFormation e logo em seguida no link Create stack.

Faça o upload do arquivo json acima e clique em Next. Defina um nome para esse artefato (Stack name), Next, Next, Next, ..., Create Stack.
A ideia é essa! Next, Next, Next, justamente pela facilidade na criação de stack :-)

Após a criação, a stack será processada, iniciando do status CREATE_IN_PROGRESS até CREATE_COMPLETE. Aqui todo o ambiente levou 23 segundos para estar disponível.

EC2
Volte para as instâncias EC2 (https://sa-east-1.console.aws.amazon.com/ec2/v2/home), copie o IP.

Abra o navegador , e ... voilá!

Se o site não abriu, muita calma! Provavelmente o SecurityGroup não está preparado para receber requisições a porta 80.

Volte para a instância EC2 e Acesse o SecurityGroup associado.

Abra as propriedades de regras de entrada (inbound rules) e adicione o tipo HTTP com origem Anywhere. Salve as alterações e volte a acessar o site.

Você pode automatizar também a criação de SecurityGroup no arquivo template.json, ou associá-lo a um já existente. Para isso...
Vá até o SecurityGroup desejado, e copie o seu ID.

Acrescente o parâmetro SegurityGroupIds no template.json, onde o valor deve corresponder ao Security group ID.
"InstanceType": "t2.micro",
"SecurityGroupIds": [ "sg-0671bcede11c81aa0" ] ,
"UserData":
E assim a sua instância já sobe com o SecurityGroup liberado!

;-)