Dies ist das AWS CDK v2 Developer Guide. Für das ältere CDK v1 wurde am 1. Juni 2022 die Wartung abgeschlossen und der Support endete am 1. Juni 2023.
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.
Schonen Sie die bereitgestellten Ressourcen, wenn Sie den CDK-Code umgestalten
Wichtig
Das CDK-Refactoring befindet sich in der Vorabversion und kann sich ändern.
Mit dem Refactoring des AWS Cloud Development Kit (AWS CDK) können Sie Ihren CDK-Code umgestalten, z. B. Konstrukte umbenennen, Ressourcen zwischen Stacks verschieben und Ihre Anwendung neu organisieren. Dabei bleiben Ihre bereitgestellten Ressourcen erhalten, anstatt sie zu ersetzen. Diese Funktion hilft Ihnen dabei, bewährte Methoden der Softwareentwicklung beizubehalten, ohne dass es zu einem unbeabsichtigten Austausch von Ressourcen kommt.
Was ist CDK-Refactoring mit Ressourcenschonung?
Wenn Sie eine CDK-Anwendung bereitstellen, werden Ressourcen AWS CloudFormation anhand ihrer logischen IDs identifiziert. Das AWS CDK generiert diese logischen IDs auf der Grundlage der Konstrukt-ID und ihres Pfads im Konstruktbaum. Wenn Sie die ID eines Konstrukts ändern oder es an eine andere Stelle in Ihrem Code verschieben, wird dies in AWS CloudFormation der Regel als Aufforderung interpretiert, eine neue Ressource zu erstellen und die alte zu löschen. Bei zustandsbehafteten Ressourcen wie Datenbanken, Speicher-Buckets oder Warteschlangen kann dieser Ersatz zu Betriebsunterbrechungen oder Datenverlusten führen.
Tipp
Sie können proaktiv Änderungen der logischen ID verhindern, wenn Sie Ressourcen in Konstrukte auf höherer Ebene extrahieren. Durch die Verwendung Default als Konstrukt-ID für die primäre Ressource in einem Wrapper-Konstrukt bleibt die logische ID unverändert. Weitere Informationen finden Sie unter Heuristik der Komponenten für logische ID-Pfade.
Das CDK-Refactoring begegnet dieser Herausforderung durch:
-
Erkennen, wann Ressourcen in Ihrem Code verschoben oder umbenannt wurden.
-
Using nutzt AWS CloudFormation die Refactoring-Funktionen, um die zugrunde liegenden physischen Ressourcen zu schonen.
-
Aktualisierung logischer IDs, ohne die tatsächlichen Ressourcen zu ersetzen.
-
Pflege von Verweisen zwischen Ressourcen in Ihren Stacks.
Sie können das CDK-Refactoring entweder mit dem cdk refactor CDK-CLI-Befehl oder mit der Aktion der CDK Toolkit-Bibliothek durchführen. refactor In diesem Handbuch wird hauptsächlich der CLI-Ansatz behandelt, die zugrunde liegenden Prinzipien gelten jedoch für beide Methoden. Informationen zur Verwendung der Toolkit-Bibliothek finden Sie unter Durchführen programmatischer Aktionen mithilfe der CDK Toolkit-Bibliothek.
Wichtig
Refactoring-Operationen müssen alleine durchgeführt werden, getrennt von anderen Aktionen, wie dem Hinzufügen neuer Ressourcen, dem Löschen von Ressourcen oder dem Ändern von Ressourceneigenschaften.
Wenn Sie Ressourcen hinzufügen, löschen oder ändern sowie das Refactoring durchführen müssen, sollten Sie diese Änderungen zunächst separat bereitstellen und dann mithilfe des Refactorings Ihre Ressourcen neu organisieren.
Vorteile des CDK-Refactorings
CDK-Refactoring bietet CDK-Entwicklern die folgenden Vorteile: AWS
-
Verbessern Sie die Codeorganisation — Benennen Sie Konstrukte um und organisieren Sie die Struktur Ihrer CDK-Anwendung neu, ohne dass Ressourcen ausgetauscht werden müssen.
-
Erstellen Sie wiederverwendbare Komponenten — Extrahieren Sie duplizierten Code in wiederverwendbare L3-Konstrukte und schonen Sie gleichzeitig die eingesetzten Ressourcen.
-
Verbessern Sie die architektonische Trennung — Verschieben Sie Ressourcen zwischen Stacks, um verschiedene Teile Ihrer Anwendung besser zu isolieren.
-
Vermeiden Sie den versehentlichen Austausch von Ressourcen — Vermeiden Sie die unbeabsichtigte Neuerstellung von Ressourcen beim Umbenennen von Konstrukten.
-
Vermeiden Sie Bibliotheksänderungen von Drittanbietern — Schützen Sie Ihre Anwendung vor logischen ID-Änderungen in Konstruktbibliotheken, von denen Sie abhängig sind.
-
Wenden Sie bewährte Methoden der Softwareentwicklung an — Refaktorieren Sie Ihren Code, ohne Ihre bereitgestellte Infrastruktur zu gefährden.
So funktioniert der CDK CLI-Befehl cdk refactor
Wichtig
Sie müssen die --unstable=refactor Option bei allen Befehlen angeben, die diese Funktion verwenden.
Zunächst stellen Sie Ihre erste CDK-Anwendung bereit, um die Basisressourcen in Ihrem AWS Konto einzurichten. Nachdem Sie Ihren CDK-Code umgestaltet haben, z. B. Konstrukte umbenannt oder Ressourcen zwischen Stapeln verschoben haben, verwenden Sie den cdk refactor Befehl, um mit dem Refactoring Ihrer bereitgestellten Ressourcen zu beginnen.
Wenn Sie den Refactor-Befehl ausführen, erkennt die CDK-CLI Ihre lokalen Änderungen, indem sie Ihren aktuellen Code mit dem Status der Bereitstellung vergleicht. Es überprüft, ob Ihre CDK-Anwendung genau die gleichen Ressourcen wie der Status „Bereitgestellt“ enthält und sich nur in ihren Positionen im Konstruktbaum unterscheidet. Die CDK-CLI generiert dann einen Refactor-Plan, der die alten Ressourcenstandorte ihren neuen Standorten zuordnet. Die CDK-CLI zeigt Ihnen die vorgeschlagenen Änderungen und verwendet AWS CloudFormation nach Ihrer Bestätigung die Refactoring-API, um die logischen IDs der Ressourcen zu aktualisieren, ohne sie zu ersetzen.
Hinter den Kulissen ermittelt die CDK-CLI, welche Ressourcen verschoben wurden, indem sie ihre Eigenschaften und Abhängigkeiten vergleicht und Ressourcen identifiziert, die funktionell äquivalent sind, aber unterschiedliche Pfade im Konstruktbaum haben. Wenn Ressourcen hinzugefügt, gelöscht oder geändert werden, wird der Refactoring-Vorgang mit einer Fehlermeldung zurückgewiesen.
Beispiel für die Schonung von Ressourcen beim Refactoring von CDK-Code
In diesem Beispiel behalten wir die bereitgestellten Ressourcen bei und refaktorieren gleichzeitig unseren CDK-Code mithilfe des CDK-CLI-Befehls. cdk refactor
Unsere CDK-Beispielanwendung besteht aus einem einzelnen Stack, der einen S3-Bucket, eine CloudFront Distribution und eine Lambda-Funktion enthält. Der Konstruktbaum ist wie folgt strukturiert:
App └─ MyStack ├─ Bucket ├─ Distribution └─ Function
Das Folgende ist ein Beispiel für unseren Anwendungscode:
const app = new cdk.App(); const myStack = new cdk.Stack(app, 'MyStack'); const bucket = new s3.Bucket(myStack, 'Bucket'); const distribution = new cloudfront.Distribution(myStack, 'Distribution', { defaultBehavior: { origin: new origins.S3Origin(bucket) } }); const function = new lambda.Function(myStack, 'Function', { // function properties }); // Synthesize the app app.synth();
Stellen Sie sich nun vor, Sie möchten diesen Code wie folgt umgestalten:
-
Benennen Sie den Bucket in den
WebsiteOriginaussagekräftigeren BucketBucketum. -
Verschieben Sie den Bucket und die Distribution auf einen neuen
WebStackStapel.
Nach dem Refactoring würde der Konstruktbaum wie folgt aussehen:
App ├─ WebStack │ ├─ WebsiteOrigin │ └─ Distribution └─ MyStack └─ Function
Und der umgestaltete Code wäre:
// Refactored structure const app = new cdk.App(); // New WebStack with the bucket and distribution const webStack = new cdk.Stack(app, 'WebStack'); const bucket = new s3.Bucket(webStack, 'WebsiteOrigin'); const distribution = new cloudfront.Distribution(webStack, 'Distribution', { defaultBehavior: { origin: new origins.S3Origin(bucket) } }); // Original MyStack with just the function const myStack = new cdk.Stack(app, 'MyStack'); const function = new lambda.Function(myStack, 'Function', { // function properties }); // Synthesize the app app.synth();
Ohne das CDK-Refactoring würden diese Änderungen AWS CloudFormation dazu führen, dass neue Ressourcen erstellt und die alten gelöscht werden, da sich die logischen IDs ändern würden:
-
MyStack/Bucket/Resourcewürde werden.WebStack/WebsiteOrigin/Resource -
MyStack/Distribution/Resourcewürde werdenWebStack/Distribution/Resource.
Beim CDK-Refactoring erkennt die CDK-CLI diese Pfadänderungen und nutzt die Refactoring-Funktionen, um die AWS CloudFormation zugrunde liegenden Ressourcen zu schonen. Wenn Sie die CLI ausführencdk refactor, zeigt Ihnen die CLI die Änderungen, die sie vornehmen wird:
$ cdk refactor The following resources were moved or renamed: ┌───────────────────────────────┬───────────────────────────────┬───────────────────────────────────┐ │ Resource Type │ Old Construct Path │ New Construct Path │ ├───────────────────────────────┼───────────────────────────────┼───────────────────────────────────┤ │ AWS::S3::Bucket │ MyStack/Bucket/Resource │ WebStack/WebsiteOrigin/Resource │ ├───────────────────────────────┼───────────────────────────────┼───────────────────────────────────┤ │ AWS::CloudFront::Distribution │ MyStack/Distribution/Resource │ WebStack/Distribution/Resource │ └───────────────────────────────┴───────────────────────────────┴───────────────────────────────────┘ Do you wish refactor these resources (y/n)?
Wenn Sie durch Eingabe bestätigeny, zeigt die CDK-CLI den Fortschritt des Refactoring-Vorgangs an:
Refactoring... ✅ Stack refactor complete
Nach der Bestätigung führt die CDK-CLI den Refactoring-Vorgang aus, wobei beide Ressourcen erhalten bleiben und gleichzeitig ihre logischen IDs aktualisiert werden, sodass sie Ihrer neuen Codestruktur entsprechen.
Dieselbe Zuordnung wird auch in der Ausgabe des cdk diff Befehls angezeigt, sortiert nach Stapel:
Stack MyStack Resources [-] AWS::S3::Bucket Bucket Bucket1234567 destroy (OR move to WebStack.WebsiteOrigin1234567 via refactoring) [-] AWS::CloudFront::Distribution Distribution Distribution1234567 destroy (OR move to WebStack.Distribution1234567) ... Stack WebStack Resources [+] AWS::S3::Bucket WebsiteOrigin WebsiteOrigin1234567 (OR move from MyStack.Bucket1234567) [+] AWS::CloudFront::Distribution Distribution Distribution1234567 (OR move from MyStack.Distribution1234567) ...
Beginnen Sie mit dem CDK-Refactoring
Erfüllen Sie die folgenden Voraussetzungen, um mit dem Refactoring zu beginnen:
- Starten Sie Ihre Umgebung mit der neuesten Vorlage
-
Für die CDK-Refactoring-Funktion sind neue Berechtigungen im Bootstrap-Stack erforderlich. Um sicherzustellen, dass Sie über die erforderlichen Berechtigungen verfügen, starten Sie Ihre Umgebung mit der neuesten Vorlage:
cdk bootstrapWeitere Informationen zum Bootstrapping finden Sie unter Bootstrapping-Umgebungen für AWS CDK.
- Installieren Sie die neueste CDK-CLI-Version
-
Für das CDK-Refactoring ist eine aktuelle Version der CDK-CLI erforderlich. Um sicherzustellen, dass Sie die neueste Version haben:
npm install -g aws-cdkEine ausführliche Installationsanleitung finden Sie unter Erste Schritte mit dem AWS CDK.
Verwenden Sie Override-Dateien, um Unklarheiten beim Refactoring zu beheben
Die CDK CLI berechnet automatisch alle Ressourcenzuordnungen auf der Grundlage des Vergleichs Ihres Codes mit den bereitgestellten Ressourcen. In den meisten Fällen funktioniert diese automatische Erkennung gut, aber es gibt Situationen, in denen die CLI auf Unklarheiten stößt, die sie nicht alleine lösen kann. Verwenden Sie eine Override-Datei, um eine Anleitung für die CDK-CLI bereitzustellen.
- Erstellen Sie eine Override-Datei, um Unklarheiten zu beheben
-
Eine Override-Datei ist eine JSON-Datei, die Zuordnungen bereitstellt, wenn die CDK-CLI keine Refactoring-Auflösung für Ressourcen ermitteln kann. Die Datei enthält Ressourcenzuordnungen, die nach Umgebungen geordnet sind:
{ "environments": [ { "account": "123456789012", "region": "us-east-2", "resources": { "StackA.OldName": "StackB.NewName", "StackC.Foo": "StackC.Bar" } } ] }In dieser Datei:
-
Das
environmentsArray enthält einen oder mehrere Umgebungseinträge mit Konto und Region. -
In jeder Umgebung enthält das
resourcesObjekt die Zuordnungen. -
Schlüssel stellen die aktuellen Positionen im Format dar.
<stack name>.<logical ID> -
Werte stellen die neuen Standorte im gleichen Format dar.
Um eine Override-Datei mit der CDK-CLI zu verwenden:
cdk refactor --override-file=overrides.json -
Refactoring von Stacks in mehreren Umgebungen
Eine CDK-Anwendung kann mehrere Stacks enthalten, die in verschiedenen Umgebungen (AWS Konten und Regionen) bereitgestellt werden. Wenn beim Refactoring in solchen Anwendungen Ressourcen geschont werden, behandelt die CDK-CLI Umgebungen auf eine bestimmte Art und Weise:
-
Die CLI gruppiert Stacks nach Umgebung und führt das Refactoring in jeder Umgebung separat durch.
-
Sie können beim Refactoring Ressourcen zwischen Stacks verschieben, aber alle an der Verschiebung beteiligten Stacks müssen sich in derselben Umgebung befinden.
-
Der Versuch, Ressourcen zwischen Umgebungen zu verschieben, führt zu einem Fehler.
Dieses Verhalten stellt sicher, dass Ressourcen innerhalb ihres ursprünglichen AWS Kontos und ihrer Region verbleiben. Dies ist notwendig, da CloudFormation Ressourcen nicht physisch über Konto- oder Regionsgrenzen hinweg verschoben werden können.
Wenn Ihre CDK-Anwendung beispielsweise Stacks sowohl für Entwicklungs- als auch für Produktionsumgebungen definiert, wird der Refactoring-Vorgang in jeder Umgebung unabhängig durchgeführt. Ressourcen können innerhalb der Entwicklungsumgebung oder innerhalb der Produktionsumgebung zwischen Stacks verschoben werden, jedoch nicht von der Entwicklung zur Produktion oder umgekehrt.
Umgang mit Ressourcen, die ersetzt werden sollen
Einige CDK-Konstrukte verlassen sich bei ihrem CloudFormation Entwurf auf das Verhalten beim Ersetzen von Ressourcen. Beispielsweise sind die Version Konstrukte von API Gateway Deployment und Lambda so konzipiert, dass sie neue Ressourcen erstellen, wenn sich ihre Eigenschaften ändern.
Nehmen Sie beim Refactoring keine Änderungen vor, die zu einem Austausch von Ressourcen führen sollten. Andernfalls erkennt und bewahrt die CDK-CLI diese Ressourcen möglicherweise auf. Das bedeutet, dass Ressourcen, die für den Austausch vorgesehen sind, getrennt von den Refactoring-Vorgängen behandelt werden müssen.
Gehen Sie wie folgt vor, um Ressourcen, die ersetzt werden sollen, ordnungsgemäß zu verwalten:
-
Stellen Sie zunächst Ihre Anwendung bereit, um diese Ressourcen nach Bedarf zu ersetzen.
-
Führen Sie dann Ihre Refactoring-Operationen separat durch, um Ihren Code neu zu organisieren.
Dieser zweistufige Ansatz stellt sicher, dass Ressourcen, die ersetzt werden sollen, ordnungsgemäß behandelt werden, und ermöglicht es Ihnen gleichzeitig, das CDK-Refactoring für andere Ressourcen zu nutzen.
Allgemeine Überlegungen und Einschränkungen
Beachten Sie beim Schonen von Ressourcen beim CDK-Refactoring die folgenden Überlegungen:
-
Umgebungseinschränkungen: Ressourcen können nur zwischen Stacks in derselben Umgebung verschoben werden. Cross-environment Bewegungen werden nicht unterstützt.
-
Mehrdeutigkeit: Wenn Sie mehrere identische Ressourcen haben, die gleichzeitig umbenannt werden, kann die CDK-CLI möglicherweise nicht automatisch die richtige Zuordnung ermitteln. In diesen Fällen müssen Sie mithilfe einer Override-Datei eine explizite Zuordnung bereitstellen.
-
Bootstrap-Anforderungen: Um beim Refactoring Ressourcen zu schonen, müssen Sie Ihren Bootstrap-Stack mit der neuesten Version aktualisieren, die die erforderlichen Berechtigungen enthält.
-
Bestimmte Konstrukte ausgeschlossen: Einige Konstrukte wie die von API Gateway
Deploymentund Lambda sind auf den Ersatz von RessourcenVersionangewiesen und werden automatisch vom Refactoring ausgeschlossen.
Refactoring mit Pipelines CI/CD
Um die Refactoring-Funktion in CI/CD Pipelines verwenden zu können, müssen Sie in der Lage sein, die CDK-CLI als Teil Ihrer Pipeline auszuführen. Im Folgenden finden Sie einige wichtige Überlegungen zur Integration von Refactoring in Ihren Arbeitsablauf. CI/CD
- Voraussetzungen für die Verwendung von Refactoring in CI/CD
-
Sie müssen in der Lage sein, die CDK-CLI in Ihrer CI/CD Umgebung zu verwenden, um von dieser Funktion zu profitieren.
- Integrieren Sie Refactoring in Ihren Pipeline-Workflow
-
Wenn Sie die CLI für die Bereitstellung in Ihrer CI/CD Pipeline verwenden, sieht Ihr Skript normalerweise so aus:
... cdk deploy <stack filter> ...Wenn Sie Refactoring als Teil des Workflows einbeziehen möchten, finden Sie im Folgenden ein einfaches Beispiel:
... cdk refactor <stack filter> cdk deploy <stack filter> ...Sie können das Refactoring auch als separaten Schritt in Ihrer Pipeline einrichten.
- Umgang mit Refaktorfehlern
-
Beachten Sie, dass
cdk refactordies fehlschlägt, wenn Ihr Code neben dem Refactoring auch tatsächliche Änderungen an den Ressourcen enthält. Da Sie Refactor in Ihrer Pipeline automatisch aufrufen, müssen Sie potenzielle Fehler beheben:# Allow refactoring to fail but continue the pipeline cdk refactor <stack filter> || true cdk deploy <stack filter>Alternativ möchten Sie vielleicht sicherstellen, dass die Bereitstellung erst erfolgt, wenn Sie einen erfolgreichen Refactor ausgeführt haben:
# Only deploy if refactoring succeeds cdk refactor <stack filter> && cdk deploy <stack filter> - Bewährte Methoden für Umgebungen CI/CD
-
So nutzen Sie Refactoring effektiv in CI/CD Pipelines:
-
Trennen Sie das Refactoring von anderen Änderungen: Denken Sie daran, dass Refactoring-Operationen vom Hinzufügen, Löschen oder Ändern von Ressourcen getrennt sein müssen. Erwägen Sie, in Ihrer Pipeline spezielle Commits und Deployments für das Refactoring vorzusehen.
-
Verwenden Sie Override-Dateien angemessen: Machen Sie sich bewusst, dass Override-Dateien von der CDK-CLI nur als Fallback zur Behebung von Mehrdeutigkeiten verwendet werden.
-
In-Pipelines sind nicht erforderlich:
--forceIn nicht interaktiven Umgebungen wie CI/CD Pipelines wird der CDK-Refactoring-Befehl automatisch ausgeführt, ohne dass eine Bestätigung erforderlich ist. Die--forceOption wird nur in interaktiven Umgebungen benötigt.
-
Zugehörige Ressourcen
Informationen zu Optionen und Argumenten für den cdk refactor CDK-CLI-Befehl finden Sie unter
cdk refactor
.
Informationen zu den ersten Schritten mit der refactor Aktion der CDK Toolkit-Bibliothek finden Sie unter Durchführen von programmatischen Aktionen mithilfe der CDK Toolkit-Bibliothek.