Wählen Sie Ihre Cookie-Einstellungen aus

Wir verwenden essentielle Cookies und ähnliche Tools, die für die Bereitstellung unserer Website und Services erforderlich sind. Wir verwenden Performance-Cookies, um anonyme Statistiken zu sammeln, damit wir verstehen können, wie Kunden unsere Website nutzen, und Verbesserungen vornehmen können. Essentielle Cookies können nicht deaktiviert werden, aber Sie können auf „Anpassen“ oder „Ablehnen“ klicken, um Performance-Cookies abzulehnen.

Wenn Sie damit einverstanden sind, verwenden AWS und zugelassene Drittanbieter auch Cookies, um nützliche Features der Website bereitzustellen, Ihre Präferenzen zu speichern und relevante Inhalte, einschließlich relevanter Werbung, anzuzeigen. Um alle nicht notwendigen Cookies zu akzeptieren oder abzulehnen, klicken Sie auf „Akzeptieren“ oder „Ablehnen“. Um detailliertere Entscheidungen zu treffen, klicken Sie auf „Anpassen“.

Behebung häufiger AWS CDK Probleme

Fokusmodus
Behebung häufiger AWS CDK Probleme - AWS Cloud Development Kit (AWS CDK) v2

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.

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.

In diesem Thema wird beschrieben, wie Sie die folgenden Probleme mit dem beheben können AWS CDK.

Nach der AWS CDK Aktualisierung von meldet das AWS CDK Toolkit (CLI) eine Nichtübereinstimmung mit der AWS Construct-Bibliothek

Die Version des AWS CDK Toolkits (das den cdk Befehl bereitstellt) muss mindestens der Version des Hauptmoduls der AWS Construct Library entsprechen,. aws-cdk-lib Das Toolkit soll abwärtskompatibel sein. Die neueste 2.x-Version des Toolkits kann mit jeder 1.x- oder 2.x-Version der Bibliothek verwendet werden. Aus diesem Grund empfehlen wir Ihnen, diese Komponente global zu installieren und auf dem neuesten Stand zu halten.

npm update -g aws-cdk

Wenn Sie mit mehreren Versionen des AWS CDK Toolkits arbeiten müssen, installieren Sie eine bestimmte Version des Toolkits lokal in Ihrem Projektordner.

Wenn Sie TypeScript oder verwenden JavaScript, enthält Ihr Projektverzeichnis bereits eine versionierte lokale Kopie des CDK Toolkits.

Wenn Sie eine andere Sprache verwenden, verwenden Sie diese, um das AWS CDK Toolkit npm zu installieren. Lassen Sie dabei das -g Flag weg und geben Sie die gewünschte Version an. Zum Beispiel:

npm install aws-cdk@2.0

Um ein lokal installiertes AWS CDK Toolkit auszuführen, verwenden Sie den Befehl npx aws-cdk statt nur. cdk Zum Beispiel:

npx aws-cdk deploy MyStack

npx aws-cdkführt die lokale Version des AWS CDK Toolkits aus, falls eine existiert. Es wird auf die globale Version zurückgegriffen, wenn ein Projekt keine lokale Installation hat. Möglicherweise finden Sie es praktisch, einen Shell-Alias einzurichten, um sicherzustellen, dass er immer auf diese Weise aufgerufen cdk wird.

macOS/Linux
alias cdk="npx aws-cdk"
Windows
doskey cdk=npx aws-cdk $*
alias cdk="npx aws-cdk"

(zurück zur Liste)

Beim Bereitstellen meines AWS CDK Stacks erhalte ich eine NoSuchBucket Fehlermeldung

Ihre AWS Umgebung wurde nicht gebootet und verfügt daher nicht über einen Amazon S3 S3-Bucket, in dem Ressourcen während der Bereitstellung gespeichert werden können. Sie können den Staging-Bucket und andere erforderliche Ressourcen mit dem folgenden Befehl erstellen:

cdk bootstrap aws://ACCOUNT-NUMBER/REGION

Um unerwartete AWS Gebühren zu vermeiden, AWS CDK bootet der keine Umgebung automatisch. Sie müssen jede Umgebung, in der Sie die Bereitstellung durchführen, explizit bootstrappen.

