Arbeiten mit in AWS CDK Go - AWS Cloud Development Kit (AWS CDK) v2

Dies ist der AWS CDK v2-Entwicklerhandbuch. Das ältere CDK v1 wurde am 1. Juni 2022 gewartet und der Support wurde am 1. Juni 2023 eingestellt.

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.

Arbeiten mit in AWS CDK Go

Go ist eine vollständig unterstützte Client-Sprache für das AWS Cloud Development Kit (AWS CDK) und gilt als stabil. Beim Arbeiten mit der AWS CDK in Go werden vertraute Tools verwendet. Die Go-Version des verwendet AWS CDK sogar Kennungen im Go-Stil.

Im Gegensatz zu den anderen Sprachen, die das CDK unterstützt, ist Go keine traditionelle objektorientierte Programmiersprache. Go verwendet Zusammensetzung, bei der andere Sprachen die Vererbung häufig nutzen. Wir haben versucht, idiomatische Go-Ansätze so weit wie möglich zu verwenden, aber es gibt Stellen, an denen sich das CDK unterscheiden kann.

Dieses Thema enthält Anleitungen zur Arbeit mit der AWS CDK in Go. Im Blog-Beitrag zur Ankündigung finden Sie eine exemplarische Vorgehensweise für ein einfaches Go-Projekt für die AWS CDK.

Erste Schritte mit Go

Um mit der zu arbeiten AWS CDK, müssen Sie über ein - AWS Konto und Anmeldeinformationen verfügen und Node.js und das AWS CDK Toolkit installiert haben. Siehe Erste Schritte mit der AWS CDK.

Die Go-Bindungen für die AWS CDK verwenden die standardmäßige Go-Toolchain , v1.18 oder höher. Sie können den Editor Ihrer Wahl verwenden.

Anmerkung

Sprachveralterung von Drittanbietern: Die Sprachversion wird nur unterstützt, bis ihr EOL (End of Life) vom Anbieter oder der Community gemeinsam genutzt wird und kann sich ohne vorherige Ankündigung ändern.

Erstellen eines Projekts

Sie erstellen ein neues AWS CDK Projekt, indem Sie cdk init in einem leeren Verzeichnis aufrufen. Verwenden Sie die --language Option und geben Sie ango:

mkdir my-project cd my-project cdk init app --language go

cdk init verwendet den Namen des Projektordners, um verschiedene Elemente des Projekts zu benennen, einschließlich Klassen, Unterordner und Dateien. Bindestriche im Ordnernamen werden in Unterstriche umgewandelt. Der Name sollte jedoch ansonsten der Form einer Go-ID folgen; er sollte beispielsweise nicht mit einer Zahl beginnen oder Leerzeichen enthalten.

Das resultierende Projekt enthält einen Verweis auf das AWS CDK Go-Kernmodul, github.com/aws/aws-cdk-go/awscdk/v2, in go.mod. Problem go get bei der Installation dieses und anderer erforderlicher Module.

Verwalten von Modulen AWS der Construct Library

In den meisten AWS CDK Dokumentationen und Beispielen wird das Wort „Modul“ häufig verwendet, um sich auf Module der AWS Construct Library zu beziehen, eines oder mehrere pro AWS Service, was sich von der idiomatischen Go-Nutzung des Begriffs unterscheidet. Die CDK-Konstruktbibliothek wird in einem Go-Modul mit den einzelnen Modulen der Konstruktbibliothek bereitgestellt, die die verschiedenen AWS -Services unterstützen, die als Go-Pakete in diesem Modul bereitgestellt werden.

Einige Services „ AWS Construct Library“-Unterstützung befinden sich in mehr als einem Construct Library-Modul (Go-Paket). Amazon Route 53 verfügt beispielsweise über drei Construct Library-Module zusätzlich zum awsroute53 Hauptpaket mit dem Namen awsroute53patternsawsroute53resolver, und awsroute53targets.

Das Kernpaket AWS CDK des , das Sie in den meisten AWS CDK Apps benötigen, wird im Go-Code als importiertgithub.com/aws/aws-cdk-go/awscdk/v2. Pakete für die verschiedenen Services in der AWS Construct Library finden Sie unter github.com/aws/aws-cdk-go/awscdk/v2. Der Namespace des Amazon S3-Moduls lautet beispielsweise github.com/aws/aws-cdk-go/awscdk/v2/awss3.

