Bereitstellen eines Terraform-Produkts in AWS Service Catalog mithilfe eines Code-Repositorys - AWS Prescriptive Guidance

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 in AWS Service Catalog mithilfe eines Code-Repositorys

Erstellt von Dr. Rahul Sharad Gaikwad () und Tamilselvan P () AWS AWS

Umgebung: PoC oder Pilotprojekt

Technologien: Infrastruktur; DevOps

Arbeitslast: Alle anderen Workloads

AWSDienstleistungen: AWS Service Catalog; Amazon EC2

Übersicht

AWSService Catalog unterstützt Self-Service-Provisioning mit Steuerung für Ihre HashiCorp Terraform-Konfigurationen. 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 AWS Konten und Tagging. 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 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 GitLab, oder AWS CodeCommit. Sie können Produktänderungen direkt über das Repository vornehmen.

Informationen zu den allgemeinen Vorteilen von AWS Service Catalog finden Sie unter Was ist Service Catalog.

Voraussetzungen und Einschränkungen

Voraussetzungen

Architektur

Zieltechnologie-Stack

  • AWS Service Catalog

  • AWSLambda

Zielarchitektur

Architekturdiagramm der Bereitstellung eines Terraform-Produkts in Service Catalog aus einem Code-Repository

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.

  2. 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.

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

Tools

AWSDienste und Tools

  • AWSLambda ist ein Rechendienst, mit dem Sie Code ausführen können, ohne Server bereitstellen oder verwalten zu müssen. Er führt Ihren Code nur bei Bedarf aus und skaliert automatisch, sodass Sie nur für die tatsächlich genutzte Rechenzeit zahlen.

  • AWSService Catalog 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 ist eine Open-Source-Programmiersprache, die Google unterstützt.

  • Python 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. Die Verwendung der Codebeispiele in diesem Repository ist nicht erforderlich.

Bewährte Methoden

  • 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 IAM Dokumentation unter Gewährung der geringsten Rechte und bewährte Methoden zur Sicherheit.

Epen

AufgabeBeschreibungErforderliche 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 in der Docker-Dokumentation.

DevOps Ingenieur

Installieren Sie die AWS Service Catalog Engine für Terraform.

  1. Geben Sie den folgenden Befehl ein, um das AWSService Catalog Engine for Terraform-Repository zu klonen.

    git clone https://github.com/aws-samples/service-catalog-engine-for-terraform-os.git
  2. Navigieren Sie zum Stammverzeichnis des geklonten Repositorys.

  3. Geben Sie den folgenden Befehl ein. Dadurch wird die Engine installiert.

    run ./bin/bash/deploy-tre.sh -r

    Die in Ihrem Standardprofil festgelegte AWS Region wird bei der automatisierten Installation nicht verwendet. Stattdessen geben Sie die Region an, wenn Sie diesen Befehl ausführen.

DevOps Ingenieur, AWS Administrator
AufgabeBeschreibungErforderliche Fähigkeiten

Stellen Sie eine Verbindung zum GitHub Repository her.

  1. Melden Sie sich bei der AWS Management Console an und öffnen Sie dann die Developer Tools-Konsole. Sie können auf die Developer Tools-Konsole zugreifen, indem Sie einen Dienst wie AWS CodePipeline AWS CodeCommit, oder auswählen AWS CodeDeploy.

  2. Wählen Sie im linken Navigationsbereich Einstellungen und dann Verbindungen aus.

  3. Wählen Sie Create Connection (Verbindung erstellen) aus.

  4. Wählen Sie das Repository aus, in dem Sie den Terraform-Quellcode verwalten. Sie können beispielsweise Bitbucket oder GitHub Enterprise Server GitHubwählen.

  5. Geben Sie einen Namen für die Verbindung ein, und wählen Sie dann Connect.

  6. Wenn Sie dazu aufgefordert werden, authentifizieren Sie das Repository.

    Nach Abschluss der Authentifizierung wird die Verbindung hergestellt und der Status ändert sich auf aktiv.

AWSAdministrator
AufgabeBeschreibungErforderliche Fähigkeiten

Erstellen Sie das Service Catalog-Produkt.

  1. Öffnen Sie die AWSService Catalog-Konsole.

  2. Navigieren Sie zum Abschnitt Administration und wählen Sie dann Produktliste aus.

  3. Wählen Sie Produkt erstellen aus.

  4. Wählen Sie auf der Seite Produkt erstellen im Abschnitt Produktdetails den externen Produkttyp aus. Service Catalog verwendet diesen Produkttyp zur Unterstützung von Terraform Community Edition-Produkten.

  5. Geben Sie einen Namen und Besitzer für das Service Catalog-Produkt ein.

  6. Wählen Sie Geben Sie Ihr Code-Repository mithilfe eines CodeStar Anbieters an.

  7. Geben Sie die folgenden Informationen für Ihr Repository ein:

    • Connect zu Ihrem Anbieter her über AWS CodeConnections — Wählen Sie die Verbindung aus, die Sie zuvor erstellt haben.

    • Repository — Wählen Sie das Repository aus.

    • Zweig — Wählen Sie den Zweig aus.

    • Pfad der Vorlagendatei — Wählen Sie den Pfad, in dem die Codevorlagendatei gespeichert ist. Der Dateiname sollte mit endentar.gz.

  8. Geben Sie unter Versionsname und Beschreibung Informationen zur Produktversion an.

  9. Wählen Sie Produkt erstellen aus.

