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!
;-)