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.
Arbeiten mit dem AWS CDK in Python
Python ist eine vollständig unterstützte Client-Sprache für die AWS Cloud Development Kit (AWS CDK) und gilt als stabil. AWS CDK Bei der Arbeit mit Python werden vertraute Tools verwendet, darunter die standardmäßige Python-Implementierung (CPython), virtuelle Umgebungen mit virtualenv
und das Python-Paketinstallationsprogrammpip
. Die Module, aus denen die AWS Construct-Bibliothek besteht, werden über pypi.orgsnake_case
Sie können einen beliebigen Editor verwenden oder. IDE Viele AWS CDK Entwickler verwenden Visual Studio Code
Themen
Erste Schritte mit Python
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.
AWS CDK Python-Anwendungen benötigen Python 3.6 oder höher. Falls Sie es noch nicht installiert haben, laden Sie eine kompatible Versionyum
apt
, usw.). Mac-Benutzer könnten an Homebrew
Anmerkung
Veraltete Sprachversion von Drittanbietern: Die Sprachversion wird nur unterstützt, bis sie EOL (End Of Life) vom Anbieter oder der Community veröffentlicht wird, und kann sich nach vorheriger Ankündigung ändern.
Das Python-Paketinstallationsprogramm und der Virtual Environment Manager sind ebenfalls erforderlich. pip
virtualenv
Windows-Installationen kompatibler Python-Versionen enthalten diese Tools. Unter Linux pip
und virtualenv
kann 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 der --user
Markierung aus, sodass die Module in Ihrem Benutzerverzeichnis installiert werden, oder verwenden Sie sudo
sie, um die Berechtigungen für die systemweite Installation der Module zu erhalten.
Anmerkung
Es ist üblich, dass Linux-Distributionen den Namen der ausführbaren Datei python3
für Python 3.x verwenden und auf eine Python 2.x-Installation python
verweisen. Einige Distributionen haben ein optionales Paket, das Sie installieren können, damit sich der python
Befehl auf Python 3 bezieht. Andernfalls können Sie den Befehl, mit dem Ihre Anwendung ausgeführt wird, anpassen, indem Sie ihn cdk.json
im Hauptverzeichnis des Projekts bearbeiten.
Anmerkung
Unter Windows möchten Sie vielleicht Python (undpip) mit der py ausführbaren Datei, dem >Python-Launcher für
Wenn die Eingabe python in der Befehlszeile zu einer Meldung über die Installation von Python aus dem Windows Store führt, auch nach der Installation einer Windows-Version von Python, öffnen Sie den Windows-Einstellungsbereich „App-Ausführungs-Aliase verwalten“ und deaktivieren Sie die beiden App Installer-Einträge für Python.
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 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, Unterordnern und Dateien. Bindestriche im Ordnernamen werden in Unterstriche umgewandelt. Ansonsten sollte der Name jedoch der Form eines Python-Bezeichners 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 funktioniert auch. .\venv\Scripts\activate
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, wann immer Sie damit beginnen, daran zu arbeiten. Andernfalls haben Sie keinen Zugriff auf die dort installierten Module, und die von Ihnen installierten Module werden in das globale Modulverzeichnis von Python verschoben (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
Verwaltung von AWS Construct Library-Modulen
Verwenden Sie das Python-Paketinstallationsprogrammpip,, um AWS Construct Library-Module für Ihre Apps sowie andere Pakete, die Sie benötigen, zu installieren und zu aktualisieren. pipinstalliert auch die Abhängigkeiten für diese Module automatisch. Wenn Ihr System den Befehl nicht pip als eigenständigen Befehl erkennt, rufen Sie ihn wie folgt pip als Python-Modul auf:
python -m pip
PIP-COMMAND
Die meisten AWS CDK Konstrukte sind drin. aws-cdk-lib
Experimentelle Module befinden sich in separaten Modulen mit dem Namen wieaws-cdk.
. Der Dienstname enthält ein AWS-Präfix. Wenn Sie sich des Namens eines Moduls nicht sicher sind, suchen Sie bei PyPI danachSERVICE-NAME
.alpha
python -m pip install aws-cdk.aws-codestar-alpha
Die Konstrukte einiger Dienste befinden sich in mehr als einem Namespace. Außerdem gibt es aws-cdk.aws-route53
beispielsweise drei zusätzliche Amazon Route 53-Namespaces mit den Namenaws-route53-targets
, undaws-route53-patterns
. aws-route53resolver
Anmerkung
Die Python-Ausgabe der CDK API Referenz zeigt auch die Paketnamen.
Die Namen, die für den Import von AWS Construct Library-Modulen 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 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.
-
Im Allgemeinen sollten Sie einzelne Klassen aus der obersten Ebene
aws_cdk
importieren.from aws_cdk import App, Construct
-
Wenn Sie viele Klassen aus dem benötigen
aws_cdk
, können Sie einen Namespace-Alias von verwenden,cdk
anstatt einzelne Klassen zu importieren. Vermeiden Sie es, beides zu tun.import aws_cdk as cdk
-
Im Allgemeinen sollten Sie AWS Construct-Bibliotheken mit kurzen Namespace-Aliasen importieren.
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 ist am besten, dies manuell zu tun, anstatt es 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 Sie ein Projekt bündeln, das an anderer Stelle ausgeführt werden soll.
Normalerweise requirements.txt
sollten Sie jedoch nur Abhängigkeiten der obersten Ebene auflisten (Module, von denen Ihre App direkt abhängt) und nicht die Abhängigkeiten dieser Bibliotheken. Diese Strategie erleichtert die Aktualisierung Ihrer Abhängigkeiten.
Sie können Änderungen vornehmenrequirements.txt
, um Upgrades zuzulassen. Ersetzen Sie einfach die ==
vorherige Versionsnummer durch, ~=
um Upgrades auf eine höhere kompatible Version zu ermöglichen, oder entfernen Sie die Versionsanforderung vollständig, um die neueste verfügbare Version des Moduls anzugeben.
Wenn die requirements.txt
Datei entsprechend bearbeitet wurde, um Upgrades zu ermöglichen, geben Sie diesen Befehl ein, um die in Ihrem Projekt installierten Module jederzeit zu aktualisieren:
pip install --upgrade -r requirements.txt
Verwaltung von Abhängigkeiten in Python
In Python spezifizieren Sie Abhängigkeiten, 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. PIPwird auf eine der folgenden Arten aufgerufen:
pip
command
options
python -m pipcommand
options
Der python -m pip Aufruf funktioniert auf den meisten Systemen. Er pip setzt voraus, dass sich die PIP ausführbare Datei im Systempfad befindet. Falls pip das nicht funktioniert, versuchen Sie, es durch zu ersetzen. python -m pip
Der cdk init --language python Befehl erstellt eine virtuelle Umgebung für Ihr neues Projekt. Dadurch kann jedes Projekt seine eigenen Versionen von Abhängigkeiten und auch eine requirements.txt
Basisdatei haben. Sie müssen diese virtuelle Umgebung source .venv/bin/activate jedes Mal aktivieren, indem Sie sie ausführen, wenn Sie mit der Arbeit an dem Projekt beginnen. Führen Sie unter Windows .\venv\Scripts\activate stattdessen den Befehl aus
CDKAnwendungen
Im Folgenden sehen Sie ein Beispiel für eine requirements.txt
-Datei. Da PIP es keine Funktion zum Sperren von Abhängigkeiten gibt, 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
Wenn Sie ein Modul mit installieren, pip install wird es nicht automatisch hinzugefügt. requirements.txt
Das müssen Sie selbst tun. Wenn Sie auf eine neuere Version einer Abhängigkeit aktualisieren möchten, bearbeiten Sie deren Versionsnummer unterrequirements.txt
.
Um die Abhängigkeiten Ihres Projekts nach der Erstellung oder Bearbeitung zu installieren oder zu aktualisierenrequirements.txt
, führen Sie den folgenden Befehl aus:
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 ist praktisch, um alle Abhängigkeiten (einschließlich transitiver Abhängigkeiten) genau den Versionen zuzuordnen, mit denen Sie getestet haben. Um Probleme bei der späteren Aktualisierung von Paketen zu vermeiden, verwenden Sie hierfür eine separate Datei, z. B. freeze.txt
(notrequirements.txt
). Generieren Sie sie dann neu, wenn Sie die Abhängigkeiten Ihres Projekts aktualisieren.
Konstruktbibliotheken 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 requirements.txt
Dateien kopieren. 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 transitive Abhängigkeiten PIP automatisch installiert werden, kann von jedem Paket nur eine Kopie installiert werden. Die Version, die im Abhängigkeitsbaum am höchsten angegeben ist, wird ausgewählt. Anwendungen haben immer das letzte Wort darüber, welche Version von Paketen installiert wird.
AWS CDK Redewendungen in Python
Sprachkonflikte
In Python lambda
ist dies ein Sprachschlüsselwort, sodass Sie es nicht als Namen für das AWS Lambda Construct-Bibliotheksmodul oder für Lambda-Funktionen verwenden können. Die Python-Konvention für solche Konflikte besteht darin, im Variablennamen einen abschließenden Unterstrich wie in lambda_
zu verwenden.
Konventionell wird das zweite Argument von AWS CDK Konstrukten benannt. id
Wenn Sie Ihre eigenen Stapel und Konstrukte schreiben, id
„überschattet“ der Aufruf eines Parameters die eingebaute Python-Funktionid()
, die den eindeutigen Bezeichner eines Objekts zurückgibt. Diese Funktion wird nicht sehr oft verwendet, aber wenn Sie sie zufällig in Ihrem Konstrukt benötigen sollten, benennen Sie das Argument beispielsweise um. construct_id
Argumente und Eigenschaften
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, einem Bündel von Schlüssel/Wert-Paaren, das das Konstrukt verwendet, um die von ihm erstellten Ressourcen zu konfigurieren. Andere Klassen und Methoden verwenden ebenfalls das Muster „Bündel von Attributen“ für Argumente.
scope und id sollten immer als Positionsargumente und nicht als Schlüsselwortargumente übergeben werden, da sich ihre Namen ändern, wenn das Konstrukt eine Eigenschaft namens scope oder id akzeptiert.
In Python werden Requisiten als Schlüsselwortargumente ausgedrückt. Wenn ein Argument verschachtelte Datenstrukturen enthält, werden diese mithilfe einer Klasse ausgedrückt, die bei der Instanziierung ihre eigenen Schlüsselwortargumente verwendet. Das gleiche Muster wird auf andere Methodenaufrufen angewendet, die ein strukturiertes Argument verwenden.
In der add_lifecycle_rule
Methode eines Amazon S3 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, möchten Sie möglicherweise 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 egal sind, indem Sie das **kwargs
Idiom verwenden, und nur Stichwortargumente verwenden, um die Argumente zu akzeptieren, an denen Sie interessiert sind. Wenn Sie den Konstruktor des übergeordneten Elements oder die überschriebene Methode aufrufen, übergeben Sie nur die Argumente, die das übergeordnete Objekt erwartet (oft nur). **kwargs
Die Übergabe 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 future Version von AWS CDK könnte zufällig eine neue Immobilie mit einem Namen hinzufügen, den Sie für Ihre eigene Immobilie verwendet haben. Dies wird zwar keine technischen Probleme für Benutzer Ihres Konstrukts oder Ihrer Methode verursachen (da Ihre Eigenschaft nicht „in der Kette“ weitergereicht 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 so benennen, dass sie eindeutig zu Ihrem Konstrukt gehören. Wenn es viele neue Eigenschaften gibt, bündeln Sie sie in einer Klasse mit dem entsprechenden Namen und übergeben Sie sie als einzelnes Schlüsselwortargument.
Fehlende Werte
Wird AWS CDK verwendetNone
, um fehlende oder undefinierte Werte darzustellen. Wenn Sie mit arbeiten**kwargs
, verwenden Sie die get()
Methode des Wörterbuchs, um einen Standardwert anzugeben, falls eine Eigenschaft nicht angegeben wird. Vermeiden Sie die Verwendungkwargs[...]
, da dies KeyError
auf fehlende Werte zurückzuführen ist.
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 einen Wert zurückNone
, den Sie explizit überprüfen müssen.
Verwenden von Schnittstellen
Python hat keine Schnittstellenfunktion wie einige andere Sprachen, obwohl es 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)
Geben Sie Fallstricke ein
Python verwendet dynamische Typisierung, bei der sich alle Variablen auf einen Wert beliebigen Typs beziehen können. Parameter und Rückgabewerte können mit Typen annotiert werden, aber das sind „Hinweise“ und werden nicht erzwungen. Das bedeutet, dass es in Python einfach ist, einem AWS CDK Konstrukt den falschen Wertetyp zu übergeben. Anstatt während des Builds einen Typfehler zu erhalten, wie Sie es bei einer statisch typisierten Sprache tun würden, erhalten Sie möglicherweise einen Laufzeitfehler, wenn die JSII Ebene (die zwischen Python und dem TypeScript Kern übersetzt) den AWS CDK unerwarteten Typ nicht verarbeiten kann.
Unserer Erfahrung nach fallen die Typfehler, die Python-Programmierer machen, in diese Kategorien.
-
Übergeben eines einzelnen Werts, wenn ein Konstrukt einen Container erwartet (Python-Liste oder Wörterbuch) oder umgekehrt.
-
Übergabe eines Werts eines Typs, der mit einem Layer-1-Konstrukt (
CfnXxxxxx
) verknüpft 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 beispielsweise keinen Typ verwendenIDE, der diese unterstützt, möchten Sie möglicherweise den MyPy