Este projeto simula um ambiente AWS completo localmente usando LocalStack e Terraform. Ideal para testar sua aplicação com S3, SQS, Lambda, DynamoDB, etc., sem custos e sem depender da nuvem real.
projeto-infra-local/
├── docker-compose.yml # LocalStack rodando como container
├── infra/
│ ├── main.tf
│ ├── provider.tf
├── app/
│ └── src/...
└── README.md
Neste exemplo inicial:
- 🪣 S3 Bucket:
meu-bucket-local
- 📬 SQS Queue:
fila-local
- (Você pode adicionar Lambda, DynamoDB, API Gateway, etc.)
Você precisa ter instalado:
docker-compose up -d
Isso vai rodar o LocalStack na porta 4566
com os serviços AWS simulados.
- Entre na pasta de infraestrutura:
cd infra/
- Inicialize o Terraform:
terraform init
- Aplique a infraestrutura:
terraform apply
Confirme com yes
. Isso criará os recursos (S3, SQS, etc.) no LocalStack.
aws --endpoint-url=http://localhost:4566 s3 ls
aws --endpoint-url=http://localhost:4566 sqs list-queues
import boto3
s3 = boto3.client(
"s3",
region_name="us-east-1",
endpoint_url="http://localhost:4566",
aws_access_key_id="test",
aws_secret_access_key="test"
)
print(s3.list_buckets())
import { S3Client } from "@aws-sdk/client-s3";
const s3 = new S3Client({
region: "us-east-1",
endpoint: "http://localhost:4566",
credentials: {
accessKeyId: "test",
secretAccessKey: "test",
},
forcePathStyle: true,
});
S3Client s3 = S3Client.builder()
.endpointOverride(URI.create("http://localhost:4566"))
.region(Region.US_EAST_1)
.credentialsProvider(
StaticCredentialsProvider.create(
AwsBasicCredentials.create("test", "test")
)
)
.build();
Para facilitar a alternância entre produção e local, use variáveis:
export AWS_ENDPOINT=http://localhost:4566
E no código, use AWS_ENDPOINT
se estiver definido, ou padrão da AWS se não estiver.
Quando quiser aplicar na AWS real:
- Remova os
endpoints
doprovider.tf
- Configure suas credenciais reais (IAM)
- Rode
terraform apply
novamente
terraform destroy
docker-compose down -v
Você pode adicionar qualquer serviço da AWS no SERVICES=
do docker-compose.yml
, como:
environment:
- SERVICES=s3,sqs,dynamodb,lambda,apigateway,iam,cloudwatch