

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.

# Bereitstellen eines Terraform-Produkts AWS Service Catalog mithilfe eines Code-Repositorys
<a name="provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository"></a>

*Dr. Rahul Sharad Gaikwad und Tamilselvan P, Amazon Web Services*

## Zusammenfassung
<a name="provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository-summary"></a>

AWS Service Catalog [unterstützt Self-Service-Bereitstellung mit Steuerung für Ihre Terraform-Konfigurationen. HashiCorp ](https://developer.hashicorp.com/terraform/tutorials/aws-get-started) Wenn Sie Terraform verwenden, können Sie Service Catalog als einziges Tool verwenden, um Ihre Terraform-Konfigurationen innerhalb eines großen Maßstabs zu organisieren, zu verwalten und zu verteilen. AWS Sie können auf die wichtigsten Funktionen von Service Catalog zugreifen, darunter die Katalogisierung standardisierter und vorab genehmigter IaC-Vorlagen (Infrastructure as Code), Zugriffskontrolle, Bereitstellung von Cloud-Ressourcen mit geringsten Zugriffsrechten, Versionierung, gemeinsame Nutzung für Tausende von Benutzern und Tagging. AWS-Konten Endbenutzern wie Technikern, Datenbankadministratoren und Datenwissenschaftlern wird eine Liste der Produkte und Versionen angezeigt, auf die sie Zugriff haben, und sie können diese mit einer einzigen Aktion bereitstellen.

Dieses Muster hilft Ihnen bei der Bereitstellung von AWS Ressourcen mithilfe von Terraform-Code. Auf den Terraform-Code im GitHub Repository wird über Service Catalog zugegriffen. Mit diesem Ansatz integrieren Sie die Produkte in Ihre bestehenden Terraform-Workflows. Administratoren können mithilfe von Terraform Service Catalog-Portfolios erstellen und ihnen AWS Launch Wizard Produkte hinzufügen.

Im Folgenden sind die Vorteile dieser Lösung aufgeführt:
+ Aufgrund der Rollback-Funktion in Service Catalog können Sie das Produkt auf eine frühere Version zurücksetzen, wenn während der Bereitstellung Probleme auftreten.
+ Sie können die Unterschiede zwischen den Produktversionen leicht erkennen. Dies hilft Ihnen, Probleme bei der Bereitstellung zu lösen.
+ Sie können im Service Catalog eine Repository-Verbindung konfigurieren, z. B. zu GitHub oder GitLab. Sie können Produktänderungen direkt über das Repository vornehmen.

Informationen zu den allgemeinen Vorteilen von finden Sie AWS Service Catalog unter [Was ist Service Catalog](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/introduction.html).

## Voraussetzungen und Einschränkungen
<a name="provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository-prereqs"></a>

**Voraussetzungen**
+ Ein aktiver AWS-Konto.
+ Ein GitHub, BitBucket, oder ein anderes Repository, das Terraform-Konfigurationsdateien im ZIP-Format enthält.
+ AWS Serverless Application Model Befehlszeilenschnittstelle (AWS SAM CLI), [installiert](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/install-sam-cli.html).
+ AWS Command Line Interface (AWS CLI), [installiert](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) und [konfiguriert](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html).
+ Los, [installiert](https://go.dev/doc/install).
+ Python-Version 3.9, [installiert](https://www.python.org/downloads/release/python-3913/). AWS SAM CLI benötigt diese Version von Python.
+ Berechtigungen zum Schreiben und Ausführen von AWS Lambda Funktionen sowie Berechtigungen für den Zugriff auf und die Verwaltung von Service Catalog-Produkten und -Portfolios.

## Architektur
<a name="provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository-architecture"></a>

![\[Architekturdiagramm der Bereitstellung eines Terraform-Produkts in Service Catalog aus einem Code-Repository\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/images/pattern-img/7d0d76e8-9485-4b3f-915f-481b6a7cdcd9/images/e83fa44a-4ca6-4438-a0d1-99f09a3541bb.png)


Das Diagramm zeigt den folgenden Workflow:

1. Wenn eine Terraform-Konfiguration fertig ist, erstellt ein Entwickler eine ZIP-Datei, die den gesamten Terraform-Code enthält. Der Entwickler lädt die ZIP-Datei in das Code-Repository hoch, das mit Service Catalog verbunden ist.

1. Ein Administrator ordnet das Terraform-Produkt einem Portfolio im Service Catalog zu. Der Administrator erstellt außerdem eine Startbeschränkung, die es Endbenutzern ermöglicht, das Produkt bereitzustellen.

1. In Service Catalog starten Endbenutzer AWS Ressourcen mithilfe der Terraform-Konfiguration. Sie können wählen, welche Produktversion bereitgestellt werden soll.

## Tools
<a name="provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository-tools"></a>

**AWS-Services**
+ [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.
+ [AWS Service Catalog](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/introduction.html)hilft Ihnen dabei, Kataloge von IT-Services, für AWS die eine Genehmigung erteilt wurde, zentral zu verwalten. Endbenutzer können schnell nur die jeweils benötigten genehmigten IT-Services bereitstellen, wobei die Einschränkungen Ihrer Organisation berücksichtigt werden.

**Andere Dienste**
+ [Go](https://go.dev/doc/install) ist eine Open-Source-Programmiersprache, die Google unterstützt.
+ [Python](https://www.python.org/) ist eine Allzweck-Computerprogrammiersprache.

**Code-Repository**

Wenn Sie Terraform-Beispielkonfigurationen benötigen, die Sie über Service Catalog bereitstellen können, können Sie die Konfigurationen im GitHub [Amazon Macie Organization Setup Using Terraform Repository verwenden](https://github.com/aws-samples/aws-macie-customization-terraform-samples). Die Verwendung der Codebeispiele in diesem Repository ist nicht erforderlich.

## Best Practices
<a name="provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository-best-practices"></a>
+ Anstatt die Werte für Variablen in der Terraform-Konfigurationsdatei (`terraform.tfvars`) bereitzustellen, konfigurieren Sie Variablenwerte, wenn Sie das Produkt über Service Catalog starten.
+ Gewähren Sie nur bestimmten Benutzern oder Administratoren Zugriff auf das Portfolio.
+ Folgen Sie dem Prinzip der geringsten Rechte und gewähren Sie die für die Ausführung einer Aufgabe erforderlichen Mindestberechtigungen. Weitere Informationen finden Sie in der AWS Identity and Access Management (IAM-[) Dokumentation unter Gewährung der geringsten Rechte](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#grant-least-priv) und [bewährte Methoden zur Sicherheit](https://docs.aws.amazon.com/IAM/latest/UserGuide/IAMBestPracticesAndUseCases.html).

## Epen
<a name="provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository-epics"></a>

### Richten Sie Ihre lokale Workstation ein
<a name="set-up-your-local-workstation"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| (Optional) Installieren Sie Docker. | Wenn Sie die AWS Lambda Funktionen in Ihrer Entwicklungsumgebung ausführen möchten, installieren Sie Docker. Weitere Informationen finden Sie unter [Installieren der Docker-Engine](https://docs.docker.com/engine/install/) in der Docker-Dokumentation. | DevOps Ingenieur | 
| Installieren Sie die AWS Service Catalog Engine für Terraform. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html) | DevOps Ingenieur, AWS-Administrator | 

### Connect das GitHub Repository
<a name="connect-the-github-repository"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Stellen Sie eine Verbindung zum GitHub Repository her. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html) | AWS-Administrator | 

### Erstellen Sie ein Terraform-Produkt im Service Catalog
<a name="create-a-terraform-product-in-service-catalog"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Erstellen Sie das Service Catalog-Produkt. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html) | AWS-Administrator | 
| Erstellen Sie ein Portfolio. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html) | AWS-Administrator | 
| Fügen Sie das Terraform-Produkt dem Portfolio hinzu. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html) | AWS-Administrator | 
| Erstellen Sie eine Zugriffsrichtlinie. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html) | AWS-Administrator | 
| Erstellen Sie eine benutzerdefinierte Vertrauensrichtlinie. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html) | AWS-Administrator | 
| Fügen Sie dem Service Catalog-Produkt eine Startbeschränkung hinzu. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html) | AWS-Administrator | 
| Gewähren Sie Zugriff auf das Produkt. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html) | AWS-Administrator | 
| Starten Sie das Produkt. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html) | DevOps Ingenieur | 

