O Pulumi é uma ferramenta moderna de Infrastructure as Code (IaC) que redefine a forma como gerenciamos recursos na nuvem. Diferentes das abordagens tradicionais que exigem o aprendizado de DSLs (Domain-Specific Languages), o Pulumi permite que você defina os recursos usando diferentes linguagens de programação, de acordo com a necessidade do usuário. Isso significa que você pode utilizar toda a flexibilidade de estruturas de programação (loops, condicionais, bibliotecas) ao mesmo tempo que sua arquitetura se integra nativamente com diversos provedores em nuvem.
Neste guia, utilizaremos Python para demonstrar como o Pulumi gerencia uma automação na AWS. Você aprenderá a implementar recursos com um bucket S3 e uma instância EC2, aplicando boas práticas profissionais e de segurança. Ao final, sua infraestrutura estará não somente no console da AWS mas também em seu repositório Git, versionada e pronta para ser escalada.
Pré-requisitos
- Conta na AWS com acesso programático ao IAM User com permissões para S3, EC2 e IAM.
- AWS CLI configurada: Execute aws configure e insira suas credenciais.
- Python 3.6+ instalado.
- Pulumi CLI instalado, veja abaixo.
Passo 1: Instalar o Pulumi
# Linux/macOS
curl -fsSL https://get.pulumi.com | sh
# Windows (PowerShell)
choco install pulumiVerifique a instalação:
pulumi versionPasso 2: Configurar Credenciais AWS
Certifique-se de que a AWS CLI está configurada com:
aws configureIsso define automaticamente as credenciais que o Pulumi usará.
Passo 3: Criar um Projeto Pulumi em Python
Inicialize o projeto:
mkdir pulumi-aws-python && cd pulumi-aws-python
pulumi new aws-python -n meu-projetoEscolha a stack padrão (ex: `dev`).
Ative o ambiente virtual:
python3 -m venv venv
source venv/bin/activate # Linux/macOS
venv\Scripts\activate # Windows
pip install -r requirements.txtPasso 4: Definir a Infraestrutura em Python
Abra o arquivo __main__.py e substitua o conteúdo por:
import pulumi
from pulumi_aws import s3, ec2, iam
# 1. Bucket S3 com políticas de segurança
bucket = s3.Bucket("meu-bucket-pulumi",
acl="private",
tags={"Ambiente": pulumi.get_stack()},
force_destroy=True # Permite deletar o bucket mesmo com arquivos
)
# 2. Instância EC2 com role IAM
role = iam.Role("ec2-role",
assume_role_policy="""{
"Version": "2012-10-17",
"Statement": [{
"Action": "sts:AssumeRole",
"Effect": "Allow",
"Principal": {"Service": "ec2.amazonaws.com"}
}]
}"""
)
instance = ec2.Instance("instancia-demo",
ami="ami-0c55b159cbfafe1f0", # Amazon Linux 2 (us-east-1)
instance_type="t3.micro",
iam_instance_profile=role.name,
tags={"Name": "Instancia-Pulumi"}
)
# Exporta saídas úteis
pulumi.export("bucket_name", bucket.id)
pulumi.export("instance_public_ip", instance.public_ip)Passo 5: Implantar na AWS
Execute o comando:
pulumi upRevise o plano e confirme com yes.
Passo 6: Verificar Recursos
Acesse:
- S3: Verifique o bucket em S3 Console.
- EC2: Acesse a instância em EC2 Console.
Ou via CLI:
pulumi stack output bucket_name
pulumi stack output instance_public_ipGerenciamento Avançado
Atualizar Recursos
Modifique __main__.py (ex: mude `t3.micro` para `t3.small`) e execute:
pulumi upDestruir Tudo
pulumi destroyMúltiplos Ambientes (Stacks)
Crie uma stack para produção:
pulumi stack init prod
pulumi config set aws:region us-west-2 # Altere a regiãoBoas Práticas Profissionais
Use IAM Roles e Políticas Restritivas
Evite credenciais estáticas. No exemplo, a instância EC2 assume uma role IAM. Para mais segurança, adicione políticas:
iam.RolePolicy("ec2-policy", role=role.id,
policy=bucket.arn.apply(lambda arn: f"""{
"Version": "2012–10–17",
"Statement": [{
"Effect": "Allow",
"Action": ["s3:GetObject"],
"Resource": "{arn}/*"
}]
}""")
)Tags Padronizadas
Adicione tags para rastrear custos e ambientes:
tags = {
"Projeto": "Infra-Pulumi",
"Stack": pulumi.get_stack(),
"GerenciadoPor": "IaC"
}Armazene o Estado Remotamente
Use o Pulumi Cloud ou um bucket S3:
pulumi login - cloud-url s3://meu-bucket-estadosSecrets Sensíveis
Armazene dados confidenciais com criptografia:
config = pulumi.Config()
senha = config.get_secret("senha") # Define via CLI: `pulumi config set - secret senha 123`Modularize seu Código
Crie classes ou funções reutilizáveis:
def criar_bucket(nome: str) -> s3.Bucket:
return s3.Bucket(nome,
acl="private",
tags={"Módulo": "Storage"}
)Versionamento e CI/CD
Armazene o código no GitHub/GitLab.
Use GitHub Actions ou AWS CodePipeline para automatizar pulumi up.
Conclusão
Com Pulumi e Python, você gerencia infraestrutura AWS de forma programática, segura e escalável. Este guia cobriu desde a criação de recursos básicos até práticas avançadas como IAM, múltiplos ambientes e modularização.
Próximos passos
- Explore exemplos oficiais da AWS.
- Integre testes com pytest para validar sua infraestrutura.
Para transformar sua AWS em código e otimizar sua infraestrutura com boas práticas, não deixe de acessar nosso repositório para exemplos práticos e nosso site para mais conteúdos e novidades!