Standardmäßig werden die Bootstrap-Ressourcen in der Region oder den Regionen erstellt, die von Stacks in der aktuellen Anwendung verwendet werden. AWS CDK Alternativ werden sie in der Region erstellt, die in Ihrem lokalen AWS Profil angegeben ist (festgelegt vonaws configure), wobei das Konto dieses Profils verwendet wird. Sie können in der Befehlszeile wie folgt ein anderes Konto und eine andere Region angeben. (Sie müssen das Konto und die Region angeben, wenn Sie sich nicht im Verzeichnis einer App befinden.)

cdk bootstrap aws://ACCOUNT-NUMBER/REGION

Weitere Informationen finden Sie unter AWS CDK Bootstrapping.

(zurück zur Liste)

Beim Bereitstellen meines AWS CDK Stacks erhalte ich eine forbidden: null Nachricht

Sie stellen einen Stack bereit, der Bootstrap-Ressourcen benötigt, aber eine IAM-Rolle oder ein IAM-Konto verwenden, dem die Schreibberechtigung fehlt. (Der Staging-Bucket wird verwendet, wenn Stacks bereitgestellt werden, die Assets enthalten oder eine AWS CloudFormation Vorlage synthetisieren, die größer als 50.000 ist.) Verwenden Sie ein Konto oder eine Rolle, die berechtigt ist, die Aktion für den in s3:* der Fehlermeldung genannten Bucket durchzuführen.

(zurück zur Liste)

Wenn ich einen AWS CDK Stack synthetisiere, erhalte ich die Meldung --app is required either in command-line, in cdk.json or in ~/.cdk.json

Diese Meldung bedeutet normalerweise, dass Sie sich bei der Ausgabe cdk synth nicht im Hauptverzeichnis Ihres AWS CDK Projekts befinden. Die Datei cdk.json in diesem Verzeichnis, die durch den cdk init Befehl erstellt wurde, enthält die Befehlszeile, die zum Ausführen (und damit zum Synthetisieren) Ihrer AWS CDK App erforderlich ist. Für eine TypeScript App cdk.json sieht die Standardeinstellung beispielsweise etwa so aus:

{ "app": "npx ts-node bin/my-cdk-app.ts" }

Wir empfehlen, cdk Befehle nur im Hauptverzeichnis Ihres Projekts auszugeben, damit das AWS CDK Toolkit Ihre App cdk.json dort finden und erfolgreich ausführen kann.

Falls das aus irgendeinem Grund nicht praktikabel ist, sucht das AWS CDK Toolkit an zwei anderen Stellen nach der Befehlszeile der App:

  • cdk.jsonIn deinem Home-Verzeichnis

  • Zum cdk synth Befehl selbst mit der -a Option

Sie könnten beispielsweise einen Stack aus einer TypeScript App wie folgt synthetisieren.

cdk synth --app "npx ts-node my-cdk-app.ts" MyStack

(zurück zur Liste)

Beim Synthetisieren eines AWS CDK Stacks erhalte ich eine Fehlermeldung, weil die AWS CloudFormation Vorlage zu viele Ressourcen enthält

Das AWS CDK generiert Vorlagen und stellt sie bereit. AWS CloudFormation AWS CloudFormation hat ein festes Limit für die Anzahl der Ressourcen, die ein Stapel enthalten kann. Mit dem AWS CDK können Sie schneller an dieses Limit stoßen, als Sie vielleicht erwarten.

Anmerkung

Das AWS CloudFormation Ressourcenlimit liegt zum jetzigen Zeitpunkt bei 500. Das aktuelle Ressourcenlimit finden Sie unter AWS CloudFormation Kontingente.

Die absichtsbasierten Konstrukte der AWS Construct Library auf höherer Ebene stellen automatisch alle Hilfsressourcen bereit, die für die Protokollierung, Schlüsselverwaltung, Autorisierung und andere Zwecke benötigt werden. Wenn Sie beispielsweise einer Ressource Zugriff auf eine andere gewähren, werden alle IAM-Objekte generiert, die für die Kommunikation der jeweiligen Dienste erforderlich sind.

