

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Testen Sie die AWS Infrastruktur mithilfe LocalStack von Terraform-Tests
<a name="test-aws-infra-localstack-terraform"></a>

*Ivan Girardi und Ioannis Kalyvas, Amazon Web Services*

## Zusammenfassung
<a name="test-aws-infra-localstack-terraform-summary"></a>

Dieses Muster hilft Ihnen, Infrastruktur als Code (IaC) für AWS in Terraform lokal zu testen, ohne die Infrastruktur in Ihrer Umgebung bereitstellen zu müssen. AWS Es integriert das [Terraform](https://developer.hashicorp.com/terraform/language/tests) Tests-Framework mit. [LocalStack](https://github.com/localstack/localstack) Der LocalStack Docker-Container bietet eine lokale Entwicklungsumgebung, die verschiedene emuliert. AWS-Services Auf diese Weise können Sie Infrastrukturbereitstellungen testen und iterieren, ohne dass Kosten in der entstehen. AWS Cloud

Diese Lösung bietet die folgenden Vorteile:
+ **Kostenoptimierung** — Die Durchführung von Tests gegen LocalStack macht die Verwendung überflüssig AWS-Services. Dies verhindert, dass Ihnen Kosten entstehen, die mit der Erstellung, dem Betrieb und der Änderung dieser AWS Ressourcen verbunden sind.
+ **Geschwindigkeit und Effizienz** — Lokales Testen ist in der Regel auch schneller als das Bereitstellen der AWS Ressourcen. Diese schnelle Feedback-Schleife beschleunigt Entwicklung und Debugging. Da sie lokal LocalStack ausgeführt wird, können Sie Ihre Terraform-Konfigurationsdateien ohne Internetverbindung entwickeln und testen. Sie können Terraform-Konfigurationsdateien lokal debuggen und sofort Feedback erhalten, was den Entwicklungsprozess rationalisiert.
+ **Konsistenz und Reproduzierbarkeit** — LocalStack bietet eine konsistente Testumgebung. Diese Konsistenz trägt dazu bei, dass Tests unabhängig von externen AWS Änderungen oder Netzwerkproblemen zu den gleichen Ergebnissen führen.
+ **Isolierung** — Das Testen mit LocalStack verhindert, dass Sie versehentlich AWS Live-Ressourcen oder Produktionsumgebungen beeinträchtigen. Diese Isolierung macht es sicher, verschiedene Konfigurationen zu experimentieren und zu testen.
+ **Automatisierung** [— Durch die Integration mit einer CI/CD-Pipeline (Continuous Integration and Continuous Delivery) können Sie Terraform-Konfigurationsdateien automatisch testen.](https://developer.hashicorp.com/terraform/language/files) Die Pipeline testet den IaC vor der Bereitstellung gründlich.
+ **Flexibilität** — Sie können verschiedene AWS-Regionen, und Servicekonfigurationen simulieren AWS-Konten, um sie besser an Ihre Produktionsumgebungen anzupassen.

## Voraussetzungen und Einschränkungen
<a name="test-aws-infra-localstack-terraform-prereqs"></a>

**Voraussetzungen**
+ [Installieren von Docker](https://docs.docker.com/get-started/get-docker/)
+ [Aktivieren Sie den Zugriff auf](https://docs.docker.com/reference/cli/dockerd/#daemon-socket-option) den Standard-Docker-Socket (`/var/run/docker.sock`). Weitere Informationen finden Sie in der [LocalStack -Dokumentation](https://docs.localstack.cloud/user-guide/aws/lambda/#migrating-to-lambda-v2).
+ [Installieren Sie Docker](https://docs.docker.com/compose/install/) Compose
+ [Installieren Sie](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli) Terraform Version 1.6.0 oder höher
+ [Installieren Sie](https://developer.hashicorp.com/terraform/cli) Terraform CLI
+ [Konfigurieren Sie den Terraform-Anbieter](https://hashicorp.github.io/terraform-provider-aws/) AWS 
+ (Optional) [Installieren](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) und [konfigurieren](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html) Sie das AWS Command Line Interface ()AWS CLI. Ein Beispiel für die Verwendung von with finden Sie in den AWS CLI GitHub [Repositorien Test AWS infrastructure using LocalStack und Terraform Tests](https://github.com/aws-samples/localstack-terraform-test). LocalStack

**Einschränkungen**
+ Dieses Muster enthält explizite Beispiele für das Testen von Amazon Simple Storage Service (Amazon S3), AWS Lambda AWS Step Functions, und Amazon DynamoDB DynamoDB-Ressourcen. Sie können diese Lösung jedoch um zusätzliche AWS Ressourcen erweitern.
+ Dieses Muster enthält Anweisungen zum lokalen Ausführen von Terraform-Tests. Sie können Tests jedoch in jede CI/CD Pipeline integrieren.
+ Dieses Muster enthält Anweisungen zur Verwendung des LocalStack Community-Images. Wenn Sie das LocalStack Pro-Image verwenden, lesen Sie in der [LocalStack Pro-Dokumentation](https://hub.docker.com/r/localstack/localstack-pro) nach.
+ LocalStack bietet Emulationsdienste für verschiedene AWS APIs. Eine vollständige Liste finden Sie unter Umfang der [AWS Servicefunktionen.](https://docs.localstack.cloud/user-guide/aws/feature-coverage/) Für einige erweiterte Funktionen ist möglicherweise ein Abonnement für LocalStack Pro erforderlich.

## Architektur
<a name="test-aws-infra-localstack-terraform-architecture"></a>

Das folgende Diagramm zeigt die Architektur für diese Lösung. Die Hauptkomponenten sind ein Quellcode-Repository, eine CI/CD Pipeline und ein LocalStack Docker-Container. Der LocalStack Docker-Container hostet lokal Folgendes: AWS-Services 
+ Ein Amazon S3 S3-Bucket zum Speichern von Dateien
+ Amazon CloudWatch für die Überwachung und Protokollierung
+ Eine AWS Lambda Funktion zum Ausführen von serverlosem Code
+ Eine AWS Step Functions Zustandsmaschine zur Orchestrierung mehrstufiger Workflows
+ Eine Amazon DynamoDB-Tabelle zum Speichern von NoSQL-Daten

![Eine CI/CD Pipeline erstellt und testet den LocalStack Docker-Container und die AWS-Ressourcen.](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/images/pattern-img/34bfbdbf-14e7-42a0-9022-c85a9c30cdcd/images/dc61fac9-b92c-4841-9132-ff8bb865eed9.png)


Das Diagramm zeigt den folgenden Workflow:

1. Sie fügen eine Terraform-Konfigurationsdatei hinzu und übertragen sie in das Quellcode-Repository.

1. Die CI/CD Pipeline erkennt die Änderungen und leitet einen Build-Prozess für die statische Terraform-Codeanalyse ein. Die Pipeline erstellt und führt den LocalStack Docker-Container aus. Dann startet die Pipeline den Testprozess.

1. Die Pipeline lädt ein Objekt in einen Amazon S3 S3-Bucket hoch, der im LocalStack Docker-Container gehostet wird.

1. Durch das Hochladen des Objekts wird eine Funktion aufgerufen. AWS Lambda 

1. Die Lambda-Funktion speichert die Amazon S3 S3-Ereignisbenachrichtigung in einem CloudWatch Protokoll.

1. Die Lambda-Funktion startet eine AWS Step Functions Zustandsmaschine.

1. Die Zustandsmaschine schreibt den Namen des Amazon S3 S3-Objekts in eine DynamoDB-Tabelle.

1. Der Testprozess in der CI/CD Pipeline überprüft, ob der Name des hochgeladenen Objekts mit dem Eintrag in der DynamoDB-Tabelle übereinstimmt. Außerdem wird überprüft, ob der S3-Bucket mit dem angegebenen Namen bereitgestellt wurde und ob die AWS Lambda Funktion erfolgreich bereitgestellt wurde.

## Tools
<a name="test-aws-infra-localstack-terraform-tools"></a>

**AWS-Services**
+ [Amazon CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html) hilft Ihnen dabei, die Kennzahlen Ihrer AWS Ressourcen und der Anwendungen, auf denen Sie laufen, AWS in Echtzeit zu überwachen.
+ [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html) ist ein vollständig verwalteter NoSQL-Datenbank-Service, der schnelle und planbare Leistung mit nahtloser Skalierbarkeit bereitstellt.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) ist ein Datenverarbeitungsservice, mit dem Sie Code ausführen können, ohne dass Sie Server bereitstellen oder verwalten müssen. Es führt Ihren Code nur bei Bedarf aus und skaliert automatisch, sodass Sie nur für die tatsächlich genutzte Rechenzeit zahlen.
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) ist ein cloudbasierter Objektspeicherservice, der Sie beim Speichern, Schützen und Abrufen beliebiger Datenmengen unterstützt.
+ [AWS Step Functions](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html)ist ein serverloser Orchestrierungsservice, mit dem Sie AWS Lambda Funktionen und andere Funktionen kombinieren können, um geschäftskritische AWS-Services Anwendungen zu erstellen.

**Andere Tools**
+ [Docker](https://www.docker.com/) ist eine Reihe von Platform-as-a-Service (PaaS) -Produkten, die Virtualisierung auf Betriebssystemebene nutzen, um Software in Containern bereitzustellen.
+ [Docker Compose](https://docs.docker.com/compose/) ist ein Tool zum Definieren und Ausführen von Multi-Container-Anwendungen.
+ [LocalStack](https://localstack.cloud)ist ein Cloud-Service-Emulator, der in einem einzigen Container läuft. Mithilfe LocalStack von können Sie Workloads auf Ihrem lokalen Computer ausführen, die verwenden AWS-Services, ohne eine Verbindung zu dem herzustellen. AWS Cloud
+ [Terraform](https://www.terraform.io/) ist ein IaC-Tool von HashiCorp , mit dem Sie Cloud- und lokale Ressourcen erstellen und verwalten können.
+ [Terraform Tests](https://developer.hashicorp.com/terraform/language/tests) hilft Ihnen dabei, Aktualisierungen der Terraform-Modulkonfiguration durch Tests zu validieren, die Integrations- oder Komponententests ähneln.

**Code-Repository**

Der Code für dieses Muster ist in den Repositorien GitHub [Test AWS Infrastructure using LocalStack und Terraform Tests](https://github.com/aws-samples/localstack-terraform-test) verfügbar.

## Best Practices
<a name="test-aws-infra-localstack-terraform-best-practices"></a>
+ Diese Lösung testet die AWS Infrastruktur, die in den Terraform-Konfigurationsdateien angegeben ist, und stellt diese Ressourcen nicht in der bereit. AWS Cloud Wenn Sie die Ressourcen bereitstellen möchten, folgen Sie dem [Prinzip der geringsten Rechte (IAM-Dokumentation) und konfigurieren Sie das Terraform-Backend](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege) [ordnungsgemäß (Terraform-Dokumentation](https://developer.hashicorp.com/terraform/language/backend)).
+ Bei der Integration LocalStack in eine CI/CD Pipeline empfehlen wir, den Docker-Container nicht im Rechtemodus auszuführen. LocalStack Weitere Informationen finden Sie unter [Runtime-Rechte und Linux-Funktionen](https://docs.docker.com/engine/containers/run/#runtime-privilege-and-linux-capabilities) (Docker-Dokumentation) und [Sicherheit für selbstverwaltete Runner](https://docs.gitlab.com/runner/security/) (GitLab Dokumentation).

## Epen
<a name="test-aws-infra-localstack-terraform-epics"></a>

### Bereitstellen der Lösung
<a name="deploy-the-solution"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Klonen Sie das Repository | Geben Sie in einer Bash-Shell den folgenden Befehl ein. Dadurch wird die [AWS Testinfrastruktur mithilfe eines Terraform LocalStack Tests-Repositorys geklont](https://github.com/aws-samples/localstack-terraform-test) von: GitHub<pre>git clone https://github.com/aws-samples/localstack-terraform-test.git</pre> | DevOps Ingenieur | 
| Lass den LocalStack Container laufen. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/test-aws-infra-localstack-terraform.html) | DevOps Ingenieur | 
| Initialisieren Sie Terraform. | Geben Sie den folgenden Befehl ein, um Terraform zu initialisieren:<pre>terraform init</pre> | DevOps Ingenieur | 
| Führen Sie Terraform-Tests durch. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/test-aws-infra-localstack-terraform.html) | DevOps Ingenieur | 
| Bereinigen Sie die Ressourcen. | Geben Sie den folgenden Befehl ein, um den LocalStack Container zu zerstören:<pre>docker-compose down</pre> | DevOps Ingenieur | 

## Fehlerbehebung
<a name="test-aws-infra-localstack-terraform-troubleshooting"></a>


| Problem | Lösung | 
| --- | --- | 
| `Error: reading DynamoDB Table Item (Files\|README.md): empty`Ergebnis beim Ausführen des `terraform test` Befehls. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/test-aws-infra-localstack-terraform.html) | 

## Zugehörige Ressourcen
<a name="test-aws-infra-localstack-terraform-resources"></a>
+ [Erste Schritte mit Terraform: Anleitungen für AWS CDK Experten (Prescriptive Guidance](https://docs.aws.amazon.com/prescriptive-guidance/latest/getting-started-terraform/introduction.html)) AWS CloudFormation AWS 
+ [Bewährte Methoden für die Verwendung des AWS Terraform](https://docs.aws.amazon.com/prescriptive-guidance/latest/terraform-aws-provider-best-practices/introduction.html) Providers (Prescriptive Guidance)AWS 
+ [Terraform CI/CD und das weitere Testen AWS mit dem neuen Terraform Test Framework](https://aws.amazon.com/blogs/devops/terraform-ci-cd-and-testing-on-aws-with-the-new-terraform-test-framework/) (Blogbeitrag)AWS 
+ [Beschleunigte Softwarebereitstellung mit LocalStack Cloud Emulator](https://aws.amazon.com/blogs/awsmarketplace/accelerating-software-delivery-localstack-cloud-emulator-aws-marketplace/) von (Blogbeitrag) AWS MarketplaceAWS 

## Zusätzliche Informationen
<a name="test-aws-infra-localstack-terraform-additional"></a>

**Integration mit Aktionen GitHub **

Mithilfe GitHub von Aktionen können Sie Tests LocalStack und Terraform-Tests in eine CI/CD Pipeline integrieren. Weitere Informationen finden Sie in der Dokumentation zu [GitHub Aktionen](https://docs.github.com/en/actions). Im Folgenden finden Sie ein Beispiel für eine GitHub Actions-Konfigurationsdatei:

```
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
```