AWSAdministrator

Erstellen Sie ein Portfolio.

  1. Öffnen Sie die AWSService Catalog-Konsole.

  2. Navigieren Sie zum Abschnitt Administration und wählen Sie dann Portfolios aus.

  3. Wählen Sie Portfolio erstellen

  4. Geben Sie die folgenden Werte ein:

    • Portfolio-Name – Sample terraform

    • Beschreibung des PortfoliosSample portfolio for Terraform configurations

    • Eigentümer — Ihre Kontaktinformationen, z. B. E-Mail

  5. Wählen Sie Create (Erstellen) aus.

AWSAdministrator

Fügen Sie das Terraform-Produkt dem Portfolio hinzu.

  1. Öffnen Sie die AWSService Catalog-Konsole.

  2. Navigieren Sie zum Abschnitt Administration und wählen Sie dann Produktliste aus.

  3. Wählen Sie das Terraform-Produkt aus, das Sie zuvor erstellt haben.

  4. Wählen Sie Aktionen und dann Produkt zum Portfolio hinzufügen.

  5. Wählen Sie das Sample terraform Portfolio aus.

  6. Wählen Sie Produkt zum Portfolio hinzufügen.

AWSAdministrator

Erstellen Sie eine Zugriffsrichtlinie.

  1. Öffnen Sie die AWSIdentity and Access Management (IAM) -Konsole.

  2. Wählen Sie im Navigationsbereich Policies.

  3. Wählen Sie im Inhaltsbereich die Option Create policy (Richtlinie erstellen).

  4. Wählen Sie die JSONOption.

  5. Geben Sie die JSON Beispielrichtlinie unter Zugriffsrichtlinie im Abschnitt Zusätzliche Informationen dieses Musters ein.

  6. Wählen Sie Weiter.

  7. Geben Sie auf der Seite Überprüfen und erstellen im Feld Richtlinienname den folgenden Text einTerraformResourceCreationAndArtifactAccessPolicy.

  8. Wählen Sie Create Policy (Richtlinie erstellen) aus.

AWSAdministrator

Erstellen Sie eine benutzerdefinierte Vertrauensrichtlinie.

  1. Öffnen Sie die AWSIdentity and Access Management (IAM) -Konsole.

  2. Wählen Sie im Navigationsbereich Rollen aus.

  3. Wählen Sie Rolle erstellen aus.

  4. Wählen Sie unter Vertrauenswürdiger Entitätstyp die Option Benutzerdefinierte Vertrauensrichtlinie aus.

  5. Geben Sie im JSON Richtlinieneditor die JSON Beispielrichtlinie unter Vertrauensrichtlinie im Abschnitt Zusätzliche Informationen dieses Musters ein.

  6. Wählen Sie Weiter.

  7. Wählen Sie unter Berechtigungsrichtlinien die ausTerraformResourceCreationAndArtifactAccessPolicy, die Sie zuvor erstellt haben.

  8. Wählen Sie Weiter.

  9. Geben Sie unter Rollendetails in das Feld Rollenname den Text einSCLaunch-product

    Wichtig: Der Rollenname muss mit beginnenSCLaunch.

  10. Wählen Sie Rolle erstellen.

AWSAdministrator

Fügen Sie dem Service Catalog-Produkt eine Startbeschränkung hinzu.

  1. Melden Sie sich als Benutzer mit Administratorrechten bei der AWS Management Console an.

  2. Öffnen Sie die AWSService Catalog-Konsole.

  3. Wählen Sie im Navigationsbereich Portfolios aus.

  4. Wählen Sie das Portfolio aus, das Sie zuvor erstellt haben.

  5. Wählen Sie auf der Seite mit den Portfoliodetails die Registerkarte Einschränkungen und dann Einschränkung erstellen aus.

  6. Wählen Sie unter Produkt das Terraform-Produkt aus, das Sie zuvor erstellt haben.

  7. Wählen Sie unter Startbeschränkung für Methode die Option Rollennamen eingeben aus.

  8. Geben Sie in das Feld Rollenname den Text einSCLaunch-product.

  9. Wählen Sie Create (Erstellen) aus.

AWSAdministrator