Unserer Erfahrung nach führt die reale Verwendung absichtsbasierter Konstrukte zu 1—5 AWS CloudFormation Ressourcen pro Konstrukt, obwohl dies variieren kann. Für serverlose Anwendungen sind AWS 5—8 Ressourcen pro API-Endpunkt typisch.

Muster, die eine höhere Abstraktionsebene darstellen, ermöglichen es Ihnen, noch mehr AWS Ressourcen mit noch weniger Code zu definieren. Der AWS CDK Code in generiert Beispiel: Erstellen Sie einen AWS Fargate Dienst mit dem AWS CDK beispielsweise mehr als 50 AWS CloudFormation Ressourcen und definiert gleichzeitig nur drei Konstrukte!

Das Überschreiten des AWS CloudFormation Ressourcenlimits ist ein Fehler bei der AWS CloudFormation Synthese. Der AWS CDK gibt eine Warnung aus, wenn Ihr Stack 80% des Limits überschreitet. Sie können ein anderes Limit verwenden, indem Sie die maxResources Eigenschaft für Ihren Stack festlegen, oder die Validierung deaktivieren, indem Sie maxResources sie auf 0 setzen.

Tipp

Mit dem folgenden Utility-Skript können Sie die genaue Anzahl der Ressourcen in Ihrer synthetisierten Ausgabe ermitteln. (Da jeder AWS CDK Entwickler Node.js benötigt, ist das Skript in das Skript geschrieben JavaScript.)

// rescount.js - count the resources defined in a stack // invoke with: node rescount.js <path-to-stack-json> // e.g. node rescount.js cdk.out/MyStack.template.json import * as fs from 'fs'; const path = process.argv[2]; if (path) fs.readFile(path, 'utf8', function(err, contents) { console.log(err ? `${err}` : `${Object.keys(JSON.parse(contents).Resources).length} resources defined in ${path}`); }); else console.log("Please specify the path to the stack's output .json file");

Wenn sich die Ressourcenanzahl Ihres Stacks dem Limit nähert, sollten Sie eine Neuarchitektur in Betracht ziehen, um die Anzahl der Ressourcen, die Ihr Stack enthält, zu reduzieren: zum Beispiel, indem Sie einige Lambda-Funktionen kombinieren oder Ihren Stack in mehrere Stapel aufteilen. Das CDK unterstützt Verweise zwischen Stacks, sodass Sie die Funktionalität Ihrer App auf die Art und Weise, die für Sie am sinnvollsten ist, in verschiedene Stapel aufteilen können.

Anmerkung

AWS CloudFormation Experten schlagen oft die Verwendung von verschachtelten Stacks als Lösung für das Ressourcenlimit vor. Der AWS CDK unterstützt diesen Ansatz über das Konstrukt NestedStack.

(zurück zur Liste)

Ich habe drei (oder mehr) Availability Zones für meine Auto Scaling Scaling-Gruppe oder VPC angegeben, aber sie wurde nur in zwei bereitgestellt

Um die Anzahl der von Ihnen angeforderten Availability Zones zu ermitteln, geben Sie das Konto und die Region in der env Eigenschaft des Stacks an. Wenn Sie nicht beide angeben, synthetisiert der den AWS CDK Stack standardmäßig als umgebungsunabhängig. Sie können den Stack dann mithilfe von in einer bestimmten Region bereitstellen. AWS CloudFormation Da einige Regionen nur zwei Availability Zones haben, verwendet eine umgebungsunabhängige Vorlage nicht mehr als zwei.

Anmerkung

In der Vergangenheit wurden Regionen gelegentlich mit nur einer Availability Zone gestartet. Umgebungsunabhängige AWS CDK Stacks können in solchen Regionen nicht bereitgestellt werden. Zum jetzigen Zeitpunkt haben jedoch alle AWS Regionen mindestens zwei. AZs

Sie können dieses Verhalten ändern, indem Sie die Eigenschaft availablilityZones(Python:availability_zones) Ihres Stacks überschreiben, um explizit die Zonen anzugeben, die Sie verwenden möchten.

Weitere Informationen zur Angabe des Kontos und der Region eines Stacks bei der Synthese unter Beibehaltung der Flexibilität zur Bereitstellung in jeder Region finden Sie unterUmgebungen für die AWS CDK.

