TP 19 : LocalStack
Objectif
Section intitulée « Objectif »Simuler des services AWS localement avec LocalStack et Terraform.
Ce TP permet de voir comment :
- lancer LocalStack avec Docker
- configurer le provider AWS pour pointer vers LocalStack
- déployer des ressources EC2, S3, DynamoDB et SQS en local
- interagir avec les services via l’AWS CLI
- détruire l’infrastructure locale
LocalStack émule l’API AWS localement, sans compte AWS ni frais. Il est utilisé pour tester des configurations Terraform cloud avant tout déploiement réel.
Prérequis
Section intitulée « Prérequis »- Terraform installé
- Docker installé et lancé
- AWS CLI installé
terraform versiondocker versionaws --versionConstruire l’environnement
Section intitulée « Construire l’environnement »Lancer LocalStack à partir de Docker :
docker run -it -p 4566:4566 localstack/localstackVérifier le bon fonctionnement de LocalStack :
curl http://localhost:4566/_localstack/healthUtilisation des services EC2 et S3
Section intitulée « Utilisation des services EC2 et S3 »Dans un dossier terraform-localstack-ec2-s3, créez un fichier main.tf :
provider "aws" { region = "us-east-2" access_key = "test" secret_key = "test" skip_credentials_validation = true skip_metadata_api_check = true skip_requesting_account_id = true s3_use_path_style = true
endpoints { s3 = "http://localhost:4566" ec2 = "http://localhost:4566" dynamodb = "http://localhost:4566" lambda = "http://localhost:4566" }}
resource "aws_instance" "my_ec2" { ami = "ami-12345678" instance_type = "t2.micro"}
output "instance_id" { value = aws_instance.my_ec2.id}
resource "aws_s3_bucket" "my_bucket" { bucket = "my-local-bucket"}
output "bucket_name" { value = aws_s3_bucket.my_bucket.id}Déployer l’infrastructure :
terraform initterraform planterraform apply -auto-approveLister les buckets S3 créés :
aws --endpoint-url=http://localhost:4566 s3 lsVoir l’instance EC2 :
aws --endpoint-url=http://localhost:4566 ec2 describe-instancesUploader un fichier :
echo "Hello World" > test.txtaws --endpoint-url=http://localhost:4566 s3 cp test.txt s3://my-local-bucket/aws --endpoint-url=http://localhost:4566 s3 ls s3://my-local-bucket/Supprimer l’infrastructure :
terraform destroy -auto-approveStockage et Requêtes DynamoDB
Section intitulée « Stockage et Requêtes DynamoDB »Dans un dossier terraform-localstack-dynamodb, créez un fichier main.tf :
provider "aws" { region = "us-east-2" access_key = "test" secret_key = "test" skip_credentials_validation = true skip_metadata_api_check = true skip_requesting_account_id = true
endpoints { dynamodb = "http://localhost:4566" }}
resource "aws_dynamodb_table" "users" { name = "Users" billing_mode = "PAY_PER_REQUEST" hash_key = "user_id"
attribute { name = "user_id" type = "S" }}
output "table_name" { value = aws_dynamodb_table.users.name}Déployer et tester :
terraform initterraform planterraform apply -auto-approveAjout de données :
aws --endpoint-url=http://localhost:4566 dynamodb put-item \ --table-name Users \ --item '{"user_id": {"S": "123"}, "name": {"S": "Alice"}}'Vérifier la région par défaut configurée :
cat ~/.aws/configRécupérer un utilisateur :
aws --endpoint-url=http://localhost:4566 dynamodb get-item \ --table-name Users \ --key '{"user_id": {"S": "123"}}'Supprimer l’infrastructure :
terraform destroy -auto-approveUtilisation du service SQS
Section intitulée « Utilisation du service SQS »Dans un dossier terraform-localstack-sns, créez un fichier main.tf :
provider "aws" { region = "us-east-1" access_key = "test" secret_key = "test" skip_credentials_validation = true skip_metadata_api_check = true skip_requesting_account_id = true
endpoints { ec2 = "http://localhost:4566" sqs = "http://localhost:4566" }}
resource "aws_sqs_queue" "my_queue" { name = "my-queue"}
output "queue_url" { value = aws_sqs_queue.my_queue.url}Déployer et tester :
terraform initterraform planterraform apply -auto-approveEnvoyer un message :
aws --endpoint-url=http://localhost:4566 sqs send-message \ --queue-url $(terraform output -raw queue_url) \ --message-body "Message de test"Lire les messages :
aws --endpoint-url=http://localhost:4566 sqs receive-message \ --queue-url $(terraform output -raw queue_url)Supprimer l’infrastructure :
terraform destroy -auto-approveServices disponibles (version community)
Section intitulée « Services disponibles (version community) »- AWS Lambda : Création, déploiement et invocation de fonctions.
- Amazon S3 : Opérations CRUD sur buckets et objets.
- Amazon DynamoDB : Tables NoSQL avec lecture/écriture.
- Amazon SQS : Files de messages.
- Amazon SNS : Notifications et abonnements.
- Amazon Kinesis : Flux de données en temps réel.
- AWS CloudFormation : Orchestration via templates.
- Amazon API Gateway : Création et gestion d’API REST.
- AWS Step Functions : Workflows d’orchestration.
- AWS Secrets Manager : Gestion des secrets.