View a markdown version of this page

Bewahren Sie beim Refactoring von CDK-Code die bereitgestellten Ressourcen auf - AWS Cloud-Entwicklungskit (AWS CDK) v2

Das ist der AWS CDK v2-Entwicklerhandbuch. Für das ältere CDK v1 wurde am 1. Juni 2022 der Wartungsservice aufgenommen 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.

Bewahren Sie beim Refactoring von CDK-Code die bereitgestellten Ressourcen auf

Wichtig

Das CDK-Refactoring befindet sich in der Vorabversion und kann sich ändern.

Mit AWS Cloud-Entwicklungskit (AWS Beim Refactoring (CDK) können Sie Ihren CDK-Code umgestalten, z. B. Konstrukte umbenennen, Ressourcen zwischen Stapeln 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, AWS CloudFormation identifiziert Ressourcen anhand ihrer logischen IDs. Die 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, AWS CloudFormation interpretiert dies normalerweise als Aufforderung, 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 Datenverlust führen.

Tipp

Sie können proaktiv Änderungen der logischen ID verhindern, wenn Sie Ressourcen in Konstrukte auf höherer Ebene extrahieren. Indem Sie 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 Komponente „Logischer ID-Pfad“.

CDK-Refactoring begegnet dieser Herausforderung durch:

  • Erkennen, wann Ressourcen in Ihrem Code verschoben oder umbenannt wurden.

  • Verwenden AWS CloudFormationRefactoring-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 der CDK-CLI durchführen cdk refactor Befehl oder die CDK Toolkit-Bibliothek refactor Aktion. 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 Führen Sie programmatische Aktionen mithilfe der CDK Toolkit-Bibliothek durch.

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 die folgenden Vorteile für AWS CDK-Entwickler:

  • Verbessern Sie die Codeorganisation — Benennen Sie Konstrukte um und organisieren Sie die Struktur Ihrer CDK-Anwendung neu, ohne dass Ressourcen ersetzt 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 Stapeln, um die verschiedenen Teile Ihrer Anwendung besser zu isolieren.

  • Verhindern Sie den versehentlichen Austausch von Ressourcen — Vermeiden Sie die unbeabsichtigte Wiederherstellung von Ressourcen beim Umbenennen von Konstrukten.

  • Reduzieren Sie Änderungen an Bibliotheken von Drittanbietern — Schützen Sie Ihre Anwendung vor Änderungen der logischen ID 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.

Wie funktioniert das CDK CLI CDK-Refaktor Befehl funktioniert

Wichtig

Sie müssen das angeben --unstable=refactor Option mit allen Befehlen, die diese Funktion verwenden.

Zuerst stellen Sie Ihre erste CDK-Anwendung bereit, um die Basisressourcen in Ihrem AWS Konto. 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 nach Ihrer Bestätigung AWS CloudFormationDie Refactoring-API, um die logischen IDs von 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. Dabei werden Ressourcen identifiziert, die funktionell gleichwertig sind, aber unterschiedliche Pfade im Konstruktbaum haben. Wenn Ressourcen hinzugefügt, gelöscht oder geändert werden, wird der Refactoring-Vorgang mit einer Fehlermeldung abgelehnt.

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 der CDK-CLI cdk refactor Befehl.

Unsere CDK-Beispielanwendung besteht aus einem einzelnen Stack, der einen S3-Bucket enthält, einen CloudFront Verteilung und eine Lambda-Funktion. 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:

  1. Benennen Sie den Bucket um von Bucket zum aussagekräftigeren WebsiteOrigin.

  2. Verschieben Sie den Eimer und die Verteilung in ein neues WebStack stapeln.

Nach dem Refactoring würde der Konstruktbaum so 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 CDK-Refactoring würden diese Änderungen dazu führen AWS CloudFormation um neue Ressourcen zu erstellen und die alten zu löschen, da sich die logischen IDs ändern würden:

  • MyStack/Bucket/Resource würde werden WebStack/WebsiteOrigin/Resource.

  • MyStack/Distribution/Resource würde werden WebStack/Distribution/Resource.

Beim CDK-Refactoring erkennt die CDK-CLI diese Pfadänderungen und verwendet AWS CloudFormationbietet Refactoring-Funktionen, um die zugrunde liegenden Ressourcen zu schonen. Wenn du rennst cdk refactor, die CLI zeigt Ihnen 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 bestätigen, indem Sie Folgendes eingeben y, die CDK-CLI zeigt 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 von angezeigt cdk diff Befehl, 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 bootstrap

Weitere 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-cdk

Eine 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 environments Array enthält einen oder mehrere Umgebungseinträge mit Konto und Region.

  • In jeder Umgebung ist resources Objekt enthält die Zuordnungen.

  • Schlüssel stellen die aktuellen Positionen im Format dar <stack name>.<logical ID>.

  • Die 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 bereitgestellt werden (AWS Konten und Regionen). 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 die Ressourcen in ihrem ursprünglichen Zustand bleiben AWS Konto und Region, was notwendig ist, weil CloudFormation Ressourcen können nicht physisch über Konto- oder Regionsgrenzen hinweg verschoben werden.

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 basieren auf CloudFormationdas Verhalten beim Ersetzen von Ressourcen als Teil ihres Designs. Zum Beispiel das von API Gateway Deployment und Lambdas Version Konstrukte sind 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:

  1. Stellen Sie zunächst Ihre Anwendung bereit, um diese Ressourcen nach Bedarf zu ersetzen.

  2. 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:

  • Einschränkungen in der Umgebung: Ressourcen können nur zwischen Stapeln 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 Deployment und Lambdas Version verlassen sich auf den Austausch von Ressourcen und werden automatisch vom Refactoring ausgeschlossen.

Refactoring mit CI/CD Rohrleitungen

Um die Refactoring-Funktion zu verwenden in CI/CD Pipelines, Sie müssen 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 Ihre CI/CD Arbeitsablauf.

Voraussetzungen für die Verwendung von Refactoring in CI/CD

Sie müssen in der Lage sein, die CDK-CLI in Ihrem zu verwenden CI/CD Umgebung, um von dieser Funktion zu profitieren.

Integrieren Sie Refactoring in Ihren Pipeline-Workflow

Wenn Sie die CLI für die Bereitstellung in Ihrem verwenden CI/CD Pipeline, Ihr Skript sieht 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

Seien Sie sich dessen bewusst cdk refactor schlägt fehl, 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 CI/CD Umgebungen

Um Refactoring effektiv zu nutzen in CI/CD Rohrleitungen:

  • 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 Bereitstellungen für das Refactoring vorzusehen.

  • Verwenden Sie Override-Dateien entsprechend: Machen Sie sich bewusst, dass Override-Dateien von der CDK-CLI nur als Fallback zur Behebung von Mehrdeutigkeiten verwendet werden.

  • Es ist nicht nötig für --force in Rohrleitungen: In nicht interaktiven Umgebungen wie CI/CD Bei Pipelines wird der CDK-Refactor-Befehl automatisch ausgeführt, ohne dass eine Bestätigung erforderlich ist. Die --force Die Option wird nur in interaktiven Umgebungen benötigt.

Zugehörige Ressourcen

Für Informationen zu Optionen und Argumenten für die CDK-CLI cdk refactor Befehl finden Sie unter cdk refactor .

Um mit der CDK Toolkit Library zu beginnen refactor Aktion, siehe Führen Sie programmatische Aktionen mithilfe der CDK Toolkit-Bibliothek durch.