import ( "github.com/aws/aws-cdk-go/awscdk/v2/awss3" // ... )

Nachdem Sie die Module der Construct Library (Go-Pakete) für die Services importiert haben, die Sie in Ihrer App verwenden möchten, greifen Sie in diesem Modul beispielsweise mit auf Konstrukte zuawss3.Bucket.

Verwalten von Abhängigkeiten in Go

In Go sind Abhängigkeitsversionen in definiertgo.mod. Der Standardwert go.mod ähnelt dem hier gezeigten.

module my-package go 1.16 require ( github.com/aws/aws-cdk-go/awscdk/v2 v2.16.0 github.com/aws/constructs-go/constructs/v10 v10.0.5 github.com/aws/jsii-runtime-go v1.29.0 )

Paketnamen (Module, in Go Parlance) werden durch URL mit der angehängten erforderlichen Versionsnummer angegeben. Das Modulsystem von Go unterstützt keine Versionsbereiche.

Geben Sie den go get Befehl aus, um alle erforderlichen Module zu installieren und zu aktualisierengo.mod. Eine Liste der verfügbaren Updates für Ihre Abhängigkeiten finden Sie unter go list -m -u all.

AWS CDK idiomas in Go

Feld- und Methodennamen

Feld- und Methodennamen verwenden die Groß-/Kleinschreibung (likeThis) in TypeScript, der Sprache des CDK als Ursprung. In Go folgen diese den Go-Konventionen, ebenso sind Pascal-verwaltet (LikeThis).

Bereinigen

Verwenden Sie in Ihrer main Methode , defer jsii.Close() um sicherzustellen, dass Ihre CDK-App nacheinander bereinigt wird.

Fehlende Werte und Zeigerkonvertierung

In Go werden fehlende Werte in AWS CDK Objekten wie Eigenschaftspaketen durch dargestelltnil. Go hat keine löschbaren Typen. Der einzige Typ, der enthalten kann, nil ist ein Zeiger. Damit Werte optional sind, sind alle CDK-Eigenschaften, Argumente und Rückgabewerte Zeiger, auch für primitive Typen. Dies gilt sowohl für erforderliche als auch für optionale Werte. Wenn ein erforderlicher Wert später optional wird, ist keine grundlegende Änderung des Typs erforderlich.

Verwenden Sie beim Übergeben von Literalwerten oder Ausdrücken die folgenden Hilfsfunktionen, um Zeiger auf die Werte zu erstellen.

  • jsii.String

  • jsii.Number

  • jsii.Bool

  • jsii.Time

Aus Gründen der Konsistenz empfehlen wir Ihnen, bei der Definition Ihrer eigenen Konstrukte Zeiger ähnlich zu verwenden, obwohl es praktischer erscheinen kann, beispielsweise die Ihres Konstrukts id als Zeichenfolge und nicht als Zeiger auf eine Zeichenfolge zu erhalten.

Wenn Sie mit optionalen AWS CDK Werten arbeiten, einschließlich primitiver Werte sowie komplexer Typen, sollten Sie die Zeiger explizit testen, um sicherzustellen, dass sie es nicht sind, nil bevor Sie mit ihnen etwas unternehmen. Go verfügt nicht über „syntaktische Telefonie“, um leere oder fehlende Werte zu behandeln, wie es bei anderen Sprachen der Fall ist. Es wird jedoch garantiert, dass die erforderlichen Werte in Eigenschaftspaketen und ähnlichen Strukturen vorhanden sind (die Konstruktion schlägt andernfalls fehl), sodass diese Werte nicht nilüberprüft werden müssen.

Konstrukte und Eigenschaften

Konstrukte, die eine oder mehrere AWS Ressourcen und die zugehörigen Attribute darstellen, werden in Go als Schnittstellen dargestellt. Beispielsweise awss3.Bucket ist eine -Schnittstelle. Jedes Konstrukt verfügt über eine Factory-Funktion, z. B. awss3.NewBucket, um eine Struktur zurückzugeben, die die entsprechende Schnittstelle implementiert.

Alle Factory-Funktionen verwenden drei Argumente: die , scope in der das Konstrukt definiert wird (sein übergeordnetes Element im Konstruktbaum), und id, propsein Paket von Schlüssel-Wert-Paaren, die das Konstrukt zur Konfiguration der erstellten Ressourcen verwendet. Das Muster „Paket von Attributen“ wird auch an anderer Stelle in der verwendet AWS CDK.

In Go werden Eigenschaften durch einen bestimmten Strukturtyp für jedes Konstrukt dargestellt. Ein awss3.Bucket nimmt beispielsweise ein Eigenschaftsargument vom Typ awss3.BucketProps. Verwenden Sie ein Strukturliteral, um Props-Argumente zu schreiben.

var bucket = awss3.NewBucket(stack, jsii.String("MyBucket"), &awss3.BucketProps{ Versioned: jsii.Bool(true), })

Allgemeine Strukturen

An einigen Stellen AWS CDK verwendet die JavaScript Arrays oder nicht typisierte Objekte als Eingabe für eine Methode. (Siehe z. B. die BuildSpec.fromObject() Methode AWS CodeBuild von .) In Go werden diese Objekte als Slices bzw. als leere Schnittstelle dargestellt.

Das CDK bietet variadische Hilfsfunktionen wie jsii.Strings zum Erstellen von Slices, die primitive Typen enthalten.

jsii.Strings("One", "Two", "Three")

Entwickeln von benutzerdefinierten Konstrukten

In Go ist es normalerweise einfacher, ein neues Konstrukt zu schreiben, als ein vorhandenes zu erweitern. Definieren Sie zunächst einen neuen Strukturtyp und betten Sie einen oder mehrere vorhandene Typen anonym ein, wenn eine erweiterungsähnliche Semantik gewünscht wird. Schreiben Sie Methoden für alle neuen Funktionen, die Sie hinzufügen, und die Felder, die für die Speicherung der benötigten Daten erforderlich sind. Definieren Sie eine Props-Schnittstelle, wenn Ihr Konstrukt eine benötigt. Schreiben Sie schließlich eine Factory-Funktion, NewMyConstruct() um eine Instance Ihres Konstrukts zurückzugeben.

Wenn Sie einfach einige Standardwerte für ein vorhandenes Konstrukt ändern oder ein einfaches Verhalten bei der Instanziierung hinzufügen, benötigen Sie nicht alle diese Tutorials. Schreiben Sie stattdessen eine Factory-Funktion, die die Factory-Funktion des Konstrukts aufruft, das Sie „erweitern“. In anderen CDK-Sprachen können Sie beispielsweise ein TypedBucketKonstrukt erstellen, das den Objekttyp in einem Amazon S3-Bucket erzwingt, indem der s3.Bucket Typ überschrieben und im Initialisierer Ihres neuen Typs eine Bucket-Richtlinie hinzugefügt wird, die nur das Hinzufügen bestimmter Dateinamenerweiterungen zum Bucket erlaubt. In Go ist es einfacher, einfach eine zu schreiben, NewTypedBucket die eine s3.Bucket (instanced mit s3.NewBucket) zurückgibt, zu der Sie eine entsprechende Bucket-Richtlinie hinzugefügt haben. Es ist kein neuer Konstrukttyp erforderlich, da die Funktionalität bereits im Standard-Bucket-Konstrukt verfügbar ist. Das neue „Konstrukt“ bietet lediglich eine einfachere Möglichkeit, ihn zu konfigurieren.

Erstellen, Synthetisieren und Bereitstellen

Die kompiliert Ihre App AWS CDK automatisch, bevor sie ausgeführt wird. Es kann jedoch nützlich sein, Ihre App manuell zu erstellen, um nach Fehlern zu suchen und Tests durchzuführen. Sie können dies tun, indem Sie go build an einer Eingabeaufforderung ausgeben, während Sie sich im Stammverzeichnis Ihres Projekts befinden.

Führen Sie alle Tests aus, die Sie geschrieben haben, indem Sie go test an einer Eingabeaufforderung ausführen.

Die in Ihrer AWS CDK App definierten Stacks können mithilfe der folgenden Befehle einzeln oder zusammen synthetisiert und bereitgestellt werden. Im Allgemeinen sollten Sie sich im Hauptverzeichnis Ihres Projekts befinden, wenn Sie sie ausgeben.

  • cdk synth: Stellt eine AWS CloudFormation Vorlage aus einem oder mehreren Stacks in Ihrer AWS CDK App zusammen.

  • cdk deploy: Stellt die durch einen oder mehrere Stacks in Ihrer AWS CDK App definierten Ressourcen in bereit AWS.

Sie können die Namen mehrerer Stacks angeben, die in einem einzigen Befehl synthetisiert oder bereitgestellt werden sollen. Wenn Ihre App nur einen Stack definiert, müssen Sie ihn nicht angeben.

cdk synth # app defines single stack cdk deploy Happy Grumpy # app defines two or more stacks; two are deployed

Sie können auch die Platzhalter * (beliebige Anzahl von Zeichen) und ? (beliebiges einzelnes Zeichen) verwenden, um Stacks nach Mustern zu identifizieren. Wenn Sie Platzhalter verwenden, schließen Sie das Muster in Anführungszeichen ein. Andernfalls versucht die Shell möglicherweise, sie auf die Namen der Dateien im aktuellen Verzeichnis zu erweitern, bevor sie an das AWS CDK Toolkit übergeben werden.

cdk synth "Stack?" # Stack1, StackA, etc. cdk deploy "*Stack" # PipeStack, LambdaStack, etc.
Tipp

Sie müssen Stacks nicht explizit synthetisieren, bevor Sie sie bereitstellen. cdk deploy führt diesen Schritt aus, damit Sie sicherstellen können, dass Ihr neuester Code bereitgestellt wird.

Eine vollständige Dokumentation des cdk Befehls finden Sie unter AWS CDK Toolkit (cdkBefehl).