Gewähren Sie Zugriff auf das Produkt.

  1. Öffnen Sie die AWSService Catalog-Konsole.

  2. Wählen Sie im Navigationsbereich Portfolios aus.

  3. Wählen Sie das Portfolio aus, das Sie zuvor erstellt haben.

  4. Wählen Sie die Registerkarte Zugriff und anschließend Zugriff gewähren aus.

  5. Wählen Sie die Registerkarte Rollen und dann die Rolle aus, die Zugriff auf die Bereitstellung dieses Produkts haben soll.

  6. Wählen Sie Zugriff gewähren.

AWSAdministrator

Starten Sie das Produkt.

  1. Melden Sie sich bei der AWS Management Console als Benutzer mit Berechtigungen zur Bereitstellung des Service Catalog-Produkts an.

  2. Öffnen Sie die AWSService Catalog-Konsole.

  3. Wählen Sie im Navigationsbereich Produkte aus.

  4. Wählen Sie das Produkt aus, das Sie zuvor erstellt haben, und klicken Sie dann auf Produkt starten.

  5. Geben Sie einen Produktnamen ein und definieren Sie alle erforderlichen Parameter.

  6. Wählen Sie Produkt starten.

DevOps Ingenieur
AufgabeBeschreibungErforderliche Fähigkeiten

Validieren Sie die Bereitstellung.

Es gibt zwei AWS Step Functions Functions-Zustandsmaschinen für den Service Catalog-Bereitstellungsworkflow:

  • ManageProvisionedProductStateMachine—Service Catalog ruft diese Zustandsmaschine auf, wenn ein neues Terraform-Produkt bereitgestellt wird und wenn ein vorhandenes von Terraform bereitgestelltes Produkt aktualisiert wird.

  • TerminateProvisionedProductStateMachine—Service Catalog ruft diese Zustandsmaschine auf, wenn ein vorhandenes, von Terraform bereitgestelltes Produkt beendet wird.

Sie überprüfen die Protokolle für den ManageProvisionedProductStateMachine State Machine, um zu bestätigen, dass das Produkt bereitgestellt wurde.

  1. Melden Sie sich bei der AWS Management Console an und öffnen Sie dann die AWSStep Functions Functions-Konsole.

  2. Wählen Sie im linken Navigationsbereich State Machines aus.

  3.  ManageProvisionedProductStateMachine.

  4. Geben Sie in der Liste Ausführungen die bereitgestellte Produkt-ID ein, um nach der Ausführung zu suchen.

    Hinweis: Die Namen der Backend-Buckets für die Statusdatei beginnen mit. sc-terraform-engine-state-

  5. Stellen Sie sicher, dass alle erforderlichen Ressourcen im Konto erstellt wurden.

DevOps Ingenieur
AufgabeBeschreibungErforderliche Fähigkeiten

Löschen Sie bereitgestellte Produkte.

  1. Melden Sie sich bei der AWS Management Console als Benutzer mit Berechtigungen zur Bereitstellung des Service Catalog-Produkts an.

  2. Öffnen Sie die AWSService Catalog-Konsole.

  3. Wählen Sie im linken Navigationsbereich die Option Bereitgestellte Produkte aus.

  4. Wählen Sie das Produkt aus, das Sie erstellt haben.

  5. Wählen Sie in der Liste Aktionen die Option Beenden aus.

  6. Geben Sie terminate in das Bestätigungsfeld den Text ein und wählen Sie dann Bereitgestelltes Produkt beenden aus.

  7. Wiederholen Sie diese Schritte, um alle bereitgestellten Produkte zu beenden.

DevOps Ingenieur

Entfernen Sie die AWS Service Catalog Engine für Terraform.

  1. Melden Sie sich als Benutzer mit Administratorrechten bei der AWS Management Console an.

  2. Öffnen Sie die Amazon S3-Konsole.

  3. Wählen Sie im Navigationsbereich die Option Buckets aus.

  4. Wählen Sie den sc-terraform-engine-logging-XXXX Bucket aus.

  5. Wählen Sie Leer.

  6. Wiederholen Sie die Schritte 4—5 für die folgenden Buckets:

    • sc-terraform-engine-state-XXXX

    • terraform-engine-bootstrap-XXXX

  7. Öffnen Sie die AWS CloudFormation Konsole und überprüfen Sie dann, ob Sie sich in der richtigen AWS Region befinden.

  8. Wählen Sie in der linken Navigationsleiste Stacks aus.

  9. Wählen Sie SAM-TRE und wählen Sie dann Löschen. Warten Sie, bis der Stapel gelöscht wurde.

  10. Wählen Sie Bootstrap-TRE und wählen Sie dann Löschen. Warten Sie, bis der Stapel gelöscht wurde.

AWSAdministrator

Zugehörige Ressourcen

AWSDokumentation

Terraform-Dokumentation

Zusätzliche Informationen

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*" ] } } } ] }