Dies ist der AWS CDK v2-Entwicklerhandbuch. Das ältere CDK v1 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.
Importieren Sie Ressourcen aus einer AWS CloudFormation Vorlage in Ihre AWS Cloud Development Kit (AWS CDK) Anwendungen, indem Sie das cloudformation-include.CfnInclude
Konstrukt verwenden, um Ressourcen in L1-Konstrukte zu konvertieren.
Nach dem Import können Sie mit diesen Ressourcen in Ihrer App genauso arbeiten, als ob sie ursprünglich im AWS CDK Code definiert wären. Sie können diese L1-Konstrukte auch in Konstrukten auf höherer AWS CDK Ebene verwenden. Auf diese Weise können Sie beispielsweise die L2-Methoden zur Erteilung von Berechtigungen mit den von ihnen definierten Ressourcen verwenden.
Das cloudformation-include.CfnInclude
Konstrukt fügt im Wesentlichen jeder Ressource in Ihrer AWS CloudFormation Vorlage einen AWS CDK API-Wrapper hinzu. Verwenden Sie diese Funktion, um Ihre vorhandenen AWS CloudFormation Vorlagen Stück für Stück in die AWS CDK Datei zu importieren. Auf diese Weise können Sie Ihre vorhandenen Ressourcen mithilfe von AWS CDK Konstrukten verwalten, um die Vorteile von Abstraktionen auf höherer Ebene zu nutzen. Sie können diese Funktion auch verwenden, um Ihre AWS CloudFormation Vorlagen an AWS CDK Entwickler zu verkaufen, indem Sie eine Konstrukt-API bereitstellen. AWS CDK
Anmerkung
AWS CDK Version 1 ist ebenfalls enthalten aws-cdk-lib.CfnInclude
, das zuvor für denselben allgemeinen Zweck verwendet wurde. Es fehlt jedoch ein Großteil der Funktionalität voncloudformation-include.CfnInclude
.
Themen
Importieren Sie eine AWS CloudFormation Vorlage
Im Folgenden finden Sie eine AWS CloudFormation Beispielvorlage, anhand derer wir Beispiele für dieses Thema bereitstellen werden. Kopieren und speichern Sie die Vorlagemy-template.json
, um den Anweisungen zu folgen. Nachdem Sie diese Beispiele durchgearbeitet haben, können Sie weitere Informationen verwenden, indem Sie eine Ihrer vorhandenen bereitgestellten AWS CloudFormation Vorlagen verwenden. Sie können sie über die AWS CloudFormation
Konsole abrufen.
{
"Resources": {
"amzn-s3-demo-bucket": {
"Type": "AWS::S3::Bucket",
"Properties": {
"BucketName": "amzn-s3-demo-bucket",
}
}
}
}
Sie können entweder mit JSON- oder YAML-Vorlagen arbeiten. Wir empfehlen JSON, sofern verfügbar, da YAML-Parser leicht variieren können, was sie akzeptieren.
Im Folgenden finden Sie ein Beispiel dafür, wie Sie die Beispielvorlage mithilfe von in Ihre AWS CDK App importieren können. cloudformation-include
Vorlagen werden im Kontext eines CDK-Stacks importiert.
import * as cdk from 'aws-cdk-lib';
import * as cfninc from 'aws-cdk-lib/cloudformation-include';
import { Construct } from 'constructs';
export class MyStack extends cdk.Stack {
constructor(scope: Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
const template = new cfninc.CfnInclude(this, 'Template', {
templateFile: 'my-template.json',
});
}
}
Standardmäßig wird beim Importieren einer Ressource die ursprüngliche logische ID der Ressource aus der Vorlage beibehalten. Dieses Verhalten eignet sich für den Import einer AWS CloudFormation Vorlage in die AWS CDK, wobei logische Daten beibehalten werden IDs müssen. AWS CloudFormation benötigt diese Informationen, um diese importierten Ressourcen als dieselben Ressourcen aus der AWS CloudFormation Vorlage zu erkennen.
Wenn Sie einen AWS CDK Konstrukt-Wrapper für die Vorlage entwickeln, sodass er von anderen AWS CDK Entwicklern verwendet werden kann, lassen Sie IDs stattdessen die neue Ressource AWS CDK generieren. Auf diese Weise kann das Konstrukt ohne Namenskonflikte mehrfach in einem Stapel verwendet werden. Setzen Sie dazu false
beim Import der Vorlage die preserveLogicalIds
Eigenschaft auf. Im Folgenden wird ein Beispiel gezeigt:
const template = new cfninc.CfnInclude(this, 'MyConstruct', {
templateFile: 'my-template.json',
preserveLogicalIds: false
});
Um importierte Ressourcen unter die Kontrolle Ihrer AWS CDK App zu stellen, fügen Sie den Stack zuApp
:
import * as cdk from 'aws-cdk-lib';
import { MyStack } from '../lib/my-stack';
const app = new cdk.App();
new MyStack(app, 'MyStack');
Um sicherzustellen, dass keine unbeabsichtigten Änderungen an den AWS Ressourcen im Stack vorgenommen werden, können Sie einen Vergleich durchführen. Verwenden Sie den AWS CDK CLI cdk diff
Befehl und weglassen Sie alle AWS CDK-spezifischen Metadaten aus. Im Folgenden wird ein Beispiel gezeigt:
cdk diff --no-version-reporting --no-path-metadata --no-asset-metadata
Nachdem Sie eine AWS CloudFormation Vorlage importiert haben, sollte die AWS CDK App zur Informationsquelle für Ihre importierten Ressourcen werden. Um Änderungen an Ihren Ressourcen vorzunehmen, ändern Sie sie in Ihrer AWS CDK App und stellen Sie sie mit dem AWS CDK CLI cdk deployBefehl.
Auf importierte Ressourcen zugreifen
Der Name template
im Beispielcode steht für die importierte AWS CloudFormation Vorlage. Verwenden Sie die getResource()
Methode des Objekts, um von dort aus auf eine Ressource zuzugreifen. Um auf die zurückgegebene Ressource als eine bestimmte Art von Ressource zuzugreifen, wandeln Sie das Ergebnis in den gewünschten Typ um. Dies ist in Python oder nicht erforderlich JavaScript. Im Folgenden wird ein Beispiel gezeigt:
const cfnBucket = template.getResource('amzn-s3-demo-bucket') as s3.CfnBucket;
Aus diesem Beispiel cfnBucket
geht es jetzt um eine Instanz der aws-s3.CfnBucket
Klasse. Dies ist ein L1-Konstrukt, das die entsprechende AWS CloudFormation Ressource darstellt. Sie können es wie jede andere Ressource dieses Typs behandeln. Sie können beispielsweise seinen ARN-Wert mit der bucket.attrArn
Eigenschaft abrufen.
Um die CfnBucket
L1-Ressource stattdessen in eine aws-s3.Bucket
L2-Instanz zu packen, verwenden Sie die statischen Methoden fromBucketArn()
, fromBucketAttributes()
, oder. fromBucketName()
In der Regel ist die fromBucketName()
Methode am praktischsten. Im Folgenden wird ein Beispiel gezeigt:
const bucket = s3.Bucket.fromBucketName(this, 'Bucket', cfnBucket.ref);
Andere L2-Konstrukte verwenden ähnliche Methoden, um das Konstrukt aus einer vorhandenen Ressource zu erstellen.
Wenn Sie ein L1-Konstrukt in ein L2-Konstrukt einbinden, wird dadurch keine neue Ressource erstellt. In unserem Beispiel erstellen wir keinen zweiten S3; -Bucket. Stattdessen kapselt die neue Bucket
Instanz die bestehende. CfnBucket
Aus dem Beispiel geht hervor, dass bucket
es sich nun um ein Bucket
L2-Konstrukt handelt, das sich wie jedes andere L2-Konstrukt verhält. Beispielsweise können Sie einer AWS Lambda Funktion Schreibzugriff auf den Bucket gewähren, indem Sie die praktische Methode des Buckets verwenden. grantWrite()
Sie müssen die erforderliche AWS Identity and Access Management (IAM-) Richtlinie nicht manuell definieren. Im Folgenden wird ein Beispiel gezeigt:
bucket.grantWrite(lambdaFunc);
Parameter ersetzen
Wenn Ihre AWS CloudFormation Vorlage Parameter enthält, können Sie diese beim Import mithilfe der parameters
Eigenschaft durch Werte für die Erstellungszeit ersetzen. Im folgenden Beispiel ersetzen wir den UploadBucket
Parameter durch den ARN eines Buckets, der an anderer Stelle in unserem AWS CDK Code definiert ist.
const template = new cfninc.CfnInclude(this, 'Template', {
templateFile: 'my-template.json',
parameters: {
'UploadBucket': bucket.bucketArn,
},
});
Importieren Sie andere Vorlagenelemente
Sie können jedes AWS CloudFormation Vorlagenelement importieren, nicht nur Ressourcen. Die importierten Elemente werden Teil des AWS CDK
Stapels. Verwenden Sie die folgenden Methoden des CfnInclude
Objekts, um diese Elemente zu importieren:
-
getCondition()
— AWS CloudFormation Bedingungen. -
getHook()
— AWS CloudFormation Hooks für blaue/grüne Bereitstellungen. -
getParameter()
— AWS CloudFormation Parameter. -
getRule()
— AWS CloudFormation Regeln für AWS Service Catalog Vorlagen.
Jede dieser Methoden gibt eine Instanz einer Klasse zurück, die den spezifischen AWS CloudFormation Elementtyp repräsentiert. Diese Objekte sind veränderbar. Änderungen, die Sie an ihnen vornehmen, werden in der Vorlage angezeigt, die aus dem AWS CDK Stapel generiert wird. Im Folgenden finden Sie ein Beispiel, das einen Parameter aus der Vorlage importiert und seinen Standardwert ändert:
const param = template.getParameter('MyParameter');
param.default = "AWS CDK"
Verschachtelte Stapel importieren
Sie können verschachtelte Stapel importieren, indem Sie sie entweder beim Import ihrer Hauptvorlage oder zu einem späteren Zeitpunkt angeben. Die verschachtelte Vorlage muss in einer lokalen Datei gespeichert werden, in der Hauptvorlage jedoch als NestedStack
Ressource referenziert werden. Außerdem muss der im AWS CDK Code verwendete Ressourcenname mit dem Namen übereinstimmen, der für den verschachtelten Stapel in der Hauptvorlage verwendet wird.
Angesichts dieser Ressourcendefinition in der Hauptvorlage zeigt der folgende Code, wie der referenzierte verschachtelte Stapel in beide Richtungen importiert wird.
"NestedStack": {
"Type": "AWS::CloudFormation::Stack",
"Properties": {
"TemplateURL": "https://my-s3-template-source.s3.amazonaws.com/nested-stack.json"
}
// include nested stack when importing main stack
const mainTemplate = new cfninc.CfnInclude(this, 'MainStack', {
templateFile: 'main-template.json',
loadNestedStacks: {
'NestedStack': {
templateFile: 'nested-template.json',
},
},
});
// or add it some time after importing the main stack
const nestedTemplate = mainTemplate.loadNestedStack('NestedTemplate', {
templateFile: 'nested-template.json',
});
Sie können mehrere verschachtelte Stapel mit beiden Methoden importieren. Wenn Sie die Hauptvorlage importieren, stellen Sie eine Zuordnung zwischen dem Ressourcennamen jedes verschachtelten Stapels und seiner Vorlagendatei bereit. Diese Zuordnung kann eine beliebige Anzahl von Einträgen enthalten. Rufen Sie dies nach dem ersten Import für jeden verschachtelten Stapel loadNestedStack()
einmal auf.
Nach dem Import eines verschachtelten Stacks können Sie mit der Methode der Hauptvorlage darauf zugreifen. getNestedStack()
const nestedStack = mainTemplate.getNestedStack('NestedStack').stack;
Die getNestedStack()
Methode gibt eine IncludedNestedStack
Instanz zurück. Von dieser Instanz aus können Sie über die stack
Eigenschaft auf die AWS CDK NestedStack
Instanz zugreifen, wie im Beispiel gezeigt. Sie können auch über auf das ursprüngliche AWS CloudFormation Vorlagenobjekt zugreifenincludedTemplate
, aus dem Sie Ressourcen und andere AWS CloudFormation Elemente laden können.