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ção | Uso | Exemplo |
|---|---|---|
!Ref | Referencia um recurso/parâmetro | !Ref MyVPC |
!Sub | Substituição de variáveis | !Sub ${AWS::StackName}-vpc |
!GetAtt | Atributo de um recurso | !GetAtt MyEC2.PublicIp |
!Join | Concatena valores | !Join ['-', [a, b, c]] |
!If | Condiçã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
-
Template CloudFormation (YAML)
- Bem estruturado e comentado
- Parâmetros para o ambiente
- Outputs úteis
-
Documentação
- Descrição da arquitetura
- Instruções de deploy
- Testes de validação
-
Demonstração
- Deploy no LocalStack
- Prova de funcionamento
- Perguntas/Respostas
Grade de Avaliação
| Critério | Pontos |
|---|---|
| Template válido e funcional | 10 |
| Boas práticas (params, outputs) | 5 |
| Documentação clara | 5 |
| Testes e validação | 5 |
| Demonstração e perguntas e respostas | 5 |
| Total | 30 |
Navegação
- Conceitos de IaC e CloudFormation
- Quiz de Validação - 30 questões para validar seu conhecimento
- 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!