(zurück zur Liste)

Mein S3-Bucket, meine DynamoDB-Tabelle oder eine andere Ressource werden bei der Ausgabe nicht gelöscht cdk destroy

Standardmäßig haben Ressourcen, die Benutzerdaten enthalten können, die Eigenschaft removalPolicy (Python:removal_policy) vonRETAIN, und die Ressource wird nicht gelöscht, wenn der Stack zerstört wird. Stattdessen wird die Ressource aus dem Stapel verwaist. Sie müssen die Ressource dann manuell löschen, nachdem der Stapel zerstört wurde. Solange Sie dies nicht tun, schlägt die erneute Bereitstellung des Stacks fehl. Dies liegt daran, dass der Name der neuen Ressource, die während der Bereitstellung erstellt wird, mit dem Namen der verwaisten Ressource in Konflikt steht.

Wenn Sie die Entfernungsrichtlinie einer Ressource auf festlegenDESTROY, wird diese Ressource gelöscht, wenn der Stapel zerstört wird.

TypeScript
import * as cdk from 'aws-cdk-lib'; import { Construct } from 'constructs'; import * as s3 from 'aws-cdk-lib/aws-s3'; export class CdkTestStack extends cdk.Stack { constructor(scope: Construct, id: string, props?: cdk.StackProps) { super(scope, id, props); const bucket = new s3.Bucket(this, 'Bucket', { removalPolicy: cdk.RemovalPolicy.DESTROY, }); } }
JavaScript
const cdk = require('aws-cdk-lib'); const s3 = require('aws-cdk-lib/aws-s3'); class CdkTestStack extends cdk.Stack { constructor(scope, id, props) { super(scope, id, props); const bucket = new s3.Bucket(this, 'Bucket', { removalPolicy: cdk.RemovalPolicy.DESTROY }); } } module.exports = { CdkTestStack }
Python
import aws_cdk as cdk from constructs import Construct import aws_cdk.aws_s3 as s3 class CdkTestStack(cdk.stack): def __init__(self, scope: Construct, id: str, **kwargs): super().__init__(scope, id, **kwargs) bucket = s3.Bucket(self, "Bucket", removal_policy=cdk.RemovalPolicy.DESTROY)
Java
software.amazon.awscdk.*; import software.amazon.awscdk.services.s3.*; import software.constructs; public class CdkTestStack extends Stack { public CdkTestStack(final Construct scope, final String id) { this(scope, id, null); } public CdkTestStack(final Construct scope, final String id, final StackProps props) { super(scope, id, props); Bucket.Builder.create(this, "Bucket") .removalPolicy(RemovalPolicy.DESTROY).build(); } }
C#
using Amazon.CDK; using Amazon.CDK.AWS.S3; public CdkTestStack(Construct scope, string id, IStackProps props) : base(scope, id, props) { new Bucket(this, "Bucket", new BucketProps { RemovalPolicy = RemovalPolicy.DESTROY }); }
import * as cdk from 'aws-cdk-lib'; import { Construct } from 'constructs'; import * as s3 from 'aws-cdk-lib/aws-s3'; export class CdkTestStack extends cdk.Stack { constructor(scope: Construct, id: string, props?: cdk.StackProps) { super(scope, id, props); const bucket = new s3.Bucket(this, 'Bucket', { removalPolicy: cdk.RemovalPolicy.DESTROY, }); } }
Anmerkung

AWS CloudFormation kann einen nicht leeren Amazon S3 S3-Bucket nicht löschen. Wenn Sie die Entfernungsrichtlinie eines Amazon S3 S3-Buckets auf festlegen und dieser Daten enthältDESTROY, schlägt der Versuch, den Stack zu löschen, fehl, da der Bucket nicht gelöscht werden kann. Sie können die Objekte im Bucket AWS CDK löschen lassen, bevor Sie versuchen, ihn zu zerstören, indem Sie die autoDeleteObjects Requisite des Buckets auf true setzen.

(zurück zur Liste)

DatenschutzNutzungsbedingungen für die WebsiteCookie-Einstellungen
© 2025, Amazon Web Services, Inc. oder Tochtergesellschaften. Alle Rechte vorbehalten.