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 AWS CDK in Python
Python ist eine vollständig unterstützte Client-Sprache für das AWS Cloud Development Kit (AWS CDK) und gilt als stabil. Beim Arbeiten mit AWS CDK in Python werden vertraute Tools verwendet, darunter die Python-Standardimplementierung (CPython), virtuelle Umgebungen mit virtualenv
und das Python-Paketinstallationsprogramm pip
. Die Module, aus denen die AWS Construct Library besteht, werden über pypi.orgsnake_case
Methodennamen).
Sie können jeden Editor oder jede IDE verwenden. Viele AWS CDK Entwickler verwenden Visual Studio Code
Themen
Erste Schritte mit Python
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.
Python- AWS CDK Anwendungen erfordern Python 3.6 oder höher. Wenn Sie es noch nicht installiert haben, laden Sie eine kompatible Version für Ihr Betriebssystem unter herunteryum
, apt
usw.) installieren. Mac-Benutzer könnten an Homebrew
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.
Das Python-Paketinstallationsprogramm, pip
und der virtuelle Umgebungsmanager, virtualenv
, sind ebenfalls erforderlich. Windows-Installationen kompatibler Python-Versionen enthalten diese Tools. Unter Linux virtualenv
können pip
und als separate Pakete in Ihrem Paketmanager bereitgestellt werden. Alternativ können Sie sie mit den folgenden Befehlen installieren:
python -m ensurepip --upgrade python -m pip install --upgrade pip python -m pip install --upgrade virtualenv
Wenn Sie auf einen Berechtigungsfehler stoßen, führen Sie die obigen Befehle mit dem ---user
Flag aus, damit die Module in Ihrem Benutzerverzeichnis installiert sind, oder verwenden Sie , sudo
um die Berechtigungen zur systemweiten Installation der Module zu erhalten.
Anmerkung
Es ist üblich, dass Linux-Distros den ausführbaren Namen python3
für Python 3.x verwenden und sich auf eine Python-2.x-Installation python
beziehen. Einige Distros verfügen über ein optionales Paket, das Sie installieren können, sodass der python
Befehl auf Python 3 verweist. Andernfalls können Sie den Befehl zum Ausführen Ihrer Anwendung anpassen, indem Sie cdk.json
im Hauptverzeichnis des Projekts bearbeiten.
Anmerkung
Unter Windows können Sie Python (und pip) mit der py ausführbaren Datei >Python launcher für Windows
Wenn die Eingabe python von in der Befehlszeile zu einer Meldung über die Installation von Python aus dem Windows-Speicher führt, öffnen Sie auch nach der Installation einer Windows-Version von Python das Einstellungsfenster für Windows' Manage App Execution Aliases und deaktivieren Sie die beiden App Installer-Einträge für Python.
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 anpython
:
mkdir my-project cd my-project cdk init app --language python
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 Python-Kennung folgen; er sollte beispielsweise nicht mit einer Zahl beginnen oder Leerzeichen enthalten.
Um mit dem neuen Projekt zu arbeiten, aktivieren Sie seine virtuelle Umgebung. Dadurch können die Abhängigkeiten des Projekts lokal im Projektordner installiert werden und müssen nicht global installiert werden.
source .venv/bin/activate
Anmerkung
Sie kennen diesen Befehl vielleicht als Mac-/Linux-Befehl zum Aktivieren einer virtuellen Umgebung. Die Python-Vorlagen enthalten eine Batch-Datei, source.bat
, die die Verwendung desselben Befehls unter Windows ermöglicht. Der herkömmliche Windows-Befehl, .venv\Scripts\activate.bat
, funktioniert ebenfalls.
Wenn Sie Ihr AWS CDK Projekt mit CDK Toolkit v1.70.0 oder früher initialisiert haben, befindet sich Ihre virtuelle Umgebung im .env
Verzeichnis statt .venv
.
Wichtig
Aktivieren Sie die virtuelle Umgebung des Projekts, sobald Sie beginnen, daran zu arbeiten. Andernfalls haben Sie keinen Zugriff auf die dort installierten Module, und die von Ihnen installierten Module gehen in das globale Python-Modulverzeichnis (oder führen zu einem Berechtigungsfehler).
Nachdem Sie Ihre virtuelle Umgebung zum ersten Mal aktiviert haben, installieren Sie die Standardabhängigkeiten der App:
python -m pip install -r requirements.txt
Verwalten von Modulen AWS der Construct Library
Verwenden Sie das Python-Paketinstallationsprogramm, pip, um AWS Construct Library-Module zur Verwendung durch Ihre Apps sowie andere benötigte Pakete zu installieren und zu aktualisieren. installiert pip auch die Abhängigkeiten für diese Module automatisch. Wenn Ihr System nicht pip als eigenständigen Befehl erkennt, rufen Sie wie folgt pip als Python-Modul auf:
python -m pip
PIP-COMMAND
Die meisten AWS CDK Konstrukte befinden sich in aws-cdk-lib
. Experimentelle Module befinden sich in separaten Modulen mit dem Namen aws-cdk.
. Der Servicename enthält ein AWS-Präfix. Wenn Sie sich über den Namen eines Moduls nicht sicher sind, suchen Sie unter PyPI nach diesemSERVICE-NAME
.alpha
python -m pip install aws-cdk.aws-codestar-alpha
Die Konstrukte einiger Services befinden sich in mehr als einem Namespace. Neben gibt aws-cdk.aws-route53
es beispielsweise drei zusätzliche Amazon Route 53-Namespaces mit dem Namen aws-route53-targets
aws-route53-patterns
, und aws-route53resolver
.
Anmerkung
Die Python-Edition der CDK-API-Referenz zeigt auch die Paketnamen an.
Die Namen, die zum Importieren von Modulen der AWS Construct Library in Ihren Python-Code verwendet werden, sehen wie folgt aus.
import aws_cdk.aws_s3 as s3 import aws_cdk.aws_lambda as lambda_
Wir empfehlen die folgenden Methoden, wenn AWS CDK Sie Klassen und Module der AWS Construct Library in Ihre Anwendungen importieren. Die Einhaltung dieser Richtlinien trägt dazu bei, dass Ihr Code mit anderen AWS CDK Anwendungen konsistent und leichter verständlich ist.
-
Importieren Sie im Allgemeinen einzelne Klassen aus der obersten Ebene
aws_cdk
.from aws_cdk import App, Construct
-
Wenn Sie viele Klassen aus der benötigen
aws_cdk
, können Sie einen Namespace-Alias verwenden,cdk
anstatt einzelne Klassen zu importieren. Vermeiden Sie beides.import aws_cdk as cdk
-
Importieren Sie im Allgemeinen AWS Construct Libraries mit kurzen Namespace-Aliassen.
import aws_cdk.aws_s3 as s3
Aktualisieren Sie nach der Installation eines Moduls die -requirements.txt
Datei Ihres Projekts, in der die Abhängigkeiten Ihres Projekts aufgeführt sind. Es empfiehlt sich, dies manuell zu tun, anstatt zu verwendenpip freeze
. pip freeze
erfasst die aktuellen Versionen aller Module, die in Ihrer virtuellen Python-Umgebung installiert sind. Dies kann nützlich sein, wenn ein Projekt gebündelt wird, um es an anderer Stelle auszuführen.
Normalerweise requirements.txt
sollte Ihr jedoch nur Abhängigkeiten der obersten Ebene (Module, von denen Ihre App direkt abhängt) und nicht die Abhängigkeiten dieser Bibliotheken auflisten. Diese Strategie macht die Aktualisierung Ihrer Abhängigkeiten einfacher.
Sie können bearbeiten, requirements.txt
um Upgrades zuzulassen. Ersetzen Sie einfach die ==
vorangehende Versionsnummer durch ~=
, um Upgrades auf eine höhere kompatible Version zuzulassen, oder entfernen Sie die Versionsanforderung vollständig, um die neueste verfügbare Version des Moduls anzugeben.
Wenn entsprechend requirements.txt
bearbeitet wurde, um Upgrades zuzulassen, geben Sie diesen Befehl aus, um die installierten Module Ihres Projekts jederzeit zu aktualisieren:
pip install --upgrade -r requirements.txt
Verwalten von Abhängigkeiten in Python
In Python geben Sie Abhängigkeiten an, indem Sie sie requirements.txt
für Anwendungen oder setup.py
für Konstruktbibliotheken einfügen. Abhängigkeiten werden dann mit dem PIP-Tool verwaltet. PIP wird auf eine der folgenden Arten aufgerufen:
pip
command
options
python -m pipcommand
options
Der python -m pip Aufruf funktioniert auf den meisten Systemen; pip erfordert, dass sich die ausführbare PIP-Datei auf dem Systempfad befindet. Wenn pip nicht funktioniert, versuchen Sie, es durch zu ersetzenpython -m pip.
Der cdk init --language python Befehl erstellt eine virtuelle Umgebung für Ihr neues Projekt. Auf diese Weise kann jedes Projekt seine eigenen Versionen von Abhängigkeiten sowie eine requirements.txt
Basisdatei haben. Sie müssen diese virtuelle Umgebung aktivieren, indem Sie source .venv/bin/activate jedes Mal ausführen, wenn Sie mit dem Projekt beginnen.
CDK-Anwendungen
Im Folgenden sehen Sie ein Beispiel für eine requirements.txt
-Datei. Da PIP nicht über eine Funktion zum Sperren von Abhängigkeiten verfügt, empfehlen wir, den Operator == zu verwenden, um exakte Versionen für alle Abhängigkeiten anzugeben, wie hier gezeigt.
aws-cdk-lib==2.14.0 aws-cdk.aws-appsync-alpha==2.10.0a0
Durch die Installation eines Moduls mit pip install wird es nicht automatisch zu hinzugefügtrequirements.txt
. Sie müssen dies selbst tun. Wenn Sie auf eine neuere Version einer Abhängigkeit aktualisieren möchten, bearbeiten Sie ihre Versionsnummer in requirements.txt
.
Führen Sie die folgenden Schritte ausrequirements.txt
, um die Abhängigkeiten Ihres Projekts nach dem Erstellen oder Bearbeiten von zu installieren oder zu aktualisieren:
python -m pip install -r requirements.txt
Tipp
Der pip freeze Befehl gibt die Versionen aller installierten Abhängigkeiten in einem Format aus, das in eine Textdatei geschrieben werden kann. Dies kann als Anforderungsdatei mit verwendet werdenpip install -r
. Diese Datei eignet sich zum Fixieren aller Abhängigkeiten (einschließlich transitiver Abhängigkeiten) an genau die Versionen, mit denen Sie getestet haben. Um Probleme beim späteren Upgrade von Paketen zu vermeiden, verwenden Sie dafür eine separate Datei, z. B. freeze.txt
(nicht requirements.txt
). Generieren Sie es dann neu, wenn Sie die Abhängigkeiten Ihres Projekts aktualisieren.
Bibliotheken für Konstrukte von Drittanbietern
In Bibliotheken werden Abhängigkeiten in angegebensetup.py
, sodass transitive Abhängigkeiten automatisch heruntergeladen werden, wenn das Paket von einer Anwendung verwendet wird. Andernfalls muss jede Anwendung, die Ihr Paket verwenden möchte, Ihre Abhängigkeiten in ihre kopierenrequirements.txt
. Ein Beispiel setup.py
wird hier gezeigt.
from setuptools import setup setup( name='my-package', version='0.0.1', install_requires=[ 'aws-cdk-lib==2.14.0', ], ... )
Um an dem -Paket für die Entwicklung zu arbeiten, erstellen oder aktivieren Sie eine virtuelle Umgebung und führen Sie dann den folgenden Befehl aus.
python -m pip install -e .
Obwohl PIP automatisch transitive Abhängigkeiten installiert, kann nur eine Kopie eines Pakets installiert werden. Die Version, die im Abhängigkeitsbaum am höchsten angegeben ist, wird ausgewählt. Anwendungen haben immer das letzte Wort in der installierten Version von Paketen.
AWS CDK idioms in Python
Sprachkonflikte
In Python lambda
ist ein Sprachschlüsselwort, daher können Sie es nicht als Namen für das AWS Lambda Konstruktbibliotheksmodul oder die Lambda-Funktionen verwenden. Die Python-Konvention für solche Konflikte besteht darin, im Variablennamen einen Unterstrich am Ende zu verwendenlambda_
, wie in .
Konventionell heißt das zweite Argument für AWS CDK Konstrukte id
. Beim Schreiben eigener Stacks und Konstrukte id
„schattet“ der integrierten Python-Funktion id()
, die die eindeutige Kennung eines Objekts zurückgibt. Diese Funktion wird nicht sehr häufig verwendet, aber wenn Sie sie in Ihrem Konstrukt benötigen sollten, benennen Sie das Argument um, z. B. construct_id
.
Argumente und Eigenschaften
Alle AWS Construct Library-Klassen werden mit drei Argumenten instanziiert: dem Umfang, in dem das Konstrukt definiert wird (sein übergeordnetes Element in der Konstruktstruktur), einer ID und props, einem Paket von Schlüssel-Wert-Paaren, die das Konstrukt zur Konfiguration der erstellten Ressourcen verwendet. Andere Klassen und Methoden verwenden auch das „Bundle of Attribute“-Muster für Argumente.
scope und id sollten immer als Positionsargumente übergeben werden, nicht als Schlüsselwortargumente, da sich ihre Namen ändern, wenn das Konstrukt eine Eigenschaft mit dem Namen scope oder id akzeptiert.
In Python werden Eigenschaften als Schlüsselwortargumente ausgedrückt. Wenn ein Argument verschachtelte Datenstrukturen enthält, werden diese mithilfe einer Klasse ausgedrückt, die bei der Instanziierung eigene Schlüsselwortargumente verwendet. Das gleiche Muster wird auf andere Methodenaufrufe angewendet, die ein strukturiertes Argument verwenden.
In der -add_lifecycle_rule
Methode eines Amazon S3-Buckets ist die -transitions
Eigenschaft beispielsweise eine Liste von Transition
Instances.
bucket.add_lifecycle_rule( transitions=[ Transition( storage_class=StorageClass.GLACIER, transition_after=Duration.days(10) ) ] )
Wenn Sie eine Klasse erweitern oder eine Methode überschreiben, sollten Sie zusätzliche Argumente für Ihre eigenen Zwecke akzeptieren, die von der übergeordneten Klasse nicht verstanden werden. In diesem Fall sollten Sie die Argumente akzeptieren, die Ihnen nicht wichtig sind, das **kwargs
idiom zu verwenden, und Nur-Schlüsselwort-Argumente verwenden, um die Argumente zu akzeptieren, an denen Sie interessiert sind. Übergeben Sie beim Aufrufen des Konstruktors des übergeordneten Konstruktors oder der überschriebenen Methode nur die erwarteten Argumente (oft nur **kwargs
). Das Übergeben von Argumenten, die die übergeordnete Klasse oder Methode nicht erwartet, führt zu einem Fehler.
class MyConstruct(Construct): def __init__(self, id, *, MyProperty=42, **kwargs): super().__init__(self, id, **kwargs) # ...
Eine zukünftige Version von AWS CDK könnte zufällig eine neue Eigenschaft mit einem Namen hinzufügen, den Sie für Ihre eigene Eigenschaft verwendet haben. Dies führt nicht zu technischen Problemen für Benutzer Ihres Konstrukts oder Ihrer Methode (da Ihre Eigenschaft nicht „über die Kette“ übergeben wird, verwendet die übergeordnete Klasse oder überschriebene Methode einfach einen Standardwert), kann aber zu Verwirrung führen. Sie können dieses potenzielle Problem vermeiden, indem Sie Ihre Eigenschaften benennen, damit sie eindeutig zu Ihrem Konstrukt gehören. Wenn es viele neue Eigenschaften gibt, bündeln Sie sie in einer entsprechend benannten Klasse und übergeben Sie sie als ein einzelnes Schlüsselwortargument.
Fehlende Werte
Die AWS CDK verwendet None
, um fehlende oder undefinierte Werte darzustellen. Wenn Sie mit arbeiten**kwargs
, verwenden Sie die get()
Methode des Wörterbuchs, um einen Standardwert bereitzustellen, wenn keine Eigenschaft angegeben wird. Vermeiden Sie die Verwendung von kwargs[...]
, da dies KeyError
zu fehlenden Werten führt.
encrypted = kwargs.get("encrypted") # None if no property "encrypted" exists encrypted = kwargs.get("encrypted", False) # specify default of False if property is missing
Einige AWS CDK Methoden (z. B. tryGetContext()
zum Abrufen eines Laufzeitkontextwerts) geben möglicherweise zurückNone
, was Sie explizit überprüfen müssen.
Verwenden von Schnittstellen
Python verfügt nicht wie einige andere Sprachen über ein Schnittstellenfeature, obwohl es über abstrakte Basisklassen
Um anzugeben, dass eine Klasse eine bestimmte Schnittstelle implementiert, können Sie den @jsii.implements
Decorator verwenden:
from aws_cdk import IAspect, IConstruct import jsii @jsii.implements(IAspect) class MyAspect(): def visit(self, node: IConstruct) -> None: print("Visited", node.node.path)
Fallstricke vom Typ
Python verwendet dynamische Typisierung, wobei alle Variablen auf einen Wert eines beliebigen Typs verweisen können. Parameter und Rückgabewerte können mit -Typen kommentiert werden, aber diese sind „Hinweise“ und werden nicht erzwungen. Das bedeutet, dass es in Python einfach ist, den falschen Werttyp an ein AWS CDK Konstrukt zu übergeben. Anstatt während des Builds einen Typfehler zu erhalten, wie Sie es bei einer statisch typisierten Sprache tun würden, erhalten Sie stattdessen möglicherweise einen Laufzeitfehler, wenn die JSII-Ebene (die zwischen Python und dem TypeScript Kern AWS CDK des s übersetzt wird) den unerwarteten Typ nicht bewältigen kann.
Unserer Erfahrung nach fallen die Typfehler, die Python-Programmierer in der Regel in diese Kategorien fallen.
-
Übergeben eines einzelnen Werts, bei dem ein Konstrukt einen Container (Python-Liste oder Wörterbuch) erwartet oder umgekehrt.
-
Übergeben eines Werts eines Typs, der einem Layer 1 (
CfnXxxxxx
)-Konstrukt zugeordnet ist, an ein L2- oder L3-Konstrukt oder umgekehrt.
Die AWS CDK Python-Module enthalten Typanmerkungen, sodass Sie Tools verwenden können, die sie unterstützen, um bei -Typen zu helfen. Wenn Sie keine IDE verwenden, die diese unterstützt, z. B. PyCharm
Synthetisieren und Bereitstellen
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).