Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
AWS Infrastructure de test à l'aide LocalStack de tests Terraform
Créée par Ivan Girardi (AWS) et Ioannis Kalyvas (AWS)
Récapitulatif
Ce modèle vous permet de tester localement l'infrastructure sous forme de code (IaC) pour AWS Terraform sans avoir à provisionner l'infrastructure dans votre AWS environnement. Il intègre le framework Terraform Tests
Cette solution offre les avantages suivants :
Optimisation des coûts — L'exécution de tests permet d' LocalStack éliminer le besoin d'utilisation Services AWS. Cela vous évite d'encourir les coûts associés à la création, à l'exploitation et à la modification de ces AWS ressources.
Rapidité et efficacité — Les tests locaux sont également généralement plus rapides que le déploiement AWS des ressources. Cette boucle de rétroaction rapide accélère le développement et le débogage. Comme il LocalStack s'exécute localement, vous pouvez développer et tester vos fichiers de configuration Terraform sans connexion Internet. Vous pouvez déboguer les fichiers de configuration Terraform localement et recevoir des commentaires immédiats, ce qui rationalise le processus de développement.
Cohérence et reproductibilité : LocalStack fournit un environnement de test cohérent. Cette cohérence permet de garantir que les tests donnent les mêmes résultats, quels que soient les AWS changements externes ou les problèmes de réseau.
Isolation : les tests vous LocalStack évitent d'affecter accidentellement les AWS ressources réelles ou les environnements de production. Cette isolation permet d'expérimenter et de tester différentes configurations en toute sécurité.
Automatisation — L'intégration à un pipeline d'intégration continue et de livraison continue (CI/CD) vous permet de tester automatiquement les fichiers de configuration Terraform.
Le pipeline teste minutieusement l'iAc avant le déploiement. Flexibilité — Vous pouvez simuler différentes Régions AWS configurations et configurations de service pour mieux correspondre à vos environnements de production. Comptes AWS
Conditions préalables et limitations
Prérequis
Activez l'accès
au socket Docker par défaut ( /var/run/docker.sock
). Pour plus d’informations, consultez la documentation LocalStack. Installez
Docker Compose Installez
Terraform version 1.6.0 ou ultérieure Installez
Terraform CLI Configurer
le fournisseur Terraform AWS (Facultatif) Installez et configurez le AWS Command Line Interface (AWS CLI). Pour un exemple d'utilisation du AWS CLI with LocalStack, consultez l'AWS infrastructure de GitHub test utilisant LocalStack et le référentiel de tests Terraform
.
Limites
Ce modèle fournit des exemples explicites pour tester les ressources Amazon Simple Storage Service (Amazon S3) AWS Lambda, AWS Step Functions, et Amazon DynamoDB. Toutefois, vous pouvez étendre cette solution pour inclure des AWS ressources supplémentaires.
Ce modèle fournit des instructions pour exécuter les tests Terraform localement, mais vous pouvez intégrer les tests dans n'importe quel pipeline CI/CD.
Ce modèle fournit des instructions pour utiliser l'image de LocalStack la communauté. Si vous utilisez l'image LocalStack Pro, consultez la documentation LocalStack Pro
. LocalStack fournit des services d'émulation pour différents. AWS APIs Pour une liste complète, voir Couverture des fonctionnalités du AWS service
. Certaines fonctionnalités avancées peuvent nécessiter un abonnement LocalStack Pro.
Architecture
Le schéma suivant montre l'architecture de cette solution. Les principaux composants sont un référentiel de code source, un pipeline CI/CD et un conteneur LocalStack Docker. Le conteneur LocalStack Docker héberge les éléments suivants Services AWS localement :
Un compartiment Amazon S3 pour stocker des fichiers
Amazon CloudWatch pour la surveillance et la journalisation
Une AWS Lambda fonction pour exécuter du code sans serveur
Une machine à AWS Step Functions états pour orchestrer des flux de travail en plusieurs étapes
Une table Amazon DynamoDB pour stocker des données NoSQL

