Leobreda.net

Web, .Net,
SQL, Cloud...

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:

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!

;-)




Acessar todos os artigos »