### Überprüfen der Bereitstellung
<a name="verify-the-deployment"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Validieren Sie die Bereitstellung. | Es gibt zwei AWS Step Functions Zustandsmaschinen für den Service Catalog-Bereitstellungsworkflow:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html)Sie überprüfen die Protokolle für den `ManageProvisionedProductStateMachine` State Machine, um zu bestätigen, dass das Produkt bereitgestellt wurde.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html) | DevOps Ingenieur | 

### Infrastruktur aufräumen
<a name="clean-up-infrastructure"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| Löschen Sie bereitgestellte Produkte. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html) | DevOps Ingenieur | 
| Entferne die AWS Service Catalog Engine für Terraform. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository.html) | AWS-Administrator | 

## Zugehörige Ressourcen
<a name="provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository-resources"></a>

**AWS Dokumentation**
+ [Erste Schritte mit einem Terraform-Produkt](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/getstarted-Terraform.html)

**Terraform-Dokumentation**
+ [Terraform-Installation](https://learn.hashicorp.com/tutorials/terraform/install-cli)
+ [Terraform-Backend-Konfiguration](https://developer.hashicorp.com/terraform/language/backend)
+ [Terraform Provider-Dokumentation AWS](https://registry.terraform.io/providers/hashicorp/aws/latest/docs)

## Zusätzliche Informationen
<a name="provision-a-terraform-product-in-aws-service-catalog-by-using-a-code-repository-additional"></a>

**Zugriffsrichtlinie**

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "s3:GetObject",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "s3:ExistingObjectTag/servicecatalog:provisioning": "true"
                }
            }
        },
        {
            "Action": [
                "s3:CreateBucket*",
                "s3:DeleteBucket*",
                "s3:Get*",
                "s3:List*",
                "s3:PutBucketTagging"
            ],
            "Resource": "arn:aws:s3:::*",
            "Effect": "Allow"
        },
        {
            "Action": [
                "resource-groups:CreateGroup",
                "resource-groups:ListGroupResources",
                "resource-groups:DeleteGroup",
                "resource-groups:Tag"
            ],
            "Resource": "*",
            "Effect": "Allow"
        },
        {
            "Action": [
                "tag:GetResources",
                "tag:GetTagKeys",
                "tag:GetTagValues",
                "tag:TagResources",
                "tag:UntagResources"
            ],
            "Resource": "*",
            "Effect": "Allow"
        }
    ]
}
```

**Vertrauensrichtlinie**

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "GivePermissionsToServiceCatalog",
            "Effect": "Allow",
            "Principal": {
                "Service": "servicecatalog.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        },
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::account_id:root"
            },
            "Action": "sts:AssumeRole",
            "Condition": {
                "StringLike": {
                    "aws:PrincipalArn": [
                        "arn:aws:iam::accounti_id:role/TerraformEngine/TerraformExecutionRole*",
                        "arn:aws:iam::accounti_id:role/TerraformEngine/ServiceCatalogExternalParameterParserRole*",
                        "arn:aws:iam::accounti_id:role/TerraformEngine/ServiceCatalogTerraformOSParameterParserRole*"
                    ]
                }
            }
        }
    ]
}
```