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.
Anpassen von Konstrukten aus der AWS Construct Library
Passen Sie Konstrukte aus der AWS Construct Library mithilfe von Escape-Schraffuren, Rohüberschreibungen und benutzerdefinierten Ressourcen an.
Themen
Verwenden von Escape-Schraffuren
Die AWS Construct Library bietet Konstrukte unterschiedlicher Abstraktionsstufen.
Auf der höchsten Ebene sind Ihre AWS CDK Anwendung und die darin enthaltenen Stacks selbst Abstraktionen Ihrer gesamten Cloud-Infrastruktur oder erhebliche Teile davon. Sie können parametrisiert werden, um sie in verschiedenen Umgebungen oder für unterschiedliche Anforderungen bereitzustellen.
Abstraktionen sind leistungsstarke Tools zum Entwerfen und Implementieren von Cloud-Anwendungen. Die AWS CDK bietet Ihnen nicht nur die Möglichkeit, mit ihren Abstraktionen zu erstellen, sondern auch neue Abstraktionen zu erstellen. Mithilfe der vorhandenen Open-Source-L2- und L3-Konstrukte als Leitfaden können Sie Ihre eigenen L2- und L3-Konstrukte erstellen, um die bewährten Methoden und Meinungen Ihrer eigenen Organisation widerzuspiegeln.
Keine Abstraktion ist perfekt, und selbst gute Abstraktionen können nicht jeden möglichen Anwendungsfall abdecken. Während der Entwicklung finden Sie möglicherweise ein Konstrukt, das fast Ihren Anforderungen entspricht und eine kleine oder große Anpassung erfordert.
Aus diesem Grund AWS CDK bietet die Möglichkeiten, das Konstruktmodell zu verlassen. Dazu gehört der Wechsel zu einer Abstraktion auf niedrigerer Ebene oder zu einem anderen Modell. Mit Escape-Schraffuren können Sie das AWS CDK Paradigma umgehen und es an Ihre Bedürfnisse anpassen. Anschließend können Sie Ihre Änderungen in ein neues Konstrukt einpacken, um die zugrunde liegende Komplexität zu abstrahieren und eine saubere API für andere Entwickler bereitzustellen.
Im Folgenden finden Sie Beispiele für Situationen, in denen Sie Escape-Schraffuren verwenden können:
-
Ein - AWS Service-Feature ist über verfügbar AWS CloudFormation, aber es gibt dafür keine L2-Konstrukte.
-
Ein - AWS Service-Feature ist über verfügbar AWS CloudFormation, und es gibt L2-Konstrukte für den Service, aber diese stellen das Feature noch nicht bereit. Da L2-Konstrukte vom CDK-Team kuratiert werden, sind sie möglicherweise nicht sofort für neue Funktionen verfügbar.
-
Die Funktion ist noch nicht über verfügbar AWS CloudFormation .
Informationen dazu, ob ein Feature über verfügbar ist AWS CloudFormation, finden Sie unter AWS Ressourcen- und Eigenschaftstypen – Referenz.
Entwickeln von Escape-Schraffuren für L1-Konstrukte
Wenn für den Service keine L2-Konstrukte verfügbar sind, können Sie die automatisch generierten L1-Konstrukte verwenden. Diese Ressourcen können anhand ihres Namens erkannt werden, der mit beginntCfn
, z. B. CfnBucket
oder CfnRole
. Sie instanziieren sie genau so, wie Sie die entsprechende AWS CloudFormation Ressource verwenden würden.
Um beispielsweise einen Low-Level-Amazon S3-Bucket L1 mit aktivierter Analyse zu instanziieren, würden Sie etwas wie das Folgende schreiben.
Es kann selten vorkommen, dass Sie eine Ressource definieren möchten, die keine entsprechende CfnXxx
Klasse hat. Dies könnte ein neuer Ressourcentyp sein, der noch nicht in der AWS CloudFormation Ressourcenspezifikation veröffentlicht wurde. In solchen Fällen können Sie die cdk.CfnResource
direkt instanziieren und den Ressourcentyp und die Eigenschaften angeben. Dies wird im folgenden Beispiel veranschaulicht.
Entwickeln von Escape-Schraffuren für L2-Konstrukte
Wenn einem L2-Konstrukt ein Feature fehlt oder Sie versuchen, ein Problem zu umgehen, können Sie das L1-Konstrukt ändern, das durch das L2-Konstrukt gekapselt ist.
Alle L2-Konstrukte enthalten darin das entsprechende L1-Konstrukt. Beispielsweise umschließt das High-Level-Bucket
Konstrukt das Low-Level-CfnBucket
Konstrukt. Da der direkt der AWS CloudFormation Ressource CfnBucket
entspricht, werden alle Funktionen bereitgestellt, die über verfügbar sind AWS CloudFormation.
Der grundlegende Ansatz, um Zugriff auf das L1-Konstrukt zu erhalten, besteht darin, construct.node.defaultChild
(Python: default_child
) zu verwenden, es in den richtigen Typ umzuwandeln (falls erforderlich) und seine Eigenschaften zu ändern. Betrachten wir erneut das Beispiel eines Bucket
.
Sie können dieses Objekt auch verwenden, um AWS CloudFormation Optionen wie Metadata
und zu ändernUpdatePolicy
.
Escape-Schraffuren entfernen
Die bietet AWS CDK auch die Möglichkeit, eine Abstraktionsstufe zu erreichen, die wir möglicherweise als „Entflief“-Schraffur bezeichnen. Wenn Sie ein L1-Konstrukt haben, z. B. CfnBucket
, können Sie ein neues L2-Konstrukt (Bucket
in diesem Fall) erstellen, um das L1-Konstrukt zu umschließen.
Dies ist praktisch, wenn Sie eine L1-Ressource erstellen, sie aber mit einem Konstrukt verwenden möchten, das eine L2-Ressource erfordert. Es ist auch hilfreich, wenn Sie Convenience-Methoden wie verwenden möchten.grantXxxxx()
, die auf dem L1-Konstrukt nicht verfügbar sind.
Sie wechseln mit einer statischen Methode in der L2-Klasse auf die höhere Abstraktionsstufe, z. B. Bucket.fromCfnBucket()
für Amazon S3.fromCfnXxxxx()
-Buckets. Die L1-Ressource ist der einzige Parameter.
L2-Konstrukte, die aus L1-Konstrukten erstellt wurden, sind Proxy-Objekte, die sich auf die L1-Ressource beziehen, ähnlich denen, die aus Ressourcennamen, ARNs oder Nachschlagevorgängen erstellt wurden. Änderungen an diesen Konstrukten wirken sich nicht auf die endgültige synthetisierte AWS CloudFormation Vorlage aus (da Sie jedoch über die L1-Ressource verfügen, können Sie diese stattdessen ändern). Weitere Informationen zu Proxy-Objekten finden Sie unter Verweisen auf Ressourcen in Ihrem AWS Konto.
Um Verwirrung zu vermeiden, erstellen Sie nicht mehrere L2-Konstrukte, die sich auf dasselbe L1-Konstrukt beziehen. Wenn Sie beispielsweise das Bucket
mit der -Technik im vorherigen Abschnitt CfnBucket
aus einem extrahieren, sollten Sie keine zweite Instance erstellen, Bucket
indem Sie Bucket.fromCfnBucket()
mit diesem aufrufenCfnBucket
. Entwickeln von Escape-Schraffuren für L2-Konstrukte Es funktioniert tatsächlich wie erwartet (nur einer AWS::S3::Bucket
ist synthetisiert), aber es macht Ihren Code schwieriger zu verwalten.
Rohüberschreibungen
Wenn Eigenschaften im L1-Konstrukt fehlen, können Sie die gesamte Typisierung mithilfe von Rohüberschreibungen umgehen. Dadurch ist es auch möglich, synthetisierte Eigenschaften zu löschen.
Verwenden Sie eine der addOverride
Methoden (Python: add_override
), wie im folgenden Beispiel gezeigt.
Benutzerdefinierte Ressourcen
Wenn die Funktion nicht über AWS CloudFormation, sondern nur über einen direkten API-Aufruf verfügbar ist, müssen Sie eine AWS CloudFormation benutzerdefinierte -Ressource schreiben, um den benötigten API-Aufruf durchzuführen. Sie können die verwenden AWS CDK , um benutzerdefinierte Ressourcen zu schreiben und sie in eine reguläre Konstruktschnittstelle zu packen. Aus Sicht eines Konsumenten Ihres Konstrukts wird sich die Erfahrung nativ anhören.
Beim Erstellen einer benutzerdefinierten Ressource muss eine Lambda-Funktion geschrieben werdenUPDATE
, die auf die DELETE
Lebenszyklusereignisse CREATE
, und einer Ressource reagiert. Wenn Ihre benutzerdefinierte Ressource nur einen einzigen API-Aufruf tätigen muss, sollten Sie die verwendenAwsCustomResource
Das Thema ist hier zu breit, um es vollständig abzudecken, aber die folgenden Links sollten Ihnen den Einstieg erleichtern:
-
Ein vollwertigeres Beispiel finden Sie in der -DnsValidatedCertificate
Klasse in der CDK-Standardbibliothek. Dies wird als benutzerdefinierte Ressource implementiert.