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 dem AWS CDK in Go
Goist eine vollständig unterstützte Client-Sprache für das AWS Cloud Development Kit (AWS CDK) und gilt als stabil. Bei der Arbeit mit dem AWS CDK in Go werden vertraute Tools verwendet. Die Go-Version des AWS CDK verwendet sogar Identifikatoren im GO-Stil.
Im Gegensatz zu den anderen Sprachen, die das CDK unterstützt, Go ist es keine traditionelle objektorientierte Programmiersprache. Goverwendet 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 das CDK abweichen kann.
Dieses Thema bietet Anleitungen für die Arbeit mit dem AWS CDK in. Go Im Blogbeitrag zur Ankündigung
Erste Schritte mit Go
Um mit dem AWS CDK arbeiten zu können, 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 CDK. AWS
Die Go Bindungen für das AWS CDK verwenden die Standard-Go-Toolchain
Anmerkung
Veraltete Sprachversion von Drittanbietern: Die Sprachversion wird nur solange unterstützt, bis ihr EOL (End Of Life) vom Anbieter oder der Community bekannt gegeben wird, und sie kann sich nach vorheriger Ankündigung ändern.
Erstellen eines Projekts
Sie erstellen ein neues AWS CDK-Projekt, indem Sie es in einem leeren Verzeichnis aufrufencdk init. Verwenden Sie die --language Option und geben Sie an: go
mkdir my-project cd my-project cdk init app --language go
cdk initverwendet 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 eines Go Bezeichners haben; er sollte beispielsweise nicht mit einer Zahl beginnen oder Leerzeichen enthalten.
Das daraus resultierende Projekt enthält einen Verweis auf das AWS Go CDK-Kernmodul,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 Library 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 (GoPaket) enthalten. Amazon Route 53 verfügt beispielsweise zusätzlich zum awsroute53 Hauptpaket über drei Construct Library-Module mit den Namen awsroute53patternsawsroute53resolver, undawsroute53targets.
Das Kernpaket des AWS CDK, das Sie in den meisten AWS CDK-Apps benötigen, wird im Go Code als importiert. github.com/aws/aws-cdk-go/awscdk/v2 Pakete für die verschiedenen Dienste in der AWS Construct-Bibliothek befinden sich unter. github.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 Module (GoPakete) der Construct Library für die Dienste importiert haben, die Sie in Ihrer App verwenden möchten, greifen Sie auf Konstrukte in diesem Modul zu, beispielsweise mit. awss3.Bucket
Verwaltung von Abhängigkeiten in Go
In sind Go 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 durch eine URL angegeben, an die die erforderliche Versionsnummer angehängt wird. GoDas Modulsystem 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 eingo list -m -u all.
AWS CDK-Idiome in Go
Feld- und Methodennamen
Feld- und Methodennamen verwenden in der Ursprungssprache des CDK die TypeScript Groß-/Kleinschreibung von Camel (likeThis). In folgen diese Go KonventionenGo, ebenso wie die Pascal-Schreibweise (). 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 Eigenschaftenpaketen durch dargestellt. nil Gohat keine nullwertfähigen Typen; der einzige Typ, der enthalten nil kann, 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 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 Form von Schnittstellen dargestellt. Ist zum Beispiel awss3.Bucket 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 idprops, ein Bündel von key/value Paaren, das das Konstrukt verwendet, um die von ihm erstellten Ressourcen zu konfigurieren. Das Muster „Bündel von Attributen“ wird auch an anderer Stelle im AWS CDK verwendet.
In Go werden Requisiten für jedes Konstrukt durch einen bestimmten Strukturtyp dargestellt. Zum Beispiel awss3.Bucket benötigt an ein Requisitenargument 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 verwendet das AWS CDK JavaScript Arrays oder untypisierte Objekte als Eingabe für eine Methode. (Siehe zum Beispiel die Methode.) AWS CodeBuild BuildSpec.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")
Mit einem beliebigen Slice arbeiten
Bestimmte Konstrukte erwarten Eigenschaften, bei denen es sich um eine Liste mehrerer Typen handelt (Union-Typen in TypeScript). GoIn sind sie ein Teil von Any (*[]any). Das any stellt sicher, dass der Compiler dort die Zuweisung verschiedener Typen zulässt. In der Dokumentation finden Sie Informationen
AWS CDK Go package zu den zulässigen Typen.
Um mit solchen Eigenschaften zu arbeiten, verwenden Sie die Hilfsfunktionen vonjsii, um beliebige Segmente verschiedener Typen zu erstellen:
-
jsii.AnySlice -
jsii.AnyStrings -
jsii.AnyNumbers
Beispiel:
func Arns() *[]*string { a := "arn:aws:s3:::bucket1" b := "arn:aws:s3:::bucket2" return &[]*string{&a, &b} } awsiam.NewCfnUser(stack, jsii.String("User"), &awsiam.CfnUserProps{ ManagedPolicyArns: jsii.AnySlice(Arns()) // or ManagedPolicyArns: jsii.AnyStrings("arn:aws:s3:::bucket1", "arn:aws:s3:::bucket2") // or ManagedPolicyArns: &[]interface{}{ jsii.String("arn:aws:s3:::bucket1"), jsii.String("arn:aws:s3:::bucket2"), } })
Dieser Ansatz stellt sicher, dass Ihre Slices vom CDK korrekt interpretiert werden, wodurch Deserialisierungsfehler beim Deployment oder Synthetisieren Ihrer Stacks vermieden werden.
Entwicklung benutzerdefinierter Konstrukte
In ist es normalerweise einfacherGo, 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, falls 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 ist es einfacherGo, einfach einen zu schreiben, der eine s3.Bucket (instanziierte Verwendungs3.NewBucket) zurückgibtNewTypedBucket, 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.
Aufbau, Synthese und Bereitstellung
Das AWS CDK kompiliert Ihre App 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.
Fehlersuche
Wenn Sie auf einen Compilerfehler wie den folgenden stoßen, bedeutet dies, dass String-Slices direkt an eine Eigenschaft übergeben wurden, die ein beliebiges Segment erwartet.
Cannot use 'jsii.Strings("arn:aws:s3:::bucket1", "arn:aws:s3:::bucket2")' (type *[]*string) as the type *[]interface{}
Um diesen Fehler zu beheben, ersetzen Sie ihn jsii.Strings() durchjsii.AnyStrings(). Weitere Informationen und zusätzliche Lösungen finden Sie hier
CDK GitHub issue.