Dies ist der AWS CDK v2-Entwicklerhandbuch. Die ältere CDK Version 1 wurde am 1. Juni 2022 in die Wartung aufgenommen 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.
Mit dem AWS CDK in Go arbeiten
Go ist eine vollständig unterstützte Client-Sprache für die AWS Cloud Development Kit (AWS CDK) und gilt als stabil. Bei der AWS CDK Arbeit mit Go werden vertraute Tools verwendet. Die Go-Version von AWS CDK Even verwendet Identifikatoren im Go-Stil.
Im Gegensatz zu den anderen Sprachen, die es CDK unterstützt, ist Go keine traditionelle objektorientierte Programmiersprache. Go verwendet Komposition, wo andere Sprachen häufig Vererbung nutzen. Wir haben versucht, so weit wie möglich idiomatische Go-Ansätze zu verwenden, aber es gibt Stellen, an denen sie sich unterscheiden CDK können.
Dieses Thema bietet Anleitungen für die Arbeit mit AWS CDK Go-In-Go. Im Blogbeitrag zur Ankündigung
Themen
Fangen Sie an mit Go
Um mit dem arbeiten zu können 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 dem AWS CDK.
Die Go-Bindungen für die AWS CDK Verwendung der Standard-Go-Toolchain
Anmerkung
Veraltete Sprachversion von Drittanbietern: Die Sprachversion wird nur solange unterstützt, bis sie EOL (End Of Life) vom Anbieter oder der Community veröffentlicht wird, und kann sich nach vorheriger Ankündigung ändern.
Erstellen eines Projekts
Sie erstellen ein neues AWS CDK Projekt, indem Sie es 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, Unterordnern und Dateien. Bindestriche im Ordnernamen werden in Unterstriche umgewandelt. Ansonsten sollte der Name jedoch die Form einer Go-ID haben; er sollte beispielsweise nicht mit einer Zahl beginnen oder Leerzeichen enthalten.
Das daraus resultierende Projekt enthält einen Verweis auf das AWS CDK Go-Hauptmodul,github.com/aws/aws-cdk-go/awscdk/v2
, ingo.mod
. Problem go
get bei der Installation dieses und anderer erforderlicher Module.
Verwaltung von AWS Construct Library-Modulen
In den meisten AWS CDK Dokumentationen und Beispielen wird das Wort „Modul“ häufig verwendet, um sich auf AWS Construct Library-Module zu beziehen, eines oder mehrere pro AWS Dienst, was sich von der idiomatischen Go-Verwendung des Begriffs unterscheidet. Die CDK Construct-Bibliothek wird in einem Go-Modul mit den einzelnen Construct-Library-Modulen, die die verschiedenen AWS Dienste unterstützen, als Go-Pakete innerhalb dieses Moduls bereitgestellt.
Die AWS Construct Library-Unterstützung einiger Dienste ist in mehr als einem Construct Library-Modul (Go-Paket) enthalten. Amazon Route 53 verfügt beispielsweise zusätzlich zum awsroute53
Hauptpaket über drei Construct-Library-Module mit den Namen awsroute53patterns
awsroute53resolver
, undawsroute53targets
.
AWS CDK Das Kernpaket, das Sie in den meisten AWS CDK Apps benötigen, wird in Go-Code als importiertgithub.com/aws/aws-cdk-go/awscdk/v2
. Pakete für die verschiedenen Dienste in der AWS Construct-Bibliothek befinden sich untergithub.com/aws/aws-cdk-go/awscdk/v2
. Der Namespace des Amazon S3 S3-Moduls lautet github.com/aws/aws-cdk-go/awscdk/v2/awss3
beispielsweise.
import ( "github.com/aws/aws-cdk-go/awscdk/v2/awss3" // ... )
Nachdem Sie die Construct Library-Module (Go-Pakete) für die Dienste importiert haben, die Sie in Ihrer App verwenden möchten, greifen Sie auf Konstrukte in diesem Modul zu, z. B. mit. awss3.Bucket
Verwaltung von Abhängigkeiten in Go
In Go sind die Versionen von Abhängigkeiten in definiertgo.mod
. Die Standardeinstellung go.mod
ähnelt der 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, im Go-Sprachgebrauch) werden URL mit der angehängten erforderlichen Versionsnummer angegeben. Das Modulsystem von Go unterstützt keine Versionsbereiche.
Geben Sie den go get Befehl ein, um alle erforderlichen Module zu installieren und zu aktualisierengo.mod
. Um eine Liste der verfügbaren Updates für Ihre Abhängigkeiten zu sehen, geben Sie Folgendes eingo list -m -u all.
AWS CDK Redewendungen in Go
Feld- und Methodennamen
Feld- und Methodennamen verwenden in TypeScript der Ursprungssprache von CDK das Kamelzeichen (likeThis
). In Go folgen diese den Go-Konventionen, ebenso wie die Pascal-Groß- und Kleinschreibung (). LikeThis
Bereinigen
Verwenden Sie in Ihrer main
Methode, defer jsii.Close()
um sicherzustellen, dass Ihre CDK App nach sich selbst aufräumt.
Fehlende Werte und Zeigerkonvertierung
In Go werden fehlende Werte in AWS CDK Objekten wie Eigenschaftenbündeln durch nil
dargestellt. Go hat keine nullwertfähigen 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 bei primitiven Typen. Dies gilt sowohl für erforderliche als auch für optionale Werte. Wenn also ein erforderlicher Wert später optional wird, ist keine grundlegende Änderung des Typs erforderlich.
Verwenden Sie bei der Übergabe von Literalwerten oder Ausdrücken die folgenden Hilfsfunktionen, um Zeiger auf die Werte zu erstellen.
-
jsii.String
-
jsii.Number
-
jsii.Bool
-
jsii.Time
Aus Konsistenzgründen empfehlen wir, Zeiger bei der Definition Ihrer eigenen Konstrukte auf ähnliche Weise zu verwenden, auch wenn es praktischer erscheint, Ihre Konstrukte beispielsweise als Zeichenfolge statt als Zeiger auf eine Zeichenfolge zu empfangen. id
Beim Umgang mit optionalen AWS CDK Werten, einschließlich primitiver Werte und komplexer Typen, sollten Sie Zeiger explizit testen, um sicherzustellen, dass sie es nicht sind, nil
bevor Sie etwas mit ihnen anfangen. Go hat keinen „syntaktischen Zucker“, der beim Umgang mit leeren oder fehlenden Werten hilft, wie es in einigen anderen Sprachen der Fall ist. Erforderliche Werte in Eigenschaftspaketen und ähnlichen Strukturen sind jedoch garantiert vorhanden (andernfalls schlägt die Konstruktion fehl), sodass diese Werte nicht überprüft werden müssen. nil
Konstrukte und Requisiten
Konstrukte, die eine oder mehrere AWS Ressourcen und ihre zugehörigen Attribute repräsentieren, werden in Go als Schnittstellen dargestellt. Zum Beispiel awss3.Bucket
ist es eine Schnittstelle. Jedes Konstrukt hat eine Factory-Funktionawss3.NewBucket
, z. B. um eine Struktur zurückzugeben, die die entsprechende Schnittstelle implementiert.
Alle Factory-Funktionen benötigen drei Argumente: das Argument, scope
in dem das Konstrukt definiert wird (sein übergeordnetes Element im Konstruktbaum), ein und id
props
, ein Bündel von Schlüssel/Wert-Paaren, die das Konstrukt zur Konfiguration der von ihm erstellten Ressourcen verwendet. Das Muster „Bündel von Attributen“ wird auch an anderer Stelle in der verwendet. AWS CDK
In Go werden Requisiten für jedes Konstrukt durch einen bestimmten Strukturtyp repräsentiert. Zum Beispiel awss3.Bucket
benötigt an ein Requisiten-Argument vom Typ. awss3.BucketProps
Verwenden Sie ein Strukturliteral, um Requisitenargumente zu schreiben.
var bucket = awss3.NewBucket(stack, jsii.String("amzn-s3-demo-bucket"), &awss3.BucketProps{ Versioned: jsii.Bool(true), })
Generische Strukturen
An einigen Stellen werden JavaScript Arrays oder untypisierte Objekte als Eingabe für eine Methode AWS CDK verwendet. (Siehe zum Beispiel die Methode.) AWS CodeBuildBuildSpec.fromObject()
In Go werden diese Objekte als Slices bzw. als leere Schnittstelle dargestellt.
Das CDK bietet variadische Hilfsfunktionen, z. B. jsii.Strings
zum Erstellen von Slices, die primitive Typen enthalten.
jsii.Strings("One", "Two", "Three")
Entwicklung benutzerdefinierter Konstrukte
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 benötigten Daten erforderlich sind. Definieren Sie eine Requisiten-Schnittstelle, falls Ihr Konstrukt eine benötigt. Schreiben Sie abschließend eine Factory-FunktionNewMyConstruct()
, um eine Instanz Ihres Konstrukts zurückzugeben.
Wenn Sie einfach einige Standardwerte für ein vorhandenes Konstrukt ändern oder bei der Instanziierung ein einfaches Verhalten hinzufügen, brauchen Sie diese ganze Installation nicht. Schreiben Sie stattdessen eine Factory-Funktion, die die Factory-Funktion des Konstrukts aufruft, das Sie „erweitern“. In anderen CDK Sprachen könnten Sie beispielsweise ein TypedBucket
Konstrukt erstellen, das den Objekttyp in einem Amazon S3 S3-Bucket erzwingt, indem Sie den s3.Bucket
Typ überschreiben und im Initialisierer Ihres neuen Typs eine Bucket-Richtlinie hinzufügen, die es erlaubt, dem Bucket nur bestimmte Dateinamenerweiterungen hinzuzufügen. In Go ist es einfacher, einfach eine zu schreiben, NewTypedBucket
die eine s3.Bucket
(instanziierte Verwendungs3.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, es zu konfigurieren.
Erstellen, Synthetisieren und Bereitstellen
Der 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 es go build
an einer Befehlszeile eingeben, während Sie sich im Stammverzeichnis Ihres Projekts befinden.
Führen Sie alle Tests aus, die Sie geschrieben haben, indem Sie sie go test
an einer Befehlszeile ausführen.