Le schéma suivant illustre le flux de travail suivant :
Vous ajoutez et validez un fichier de configuration Terraform dans le référentiel de code source.
Le pipeline CI/CD détecte les modifications et lance un processus de génération pour l'analyse statique du code Terraform. Le pipeline construit et exécute le conteneur LocalStack Docker. Ensuite, le pipeline lance le processus de test.
Le pipeline télécharge un objet dans un compartiment Amazon S3 hébergé dans le conteneur LocalStack Docker.
Le téléchargement de l'objet appelle une AWS Lambda fonction.
La fonction Lambda enregistre la notification d'événement Amazon S3 dans un CloudWatch journal.
La fonction Lambda démarre une machine à AWS Step Functions états.
La machine d'état écrit le nom de l'objet Amazon S3 dans une table DynamoDB.
Le processus de test dans le pipeline CI/CD vérifie que le nom de l'objet chargé correspond à l'entrée de la table DynamoDB. Il vérifie également que le compartiment S3 est déployé avec le nom spécifié et que la AWS Lambda fonction a été déployée avec succès.
Outils
Services AWS
Amazon vous CloudWatch aide à surveiller les indicateurs de vos AWS ressources et des applications que vous utilisez AWS en temps réel.
Amazon DynamoDB est un service de base de données NoSQL entièrement géré, offrant des performances rapides, prévisibles et évolutives.
AWS Lambda est un service de calcul qui vous aide à exécuter du code sans avoir à allouer ni à gérer des serveurs. Il exécute votre code uniquement lorsque cela est nécessaire et évolue automatiquement, de sorte que vous ne payez que pour le temps de calcul que vous utilisez.
Amazon Simple Storage Service (Amazon S3) est un service de stockage d'objets basé sur le cloud qui vous permet de stocker, de protéger et de récupérer n'importe quel volume de données.
AWS Step Functionsest un service d'orchestration sans serveur qui vous aide à combiner des AWS Lambda fonctions et autres Services AWS pour créer des applications critiques pour l'entreprise.
Autres outils
Docker
est un ensemble de produits de plateforme en tant que service (PaaS) qui utilisent la virtualisation au niveau du système d'exploitation pour fournir des logiciels dans des conteneurs. Docker Compose
est un outil permettant de définir et d'exécuter des applications multi-conteneurs. LocalStack
est un émulateur de service cloud qui s'exécute dans un conteneur unique. En utilisant LocalStack, vous pouvez exécuter des charges de travail sur votre machine locale qui l'utilise Services AWS, sans vous connecter au AWS Cloud. Terraform
est un outil IaC HashiCorp qui vous aide à créer et à gérer des ressources sur site et dans le cloud. Terraform Tests
vous aide à valider les mises à jour de configuration des modules Terraform par le biais de tests analogues à des tests d'intégration ou unitaires.
Référentiel de code
Le code de ce modèle est disponible dans l'AWS infrastructure de GitHub test à l'aide du LocalStack référentiel Terraform Tests
Bonnes pratiques
Cette solution teste AWS l'infrastructure spécifiée dans les fichiers de configuration Terraform et ne déploie pas ces ressources dans le. AWS Cloud Si vous souhaitez déployer les ressources, suivez le principe du moindre privilège (documentation IAM) et configurez correctement le backend Terraform (documentation Terraform
). Lors de l'intégration LocalStack dans un pipeline CI/CD, nous vous recommandons de ne pas exécuter le conteneur LocalStack Docker en mode privilège. Pour plus d'informations, consultez Privilèges d'exécution et fonctionnalités Linux
(documentation Docker) et Sécurité pour les coureurs autogérés (GitLab documentation).
Épopées
Tâche | Description | Compétences requises |
---|---|---|
Pour cloner le référentiel. | Dans un shell bash, entrez la commande suivante. Cela clone l'AWS infrastructure de test à l'aide d'un référentiel LocalStack de tests Terraform
| DevOps ingénieur |
Faites fonctionner le LocalStack conteneur. |
| DevOps ingénieur |
Initialisez Terraform. | Entrez la commande suivante pour initialiser Terraform :
| DevOps ingénieur |
Exécutez des tests Terraform. |
| DevOps ingénieur |
Nettoyez les ressources. | Entrez la commande suivante pour détruire le LocalStack conteneur :
| DevOps ingénieur |
Résolution des problèmes
Problème | Solution |
---|---|
|
|
Ressources connexes
Commencer à utiliser Terraform : conseils pour AWS CDK et AWS CloudFormation experts (conseils AWS prescriptifs)
Meilleures pratiques d'utilisation du AWS fournisseur Terraform (directives AWS prescriptives)
Terraform CI/CD et poursuite des tests AWS avec le nouveau Terraform Test Framework
(article de blog)AWS Accélérer la livraison de logiciels à l'aide de LocalStack Cloud Emulator depuis AWS Marketplace
(article de AWS blog)
Informations supplémentaires
Intégration avec les GitHub actions
Vous pouvez intégrer LocalStack et Terraform des tests dans un pipeline CI/CD à l'aide d'Actions. GitHub Pour plus d'informations, consultez la documentation sur GitHub les actions
name: LocalStack Terraform Test
on:
push:
branches:
- '**'
workflow_dispatch: {}
jobs:
localstack-terraform-test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Build and Start LocalStack Container
run: |
docker compose up -d
- name: Setup Terraform
uses: hashicorp/setup-terraform@v3
with:
terraform_version: latest
- name: Run Terraform Init and Validation
run: |
terraform init
terraform validate
terraform fmt --recursive --check
terraform plan
terraform show
- name: Run Terraform Test
run: |
terraform test
- name: Stop and Delete LocalStack Container
if: always()
run: docker compose down