

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.

# Erstellen und übertragen Sie Docker-Images mithilfe von GitHub Actions und Terraform auf Amazon ECR
<a name="build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform"></a>

*Ruchika Modi, Amazon Web Services*

## Zusammenfassung
<a name="build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform-summary"></a>

Dieses Muster erklärt, wie Sie wiederverwendbare GitHub Workflows erstellen können, um Ihr Dockerfile zu erstellen und das resultierende Image an Amazon Elastic Container Registry (Amazon ECR) zu übertragen. Das Muster automatisiert den Erstellungsprozess Ihrer Dockerfiles mithilfe von Terraform und Aktionen. GitHub Dies minimiert die Möglichkeit menschlicher Fehler und reduziert die Bereitstellungszeit erheblich.

Eine GitHub Push-Aktion zum Hauptzweig Ihres GitHub Repositorys leitet die Bereitstellung von Ressourcen ein. Der Workflow erstellt ein eindeutiges Amazon ECR-Repository, das auf der Kombination aus GitHub Organisation und Repository-Name basiert. Anschließend wird das Dockerfile-Image in das Amazon ECR-Repository übertragen.

## Voraussetzungen und Einschränkungen
<a name="build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform-prereqs"></a>

**Voraussetzungen**
+ Ein aktives AWS-Konto.
+ Ein aktives GitHub Konto.
+ Ein [GitHub Repositorium](https://docs.github.com/en/get-started/quickstart/create-a-repo).
+ Terraform Version 1 oder höher wurde [installiert und konfiguriert](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli).
+ Ein Amazon Simple Storage Service (Amazon S3) -Bucket für das [Terraform-Backend](https://developer.hashicorp.com/terraform/language/settings/backends/s3).
+ Eine [Amazon DynamoDB-Tabelle](https://www.googleadservices.com/pagead/aclk?sa=L&ai=DChcSEwjO95K9xqCCAxW-KIMDHfOvD7IYABADGgJzZg&gclid=EAIaIQobChMIzveSvcagggMVviiDAx3zrw-yEAAYASADEgJYWfD_BwE&ohost=www.google.com&cid=CAASJuRoKjv_llGjIU3liZ4T2IRecPqw0dVHSvjZ7bee1lvcc36K_lO_&sig=AOD64_1b294pq65HiFN-T1YxQAuXmRu_hw&adurl&ved=2ahUKEwjhiY29xqCCAxUgzjgGHRu6CAIQqyQoAnoECAkQDQ) für Terraform-Statussperrung und Konsistenz. Die Tabelle muss einen Partitionsschlüssel haben, der den Typ `LockID` hat. `String` Wenn dies nicht konfiguriert ist, wird die Statussperre deaktiviert.
+ Eine AWS Identity and Access Management (IAM) -Rolle, die über Berechtigungen zum Einrichten des Amazon S3 S3-Backends für Terraform verfügt. [Anweisungen zur Konfiguration finden Sie in der Terraform-Dokumentation.](https://developer.hashicorp.com/terraform/language/settings/backends/s3#assume-role-configuration)

**Einschränkungen**

Dieser wiederverwendbare Code wurde nur mit GitHub Aktionen getestet.

## Architektur
<a name="build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform-architecture"></a>

**Zieltechnologie-Stack**
+ Amazon ECR-Repository
+ GitHub Aktionen
+ Terraform

**Zielarchitektur**

![\[Workflow zum Erstellen wiederverwendbarer GitHub Workflows zum Erstellen von Dockerfiles und zum Pushen von Images an Amazon ECR.\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/images/pattern-img/c39c110e-cbe5-459e-a0aa-de27e884fb10/images/298e0e16-3054-49b7-8695-db510e0df2df.png)


Das Diagramm veranschaulicht folgende Vorgänge:

1. Ein Benutzer fügt dem Repository ein Dockerfile und Terraform-Vorlagen hinzu. GitHub 

2. Diese Ergänzungen initiieren einen Aktions-Workflow. GitHub 

3. Der Workflow prüft, ob ein Amazon ECR-Repository vorhanden ist. Wenn nicht, erstellt er das Repository auf der Grundlage der GitHub Organisation und des Repository-Namens.

4. Der Workflow erstellt das Dockerfile und überträgt das Image in das Amazon ECR-Repository.

## Tools
<a name="build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform-tools"></a>

**Amazon-Dienste**
+ [Amazon Elastic Container Registry (Amazon ECR)](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html) ist ein verwalteter Container-Registry-Service, der sicher, skalierbar und zuverlässig ist.

**Andere Tools**
+ [GitHub Actions](https://docs.github.com/en/actions) ist in die GitHub Plattform integriert und hilft Ihnen dabei, Workflows in Ihren GitHub Repositorys zu erstellen, gemeinsam zu nutzen und auszuführen. Sie können GitHub Aktionen verwenden, um Aufgaben wie das Erstellen, Testen und Bereitstellen Ihres Codes zu automatisieren.
+ [Terraform](https://developer.hashicorp.com/terraform/intro) ist ein IaC-Tool (Infrastructure as Code) HashiCorp , mit dem Sie Cloud- und lokale Infrastrukturen erstellen und verwalten können.

**Code-Repository**

Der Code für dieses Muster ist im GitHub [Docker ECR Actions Workflow-Repository](https://github.com/aws-samples/docker-ecr-actions-workflow) verfügbar.
+ Wenn Sie GitHub Aktionen erstellen, werden Docker-Workflow-Dateien im `/.github/workflows/` Ordner dieses Repositorys gespeichert. Der Workflow für diese Lösung befindet sich in der Datei [workflow.yaml](https://github.com/aws-samples/docker-ecr-actions-workflow/blob/main/.github/workflows/workflow.yaml).
+ Der `e2e-test` Ordner enthält ein Dockerfile-Beispiel zum Nachschlagen und Testen.

## Best Practices
<a name="build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform-best-practices"></a>
+ [Bewährte Methoden für das Schreiben von Dockerfiles finden Sie in der Docker-Dokumentation.](https://docs.docker.com/develop/develop-images/dockerfile_best-practices/)
+ Verwenden Sie einen [VPC-Endpunkt für Amazon ECR](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html). VPC-Endpunkte werden von AWS unterstützt PrivateLink, einer Technologie, mit der Sie privat über private IP-Adressen auf Amazon ECR APIs zugreifen können. Bei Amazon ECS-Aufgaben, die den Starttyp Fargate verwenden, ermöglicht der VPC-Endpunkt der Aufgabe, private Images aus Amazon ECR abzurufen, ohne der Aufgabe eine öffentliche IP-Adresse zuzuweisen.

## Epen
<a name="build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform-epics"></a>

### Richten Sie den OIDC-Anbieter und das Repository ein GitHub
<a name="set-up-the-oidc-provider-and-github-repository"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Konfigurieren Sie OpenID Connect. | Erstellen Sie einen OpenID Connect (OIDC) -Anbieter. Sie verwenden den Anbieter in der Vertrauensrichtlinie für die in dieser Aktion verwendete IAM-Rolle. Anweisungen finden Sie in der GitHub Dokumentation unter [Konfiguration von OpenID Connect in Amazon Web Services](https://docs.github.com/en/actions/deployment/security-hardening-your-deployments/configuring-openid-connect-in-amazon-web-services). | AWS-Administrator, AWS DevOps, Allgemeines AWS | 
| Klonen Sie das GitHub Repository. | Klonen Sie das GitHub [Docker ECR Actions Workflow-Repository](https://github.com/aws-samples/docker-ecr-actions-workflow) in Ihren lokalen Ordner:<pre>$git clone https://github.com/aws-samples/docker-ecr-actions-workflow</pre> | DevOps Ingenieur | 

### Passen Sie den GitHub wiederverwendbaren Workflow an und stellen Sie das Docker-Image bereit
<a name="customize-the-github-reusable-workflow-and-deploy-the-docker-image"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Passen Sie das Ereignis an, das den Docker-Workflow initiiert. | [Der Workflow für diese Lösung befindet sich in workflow.yaml.](https://github.com/aws-samples/docker-ecr-actions-workflow/blob/main/.github/workflows/workflow.yaml) Dieses Skript ist derzeit so konfiguriert, dass es Ressourcen bereitstellt, wenn es das Ereignis empfängt. `workflow_dispatch` Sie können diese Konfiguration anpassen, indem Sie das Ereignis in einen anderen übergeordneten Workflow ändern `workflow_call` und den Workflow von dort aufrufen. | DevOps Ingenieur | 
| Passen Sie den Arbeitsablauf an. | Die Datei [workflow.yaml](https://github.com/aws-samples/docker-ecr-actions-workflow/blob/main/.github/workflows/workflow.yaml) ist so konfiguriert, dass sie einen dynamischen, wiederverwendbaren Workflow erstellt. GitHub Sie können diese Datei bearbeiten, um die Standardkonfiguration anzupassen, oder Sie können die Eingabewerte aus der GitHub Aktionskonsole übergeben, wenn Sie das `workflow_dispatch` Ereignis verwenden, um die Bereitstellung manuell einzuleiten.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform.html) | DevOps Ingenieur | 
| Stellen Sie die Terraform-Vorlagen bereit. | Der Workflow stellt automatisch die Terraform-Vorlagen bereit, die das Amazon ECR-Repository erstellen, basierend auf dem von Ihnen konfigurierten GitHub Ereignis. Diese Vorlagen sind als `.tf` Dateien im [Stammverzeichnis](https://github.com/aws-samples/docker-ecr-actions-workflow/tree/main) des Github-Repositorys verfügbar. | AWS DevOps, DevOps Ingenieur | 

## Fehlerbehebung
<a name="build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform-troubleshooting"></a>


| Problem | Lösung | 
| --- | --- | 
| Probleme oder Fehler bei der Konfiguration von Amazon S3 und DynamoDB als Terraform-Remote-Backend. | Folgen Sie den Anweisungen in der [Terraform-Dokumentation](https://developer.hashicorp.com/terraform/language/settings/backends/s3), um die erforderlichen Berechtigungen für die Amazon S3- und DynamoDB-Ressourcen für die Remote-Backend-Konfiguration einzurichten. | 
| Der Workflow mit dem Ereignis konnte nicht ausgeführt oder gestartet werden. `workflow_dispatch` | Der Workflow, der für die Bereitstellung über das `workflow_dispatch` Ereignis konfiguriert ist, funktioniert nur, wenn der Workflow auch für den Hauptzweig konfiguriert ist. | 

## Zugehörige Ressourcen
<a name="build-and-push-docker-images-to-amazon-ecr-using-github-actions-and-terraform-resources"></a>
+ [Wiederverwendung von Workflows](https://docs.github.com/en/actions/using-workflows/reusing-workflows) (GitHub Dokumentation)
+ [Einen Workflow auslösen (Dokumentation](https://docs.github.com/en/actions/using-workflows/triggering-a-workflow)) GitHub 