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.
Kontextwerte und AWS CDK
Kontextwerte sind Schlüssel-Wert-Paare, die einer App, einem Stack oder einem Konstrukt zugeordnet werden können. Sie können Ihrer App aus einer Datei (normalerweise entweder cdk.json
oder cdk.context.json
in Ihrem Projektverzeichnis) oder über die Befehlszeile bereitgestellt werden.
Das CDK Toolkit verwendet Kontext, um Werte zwischenzuspeichern, die während der Synthese aus Ihrem AWS Konto abgerufen wurden. Zu den Werten gehören die Availability Zones in Ihrem Konto oder das Amazon Machine Image (AMI), das IDs derzeit für EC2 Amazon-Instances verfügbar ist. Da diese Werte von Ihrem AWS Konto bereitgestellt werden, können sie sich zwischen den Ausführungen Ihrer CDK Anwendung ändern. Dies macht sie zu einer potenziellen Quelle unbeabsichtigter Änderungen. Das Caching-Verhalten des CDK Toolkits „friert“ diese Werte für Ihre CDK App ein, bis Sie sich entscheiden, die neuen Werte zu akzeptieren.
Stellen Sie sich das folgende Szenario ohne Kontext-Caching vor. Nehmen wir an, Sie haben „neuestes Amazon Linux“ als das AMI für Ihre EC2 Amazon-Instances angegeben und eine neue Version davon AMI wurde veröffentlicht. Wenn Sie dann das nächste Mal Ihren CDK Stack bereitstellen, würden Ihre bereits bereitgestellten Instances die veralteten („falschen“) Instances verwenden AMI und müssten aktualisiert werden. Ein Upgrade würde dazu führen, dass all Ihre vorhandenen Instanzen durch neue ersetzt werden, was wahrscheinlich unerwartet und unerwünscht wäre.
Stattdessen ist Ihr CDK Konto AMIs in der cdk.context.json
Datei Ihres Projekts verfügbar und verwendet den gespeicherten Wert für future Synthesevorgänge. Auf diese Weise AMIs ist die Liste von keine potenzielle Änderungsquelle mehr. Sie können auch sicher sein, dass Ihre Stapel immer zu denselben AWS CloudFormation Vorlagen synthetisiert werden.
Nicht alle Kontextwerte sind zwischengespeicherte Werte aus Ihrer Umgebung. AWS AWS CDK Feature-Flaggensind auch Kontextwerte. Sie können auch Ihre eigenen Kontextwerte für Ihre Apps oder Konstrukte erstellen.
Kontextschlüssel sind Zeichenketten. Werte können jeden Typ haben, der von JSON Zahlen, Zeichenketten, Arrays oder Objekten unterstützt wird.
Tipp
Wenn Ihre Konstrukte ihre eigenen Kontextwerte erstellen, nehmen Sie den Paketnamen Ihrer Bibliothek in die Schlüssel auf, damit sie nicht mit den Kontextwerten anderer Pakete in Konflikt geraten.
Viele Kontextwerte sind einer bestimmten AWS Umgebung zugeordnet, und eine bestimmte CDK App kann in mehr als einer Umgebung bereitgestellt werden. Der Schlüssel für solche Werte umfasst das AWS Konto und die Region, sodass Werte aus verschiedenen Umgebungen nicht miteinander in Konflikt geraten.
Der folgende Kontextschlüssel veranschaulicht das von der verwendete Format AWS CDK, einschließlich des Kontos und der Region.
availability-zones:account=123456789012:region=eu-central-1
Wichtig
Zwischengespeicherte Kontextwerte werden von der AWS CDK und ihren Konstrukten verwaltet, einschließlich Konstrukten, die Sie schreiben können. Fügen Sie zwischengespeicherte Kontextwerte nicht hinzu oder ändern Sie sie nicht, indem Sie Dateien manuell bearbeiten. Es kann jedoch nützlich sein, cdk.context.json
gelegentlich nachzuschauen, welche Werte zwischengespeichert werden. Kontextwerte, die keine zwischengespeicherten Werte darstellen, sollten unter dem context
Schlüssel von gespeichert werden. cdk.json
Auf diese Weise werden sie nicht gelöscht, wenn zwischengespeicherte Werte gelöscht werden.
Quellen von Kontextwerten
Kontextwerte können Ihrer AWS CDK App auf sechs verschiedene Arten zur Verfügung gestellt werden:
-
Automatisch vom AWS Girokonto.
-
Über die --context Option zum cdk Befehl. (Diese Werte sind immer Zeichenketten.)
-
In der
cdk.context.json
Datei des Projekts. -
Im
context
Schlüssel dercdk.json
Projektdatei. -
Im
context
Schlüssel Ihrer~/.cdk.json
Datei. -
In Ihrer AWS CDK App mit der
construct.node.setContext()
Methode.
In der Projektdatei cdk.context.json
werden die aus Ihrem AWS Konto abgerufenen Kontextwerte AWS CDK zwischengespeichert. Durch diese Vorgehensweise werden unerwartete Änderungen an Ihren Bereitstellungen vermieden, wenn beispielsweise eine neue Availability Zone eingeführt wird. Der schreibt AWS CDK keine Kontextdaten in eine der anderen aufgelisteten Dateien.
Wichtig
Weil sie Teil des Status Ihrer Anwendung sind cdk.json
und zusammen mit dem Rest des Quellcodes Ihrer App der Quellcodeverwaltung unterliegen cdk.context.json
müssen. Andernfalls können Bereitstellungen in anderen Umgebungen (z. B. einer CI-Pipeline) zu inkonsistenten Ergebnissen führen.
Kontextwerte beziehen sich auf das Konstrukt, mit dem sie erstellt wurden. Sie sind für untergeordnete Konstrukte sichtbar, nicht jedoch für Eltern oder Geschwister. Kontextwerte, die vom AWS CDK Toolkit (dem cdk Befehl) festgelegt werden, können automatisch, aus einer Datei oder aus der Option festgelegt werden. --context Kontextwerte aus diesen Quellen werden implizit für das Konstrukt App
festgelegt. Daher sind sie für jedes Konstrukt in jedem Stapel in der App sichtbar.
Ihre App kann mithilfe der construct.node.tryGetContext
Methode einen Kontextwert lesen. Wenn der angeforderte Eintrag im aktuellen Konstrukt oder einem seiner übergeordneten Objekte nicht gefunden wird, lautet das Ergebnisundefined
. (Alternativ könnte das Ergebnis das Äquivalent Ihrer Sprache sein, z. B. None
in Python.)
Context-Methoden
Das AWS CDK unterstützt mehrere Kontextmethoden, mit denen AWS CDK Apps Kontextinformationen aus der AWS Umgebung abrufen können. Mithilfe des Stacks können Sie beispielsweise eine Liste der Availability Zones abrufen, die in einem bestimmten AWS Konto und einer bestimmten Region verfügbar sind. availabilityZonesMethode.
Im Folgenden sind die Kontextmethoden aufgeführt:
- HostedZone.fromLookup
-
Ruft die gehosteten Zonen in Ihrem Konto ab.
- stapeln. availabilityZones
-
Ruft die unterstützten Availability Zones ab.
- StringParameter.valueFromLookup
-
Ruft einen Wert aus dem Amazon EC2 Systems Manager Manager-Parameterspeicher der aktuellen Region ab.
- Vpc. fromLookup
-
Ruft die vorhandenen Amazon Virtual Private Clouds in Ihren Konten ab.
- LookupMachineImage
-
Sucht nach einem Maschinen-Image zur Verwendung mit einer NAT Instanz in einer Amazon Virtual Private Cloud.
Wenn ein erforderlicher Kontextwert nicht verfügbar ist, benachrichtigt die AWS CDK App das CDK Toolkit darüber, dass die Kontextinformationen fehlen. Als Nächstes CLI fragt sie das aktuelle AWS Konto nach den Informationen ab und speichert die resultierenden Kontextinformationen in der cdk.context.json
Datei. Anschließend wird die AWS CDK App erneut mit den Kontextwerten ausgeführt.
Kontext anzeigen und verwalten
Verwenden Sie den cdk context Befehl, um die Informationen in Ihrer cdk.context.json
Datei anzuzeigen und zu verwalten. Um diese Informationen zu sehen, verwenden Sie den cdk context Befehl ohne Optionen. Die Ausgabe sollte etwa wie folgt aussehen.
Context found in cdk.json: ┌───┬─────────────────────────────────────────────────────────────┬─────────────────────────────────────────────────────────┐ │ # │ Key │ Value │ ├───┼─────────────────────────────────────────────────────────────┼─────────────────────────────────────────────────────────┤ │ 1 │ availability-zones:account=123456789012:region=eu-central-1 │ [ "eu-central-1a", "eu-central-1b", "eu-central-1c" ] │ ├───┼─────────────────────────────────────────────────────────────┼─────────────────────────────────────────────────────────┤ │ 2 │ availability-zones:account=123456789012:region=eu-west-1 │ [ "eu-west-1a", "eu-west-1b", "eu-west-1c" ] │ └───┴─────────────────────────────────────────────────────────────┴─────────────────────────────────────────────────────────┘ Runcdk context --reset KEY_OR_NUMBER
to remove a context key. If it is a cached value, it will be refreshed on the nextcdk synth
.
Um einen Kontextwert zu entfernencdk context --reset, führen Sie den Befehl aus und geben Sie dabei den entsprechenden Schlüssel oder die Zahl des Werts an. Im folgenden Beispiel wird der Wert entfernt, der dem zweiten Schlüssel im vorherigen Beispiel entspricht. Dieser Wert stellt die Liste der Availability Zones in der Region Europa (Irland) dar.
cdk context --reset 2
Context value availability-zones:account=123456789012:region=eu-west-1 reset. It will be refreshed on the next SDK synthesis run.
Wenn Sie also auf die neueste Version von Amazon Linux aktualisieren möchtenAMI, verwenden Sie das vorherige Beispiel, um eine kontrollierte Aktualisierung des Kontextwerts durchzuführen und ihn zurückzusetzen. Synthetisieren Sie dann Ihre App und stellen Sie sie erneut bereit.
cdk synth
Um alle gespeicherten Kontextwerte für Ihre App zu löschencdk context --clear, führen Sie Folgendes aus.
cdk context --clear
Nur in gespeicherte Kontextwerte cdk.context.json
können zurückgesetzt oder gelöscht werden. Das AWS CDK berührt keine anderen Kontextwerte. Um zu verhindern, dass ein Kontextwert mithilfe dieser Befehle zurückgesetzt wird, können Sie den Wert daher nach kopierencdk.json
.
AWS CDK Toolkit-Flagge --context
Verwenden Sie die Option --context
(kurz), um während der Synthese oder Bereitstellung Werte -c
für den Laufzeitkontext an Ihre CDK App zu übergeben.
cdk synth --context key=value MyStack
Um mehrere Kontextwerte anzugeben, wiederholen Sie die --context Option beliebig oft und geben Sie jedes Mal ein Schlüssel-Wert-Paar an.
cdk synth --context key1=value1 --context key2=value2 MyStack
Bei der Synthese mehrerer Stapel werden die angegebenen Kontextwerte an alle Stapel übergeben. Um einzelnen Stacks unterschiedliche Kontextwerte zur Verfügung zu stellen, verwenden Sie entweder unterschiedliche Schlüssel für die Werte oder mehrere OR-Befehle. cdk synth cdk deploy
Von der Befehlszeile übergebene Kontextwerte sind immer Zeichenketten. Wenn ein Wert normalerweise von einem anderen Typ ist, muss Ihr Code darauf vorbereitet sein, den Wert zu konvertieren oder zu analysieren. Möglicherweise werden Kontextwerte, die keine Zeichenfolge sind, auf andere Weise bereitgestellt (z. B. incdk.context.json
). Um sicherzustellen, dass diese Art von Wert erwartungsgemäß funktioniert, stellen Sie vor der Konvertierung sicher, dass es sich bei dem Wert um eine Zeichenfolge handelt.
Beispiel
Im Folgenden finden Sie ein Beispiel für die Verwendung eines vorhandenen Amazon VPC mithilfe von AWS CDK Kontext.
Sie können cdk diff es verwenden, um die Auswirkungen der Übergabe eines Kontextwerts in der Befehlszeile zu sehen:
cdk diff -c vpcid=vpc-0cb9c31031d0d3e22
Stack ExistsvpcStack
Outputs
[+] Output publicsubnets publicsubnets: {"Value":"subnet-06e0ea7dd302d3e8f,subnet-01fc0acfb58f3128f"}
Die resultierenden Kontextwerte können wie hier gezeigt angezeigt werden.
cdk context -j
{ "vpc-provider:account=123456789012:filter.vpc-id=vpc-0cb9c31031d0d3e22:region=us-east-1": { "vpcId": "vpc-0cb9c31031d0d3e22", "availabilityZones": [ "us-east-1a", "us-east-1b" ], "privateSubnetIds": [ "subnet-03ecfc033225be285", "subnet-0cded5da53180ebfa" ], "privateSubnetNames": [ "Private" ], "privateSubnetRouteTableIds": [ "rtb-0e955393ced0ada04", "rtb-05602e7b9f310e5b0" ], "publicSubnetIds": [ "subnet-06e0ea7dd302d3e8f", "subnet-01fc0acfb58f3128f" ], "publicSubnetNames": [ "Public" ], "publicSubnetRouteTableIds": [ "rtb-00d1fdfd823c82289", "rtb-04bb1969b42969bcb" ] } }