Pular para o conteúdo principal

MÓDULO 15 - Infrastructure as Code (CloudFormation)

Visão Geral​

Esta última semana introduz a Infrastructure as Code (IaC) com AWS CloudFormation. Você aprenderá a definir sua infraestrutura em arquivos de configuração versionáveis e reproduzíveis.

Projeto Final

este módulo inclui o Projeto Final (30%): criação de um template CloudFormation completo.

LocalStack Suporta CloudFormation!

O LocalStack emula o CloudFormation (básico). Você poderá testar seus templates localmente!

Objetivos de Aprendizagem​

  • Compreender os princípios de Infrastructure as Code
  • Escrever templates CloudFormation (YAML)
  • Fazer deploy e gerenciar stacks
  • Diagnosticar erros de deploy
  • Aplicar boas práticas de IaC

Conteúdo da Semana​

1. Por que Infrastructure as Code?​

┌─────────────────────────────────────────────────────────────┐
│ INFRASTRUCTURE AS CODE │
├─────────────────────────────────────────────────────────────┤
│ │
│ ANTES (Manual) DEPOIS (IaC) │
│ ────────────── ────────── │
│ │
│ • Cliques no console • Arquivos de código │
│ • Documentação desatualizada • Código = Documentação │
│ • "Funcionava ontem..." • Reproduzível │
│ • Ambientes diferentes • Idênticos │
│ • Difícil de auditar • Controle de versão │
│ • Rollback manual • Rollback automático │
│ │
│ Benefícios: │
│ ✅ Reprodutibilidade ✅ Versionamento (Git) │
│ ✅ Consistência ✅ Code review │
│ ✅ Automação ✅ Rollback fácil │
│ ✅ Documentação viva ✅ Possibilidade de testes │
│ │
└─────────────────────────────────────────────────────────────┘

2. CloudFormation - Conceitos​

┌─────────────────────────────────────────────────────────────┐
│ AWS CLOUDFORMATION │
├─────────────────────────────────────────────────────────────┤
│ │
│ TEMPLATE (YAML/JSON) │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ AWSTemplateFormatVersion: '2010-09-09' │ │
│ │ Description: Minha infraestrutura │ │
│ │ │ │
│ │ Parameters: │ │
│ │ Environment: │ │
│ │ Type: String │ │
│ │ │ │
│ │ Resources: │ │
│ │ MyVPC: │ │
│ │ Type: AWS::EC2::VPC │ │
│ │ Properties: │ │
│ │ CidrBlock: 10.0.0.0/16 │ │
│ │ │ │
│ │ Outputs: │ │
│ │ VPCId: │ │
│ │ Value: !Ref MyVPC │ │
│ └─────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ STACK │ │
│ │ (Conjunto de recursos criados) │ │
│ │ │ │
│ │ VPC ─── Subnet ─── Security Group ─── EC2 │ │
│ │ │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘

3. Estrutura de um Template​

AWSTemplateFormatVersion: '2010-09-09'
Description: Template básico para o curso AWS

# Parâmetros de entrada
Parameters:
EnvironmentName:
Type: String
Default: dev
AllowedValues:
- dev
- staging
- prod

# Recursos a serem criados
Resources:
# VPC
MyVPC:
Type: AWS::EC2::VPC
Properties:
CidrBlock: 10.0.0.0/16
EnableDnsHostnames: true
Tags:
- Key: Name
Value: !Sub ${EnvironmentName}-vpc

# Subnet Pública
PublicSubnet:
Type: AWS::EC2::Subnet
Properties:
VpcId: !Ref MyVPC
CidrBlock: 10.0.1.0/24
MapPublicIpOnLaunch: true
Tags:
- Key: Name
Value: !Sub ${EnvironmentName}-public-subnet

# Saídas
Outputs:
VPCId:
Description: ID da VPC criada
Value: !Ref MyVPC
Export:
Name: !Sub ${EnvironmentName}-vpc-id

4. Funções Intrínsecas Úteis​

FunçãoUsoExemplo
!RefReferencia um recurso/parâmetro!Ref MyVPC
!SubSubstituição de variáveis!Sub ${AWS::StackName}-vpc
!GetAttAtributo de um recurso!GetAtt MyEC2.PublicIp
!JoinConcatena valores!Join ['-', [a, b, c]]
!IfCondição!If [IsProd, m5.large, t3.micro]

5. Lab com LocalStack​

# Fazer deploy de um stack no LocalStack
awslocal cloudformation create-stack \
--stack-name meu-stack \
--template-body file://template.yaml \
--parameters ParameterKey=EnvironmentName,ParameterValue=dev

# Ver status
awslocal cloudformation describe-stacks \
--stack-name meu-stack

# Listar recursos criados
awslocal cloudformation list-stack-resources \
--stack-name meu-stack

# Remover o stack
awslocal cloudformation delete-stack \
--stack-name meu-stack

Projeto Final (30%)​

Objetivo​

Criar um template CloudFormation que faça deploy de uma arquitetura web simples:

  • 1 VPC com subnet pública
  • 1 Security Group (HTTP + SSH)
  • 1 Instância EC2 com user-data instalando um servidor web

Entregáveis​

  1. Template CloudFormation (YAML)

    • Bem estruturado e comentado
    • Parâmetros para o ambiente
    • Outputs úteis
  2. Documentação

    • Descrição da arquitetura
    • Instruções de deploy
    • Testes de validação
  3. Demonstração

    • Deploy no LocalStack
    • Prova de funcionamento
    • Perguntas/Respostas

Grade de Avaliação​

CritérioPontos
Template válido e funcional10
Boas práticas (params, outputs)5
Documentação clara5
Testes e validação5
Demonstração e perguntas e respostas5
Total30
  1. Conceitos de IaC e CloudFormation
  2. Quiz de Validação - 30 questões para validar seu conhecimento
  3. Lab: CloudFormation

🎓 Parabéns!​

Você concluiu o curso Serviços de Computação AWS!

Competências Adquiridas​

  • ✅ Conceitos de cloud e AWS
  • ✅ EC2 e armazenamento EBS
  • ✅ Redes VPC e segurança
  • ✅ Alta disponibilidade e scaling
  • ✅ Serverless com Lambda
  • ✅ Monitoramento e observabilidade
  • ✅ FinOps e otimização
  • ✅ Infrastructure as Code

Próximos Passos​

  • 📚 Certificações AWS (Cloud Practitioner, Solutions Architect)
  • 🔧 Prática em conta AWS real (Free Tier)
  • 🚀 Projetos pessoais
  • 💼 Experiência profissional

Boa continuação na sua jornada cloud!