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 arbeiten TypeScript
TypeScript ist eine vollständig unterstützte Client-Sprache für die AWS Cloud Development Kit (AWS CDK) und gilt als stabil. Bei der Arbeit mit dem AWS CDK In werden vertraute Tools TypeScript verwendet, darunter der TypeScript Compiler (tsc
) von Microsoft, Node.jsnpm
). Sie können auch Yarn
Sie können einen beliebigen Editor verwenden oder. IDE Viele AWS CDK Entwickler verwenden Visual Studio Code
Themen
Fangen Sie an mit TypeScript
Um mit dem arbeiten zu können AWS CDK, benötigen Sie ein AWS Konto und Anmeldeinformationen und müssen Node.js und das AWS CDK Toolkit installiert haben. Siehe Erste Schritte mit dem AWS CDK.
Sie benötigen auch es TypeScript selbst (Version 3.8 oder höher). Wenn Sie es noch nicht haben, können Sie es mit installierennpm
.
npm install -g typescript
Anmerkung
Wenn Sie einen Berechtigungsfehler erhalten und Administratorzugriff auf Ihr System haben, versuchen Sie essudo npm install -g
typescript
.
TypeScript Bleiben Sie regelmäßig auf dem Laufendennpm update -g typescript
.
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 antypescript
:
mkdir my-project cd my-project cdk init app --language typescript
Beim Erstellen eines Projekts werden auch das aws-cdk-lib
Modul und seine Abhängigkeiten installiert.
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 eines TypeScript Bezeichners haben; er sollte beispielsweise nicht mit einer Zahl beginnen oder Leerzeichen enthalten.
Verwenden Sie lokal tsc
und cdk
In den meisten Fällen wird in diesem Handbuch davon ausgegangen, dass Sie das CDK Toolkit global (npm install -g
typescript aws-cdk
) installieren TypeScript , und die bereitgestellten Befehlsbeispiele (wiecdk synth
) folgen dieser Annahme. Dieser Ansatz macht es einfach, beide Komponenten auf dem neuesten Stand zu halten, und da beide einen strikten Ansatz zur Abwärtskompatibilität verfolgen, besteht im Allgemeinen nur ein geringes Risiko, immer die neuesten Versionen zu verwenden.
Einige Teams ziehen es vor, alle Abhängigkeiten innerhalb jedes Projekts anzugeben, einschließlich Tools wie dem TypeScript Compiler und dem CDK Toolkit. Auf diese Weise können Sie diese Komponenten bestimmten Versionen zuordnen und sicherstellen, dass alle Entwickler in Ihrem Team (und Ihrer CI/CD-Umgebung) genau diese Versionen verwenden. Dadurch wird eine mögliche Änderungsquelle vermieden, was dazu beiträgt, Builds und Bereitstellungen konsistenter und wiederholbarer zu gestalten.
Das CDK beinhaltet Abhängigkeiten TypeScript sowohl für beide als auch für das CDK Toolkit in den TypeScript Projektvorlagen. Wenn Sie also diesen Ansatz verwenden möchten, müssen Sie keine Änderungen an Ihrem Projekt vornehmen. package.json
Sie müssen lediglich leicht unterschiedliche Befehle zum Erstellen Ihrer App und zum Ausgeben von cdk
Befehlen verwenden.
Operation | Verwenden Sie globale Tools | Verwenden Sie lokale Tools |
---|---|---|
Projekt initialisieren | cdk init --language typescript |
npx aws-cdk init --language typescript |
Entwicklung | tsc |
npm run build |
Führen Sie den CDK Toolkit-Befehl aus | cdk ... |
npm run cdk ... oder npx aws-cdk ... |
npx aws-cdk
führt die lokal im aktuellen Projekt installierte Version des CDK Toolkits aus, falls vorhanden, und greift dabei auf die globale Installation zurück, falls vorhanden. Wenn keine globale Installation vorhanden ist, wird eine temporäre Kopie des CDK Toolkits npx
heruntergeladen und ausgeführt. Sie können eine beliebige Version des CDK Toolkits mit der folgenden @
Syntax angeben: npx aws-cdk@2.0 --version
prints. 2.0.0
Tipp
Richten Sie einen Alias ein, damit Sie den cdk
Befehl mit einer lokalen CDK Toolkit-Installation verwenden können.
AWS Construct Library-Module verwalten
Verwenden Sie den Node Package Manager (npm
), um AWS Construct Library-Module für Ihre Apps sowie andere Pakete, die Sie benötigen, zu installieren und zu aktualisieren. (Sie können yarn
stattdessen verwenden, npm
wenn Sie es vorziehen.) npm
installiert auch die Abhängigkeiten für diese Module automatisch.
Die meisten AWS CDK Konstrukte befinden sich im CDK Hauptpaket mit dem Namen. Dies ist eine Standardabhängigkeit in neuen Projektenaws-cdk-lib
, die von cdk init erstellt wurden. Module der „experimentellen“ AWS Construct-Bibliothek, bei denen sich übergeordnete Konstrukte noch in der Entwicklung befinden, werden wie benannt. @aws-cdk/
Der Dienstname hat ein aws-Präfix. Wenn Sie sich nicht sicher sind, wie ein Modul heißt, suchen Sie auf NPMSERVICE-NAME
-alpha
Anmerkung
Die CDKAPIReferenz zeigt auch die Paketnamen.
Mit dem folgenden Befehl wird beispielsweise das experimentelle Modul für installiert AWS CodeStar.
npm install @aws-cdk/aws-codestar-alpha
Die Construct Library-Unterstützung einiger Dienste erfolgt in mehr als einem Namespace. Außerdem gibt es aws-route53
beispielsweise drei zusätzliche Amazon Route 53-Namespaces,aws-route53-targets
, aws-route53-patterns
und. aws-route53resolver
Die Abhängigkeiten Ihres Projekts werden in verwaltet. package.json
Sie können diese Datei bearbeiten, um einige oder alle Ihrer Abhängigkeiten für eine bestimmte Version zu sperren oder um zu ermöglichen, dass sie unter bestimmten Kriterien auf neuere Versionen aktualisiert werden. So aktualisieren Sie die NPM Abhängigkeiten Ihres Projekts gemäß den Regeln, die Sie in angegeben haben, auf die neueste zulässige Versionpackage.json
:
npm update
TypeScriptIn importieren Sie Module in Ihren Code unter demselben Namen, mit dem Sie sie installiert habenNPM. Wir empfehlen die folgenden Methoden, wenn Sie AWS CDK Klassen und AWS Construct Library-Module in Ihre Anwendungen importieren. Das Befolgen dieser Richtlinien trägt dazu bei, dass Ihr Code mit anderen AWS CDK Anwendungen konsistent und verständlicher ist.
-
Verwenden Sie
import
Direktiven ES6 im Stil von -style, nichtrequire()
. -
Importiere generell einzelne Klassen von
aws-cdk-lib
.import { App, Stack } from 'aws-cdk-lib';
-
Wenn Sie viele Klassen von benötigen
aws-cdk-lib
, können Sie einen Namespace-Alias von verwenden,cdk
anstatt die einzelnen Klassen zu importieren. Vermeiden Sie es, beides zu tun.import * as cdk from 'aws-cdk-lib';
-
Im Allgemeinen importieren Sie AWS Dienstkonstrukte mit kurzen Namespace-Aliasnamen.
import { aws_s3 as s3 } from 'aws-cdk-lib';
Verwaltung von Abhängigkeiten in TypeScript
In TypeScript CDK Projekten werden Abhängigkeiten in der package.json
Datei im Hauptverzeichnis des Projekts angegeben. Die AWS CDK Kernmodule befinden sich in einem einzigen NPM Paket namensaws-cdk-lib
.
Wenn Sie ein Paket mitnpm install, installieren, NPM zeichnet das Paket package.json
für Sie auf.
Wenn Sie möchten, können Sie Yarn anstelle von verwendenNPM. Der plug-and-play Modus von Yarn, der in Yarn 2 der Standardmodus ist, wird jedoch CDK nicht unterstützt. Fügen Sie der .yarnrc.yml
Datei Ihres Projekts Folgendes hinzu, um diese Funktion zu deaktivieren.
nodeLinker: node-modules
CDKAnwendungen
Im Folgenden finden Sie eine package.json
Beispieldatei, die mit dem cdk init --language
typescript
Befehl generiert wurde:
{ "name": "my-package", "version": "0.1.0", "bin": { "my-package": "bin/my-package.js" }, "scripts": { "build": "tsc", "watch": "tsc -w", "test": "jest", "cdk": "cdk" }, "devDependencies": { "@types/jest": "^26.0.10", "@types/node": "10.17.27", "jest": "^26.4.2", "ts-jest": "^26.2.0", "aws-cdk": "2.16.0", "ts-node": "^9.0.0", "typescript": "~3.9.7" }, "dependencies": { "aws-cdk-lib": "2.16.0", "constructs": "^10.0.0", "source-map-support": "^0.5.16" } }
Für bereitstellbare CDK Apps aws-cdk-lib
muss dies im dependencies
Abschnitt von package.json
angegeben werden. Sie können die Versionsnummer mit einem Caret-Zeichen (^) angeben, dass Sie neuere Versionen als die angegebene akzeptieren, sofern sie sich in derselben Hauptversion befinden.
Geben Sie für experimentelle Konstrukte die exakten Versionen der Alpha-Konstruktbibliotheksmodule an, bei denen sich APIs das ändern kann. Verwenden Sie nicht ^ oder ~, da spätere Versionen dieser Module API Änderungen mit sich bringen können, die Ihre App beschädigen können.
Geben Sie im devDependencies
Abschnitt von die Versionen der Bibliotheken und Tools an, die Sie zum jest
Testen Ihrer App benötigen (z. B. das Test-Framework)package.json
. Verwenden Sie optional ^, um anzugeben, dass spätere kompatible Versionen zulässig sind.
Konstruktbibliotheken von Drittanbietern
Wenn Sie eine Konstruktbibliothek entwickeln, geben Sie deren Abhängigkeiten mithilfe einer Kombination aus den devDependencies
Abschnitten peerDependencies
und an, wie in der folgenden package.json
Beispieldatei gezeigt.
{ "name": "my-package", "version": "0.0.1", "peerDependencies": { "aws-cdk-lib": "^2.14.0", "@aws-cdk/aws-appsync-alpha": "2.10.0-alpha", "constructs": "^10.0.0" }, "devDependencies": { "aws-cdk-lib": "2.14.0", "@aws-cdk/aws-appsync-alpha": "2.10.0-alpha", "constructs": "10.0.0", "jsii": "^1.50.0", "aws-cdk": "^2.14.0" } }
Verwenden Sie in peerDependencies
ein Caret-Zeichen (^), um die niedrigste Version anzugebenaws-cdk-lib
, mit der Ihre Bibliothek arbeitet. Dadurch wird die Kompatibilität Ihrer Bibliothek mit einer Reihe von CDK Versionen maximiert. Geben Sie genaue Versionen für Alpha-Construct-Bibliotheksmodule an, bei denen sich APIs das ändern kann. peerDependencies
Durch die Verwendung wird sichergestellt, dass nur eine Kopie aller CDK Bibliotheken im node_modules
Baum vorhanden ist.
Geben Sie in die Tools und Bibliotheken andevDependencies
, die Sie zum Testen benötigen, optional mit ^, um anzugeben, dass spätere kompatible Versionen zulässig sind. Geben Sie genau (ohne ^ oder ~) die niedrigsten Versionen aws-cdk-lib
und andere CDK Pakete an, mit denen Sie angeben, dass Ihre Bibliothek kompatibel ist. Diese Vorgehensweise stellt sicher, dass Ihre Tests mit diesen Versionen ausgeführt werden. Wenn Sie also versehentlich eine Funktion verwenden, die nur in neueren Versionen zu finden ist, können Ihre Tests sie catch.
Warnung
peerDependencies
werden erst ab Version NPM 7 automatisch installiert. Wenn Sie NPM 6 oder früher verwenden oder wenn Sie Yarn verwenden, müssen Sie die Abhängigkeiten Ihrer Abhängigkeiten in einbeziehendevDependencies
. Andernfalls werden sie nicht installiert und Sie erhalten eine Warnung vor ungelösten Peer-Abhängigkeiten.
Abhängigkeiten installieren und aktualisieren
Führen Sie den folgenden Befehl aus, um die Abhängigkeiten Ihres Projekts zu installieren.
Um die installierten Module zu aktualisieren, können die vorherigen yarn upgrade Befehle npm install und verwendet werden. Beide Befehle aktualisieren die Pakete node_modules
auf die neuesten Versionen, die den Regeln von entsprechenpackage.json
. Sie aktualisieren package.json
sich jedoch nicht von selbst, was Sie möglicherweise tun sollten, um eine neue Mindestversion festzulegen. Wenn Sie Ihr Paket auf hosten GitHub, können Sie Dependabot-Versionsupdatespackage.json
Als alternative Vorgehensweise verwenden Sie npm-check-updates
Wichtig
Standardmäßig wählt Yarn bei der Installation oder Aktualisierung von Abhängigkeiten die neueste Version jedes Pakets aus, das die in angegebenen Anforderungen erfüllt. NPM package.json
Es besteht immer das Risiko, dass diese Versionen beschädigt werden (entweder versehentlich oder absichtlich). Testen Sie gründlich, nachdem Sie die Abhängigkeiten Ihres Projekts aktualisiert haben.
AWS CDK Redewendungen in TypeScript
Requisiten
Alle AWS Construct-Library-Klassen werden mit drei Argumenten instanziiert: dem Bereich, in dem das Konstrukt definiert wird (sein übergeordnetes Objekt im Konstruktbaum), einer ID und Requisiten. Argument props ist ein Bündel von Schlüssel/Wert-Paaren, das das Konstrukt verwendet, um die von ihm erstellten Ressourcen zu konfigurieren. AWS Andere Klassen und Methoden verwenden ebenfalls das Muster „Bündel von Attributen“ für Argumente.
TypeScriptIn props
wird die Form von mithilfe einer Schnittstelle definiert, die Ihnen die erforderlichen und optionalen Argumente und deren Typen mitteilt. Eine solche Schnittstelle wird für jede Art von props
Argument definiert, normalerweise spezifisch für ein einzelnes Konstrukt oder eine einzelne Methode. Zum Beispiel spezifiziert das Bucket-Konstrukt (in deraws-cdk-lib/aws-s3 module
) ein props
Argument, das der BucketPropsSchnittstelle entspricht.
Wenn eine Eigenschaft selbst ein Objekt ist, zum Beispiel die websiteRedirectEigenschaft vonBucketProps
, hat dieses Objekt in diesem Fall seine eigene Schnittstelle, der seine Form entsprechen muss. RedirectTarget
Wenn Sie einer AWS Construct-Library-Klasse eine Unterklasse zuordnen (oder eine Methode überschreiben, die ein Argument wie Requisiten verwendet), können Sie von der vorhandenen Schnittstelle erben, um eine neue zu erstellen, die alle neuen Requisiten angibt, die Ihr Code benötigt. Wenn Sie die übergeordnete Klasse oder Basismethode aufrufen, können Sie im Allgemeinen das gesamte Argument props übergeben, das Sie erhalten haben, da alle im Objekt angegebenen, aber nicht in der Schnittstelle angegebenen Attribute ignoriert werden.
In einer future Version von AWS CDK könnte zufällig eine neue Immobilie mit einem Namen hinzugefügt werden, den Sie für Ihre eigene Immobilie verwendet haben. Wenn Sie den erhaltenen Wert in der Vererbungskette weiterleiten, kann dies zu unerwartetem Verhalten führen. Es ist sicherer, eine oberflächliche Kopie der Requisiten weiterzugeben, die Sie erhalten haben, wenn Ihr Eigentum entfernt oder auf undefined
Null gesetzt wurde. Beispielsweise:
super(scope, name, {...props, encryptionKeys: undefined});
Sie können Ihre Eigenschaften auch so benennen, dass klar ist, dass sie zu Ihrem Konstrukt gehören. Auf diese Weise ist es unwahrscheinlich, dass sie in future AWS CDK Versionen mit Eigenschaften kollidieren werden. Wenn es viele von ihnen gibt, verwenden Sie ein einzelnes Objekt mit dem entsprechenden Namen, um sie zu speichern.
Fehlende Werte
Fehlende Werte in einem Objekt (z. B. Requisiten) haben den Wert in. undefined
TypeScript In Version 3.7 der Sprache wurden Operatoren eingeführt, die die Arbeit mit diesen Werten vereinfachen. Sie erleichtern die Angabe von Standardwerten und die Verkettung von Kurzschlüssen, wenn ein undefinierter Wert erreicht wird. Weitere Informationen zu diesen Funktionen finden Sie in den Versionshinweisen zu TypeScript 3.7
Apps erstellen und ausführen CDK
Im Allgemeinen sollten Sie sich beim Erstellen und Ausführen Ihrer Anwendung im Stammverzeichnis des Projekts befinden.
Node.js kann nicht TypeScript direkt ausgeführt werden. Stattdessen wird Ihre Anwendung so konvertiert, tsc
dass sie den TypeScript Compiler JavaScript verwendet. Der resultierende JavaScript Code wird dann ausgeführt.
Der tut dies AWS CDK automatisch, wann immer er Ihre App ausführen muss. Es kann jedoch nützlich sein, manuell zu kompilieren, um nach Fehlern zu suchen und Tests durchzuführen. Um Ihre TypeScript App manuell zu kompilieren, geben Sie das Problem einnpm run
build
. Sie können auch npm run watch
den Überwachungsmodus aufrufen, in dem der TypeScript Compiler Ihre App automatisch neu erstellt, wenn Sie Änderungen an einer Quelldatei speichern.