部署 AWS CDK 應用程式 - AWS Cloud Development Kit (AWS CDK) v2

這是 AWS CDK v2 開發人員指南。較舊的 CDK v1 已於 2022 年 6 月 1 日進入維護,並於 2023 年 6 月 1 日結束支援。

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

部署 AWS CDK 應用程式

AWS Cloud Development Kit (AWS CDK) 部署是佈建基礎設施的程序 AWS。

AWS CDK 部署的運作方式

AWS CDK 會使用 AWS CloudFormation 服務來執行部署。部署之前,您會合成CDK堆疊。這會為應用程式中的每個CDK堆疊建立 CloudFormation 範本和部署成品。部署是從本機開發機器或從持續整合和持續交付 (CI/CD) 環境啟動。在部署期間,資產會上傳至已啟動的資源,並將CloudFormation 範本提交至 CloudFormation 以佈建您的 AWS 資源。

若要讓部署成功,需要下列項目:

  • AWS CDK 命令列界面 (AWS CDK CLI) 必須具備有效的許可。

  • 必須引導 AWS 環境。

  • 必須 AWS CDK 知道要上傳資產的引導資源。

CDK 部署的先決條件

在部署 AWS CDK 應用程式之前,您必須先完成下列操作:

  • 設定 的安全登入資料 CDK CLI.

  • 引導您的 AWS 環境。

  • 為每個CDK堆疊設定 AWS 環境。

  • 開發您的CDK應用程式。

設定安全登入資料

使用 CDK CLI 若要與 互動 AWS,您必須在本機電腦上設定安全登入資料。如需說明,請參閱 設定安全登入資料 AWS CDKCLI

引導您的 AWS 環境

部署一律與一或多個 AWS 環境相關聯。您必須先啟動環境,才能部署環境。引導會在您的環境中佈建 CDK用來執行和管理部署的資源。這些資源包括 Amazon Simple Storage Service (Amazon S3) 儲存貯體和 Amazon Elastic Container Registry (Amazon ECR) 儲存庫,用於存放和管理資產。這些資源也包含 AWS Identity and Access Management (IAM) 角色,用於在開發和部署期間提供許可。

我們建議您使用 AWS CDK 命令列界面 (AWS CDK CLI) cdk bootstrap命令來引導您的環境。您可以自訂引導,或視需要在環境中手動建立這些資源。如需說明,請參閱 引導您的環境以搭配 使用 AWS CDK

設定 AWS 環境

每個CDK堆疊都必須與環境建立關聯,以判斷堆疊部署到何處。如需說明,請參閱 設定與 搭配使用的環境 AWS CDK

開發您的CDK應用程式

在CDK專案中,您可以建立和開發您的CDK應用程式。在您的應用程式中,您可以建立一或多個CDK堆疊。在堆疊中,您可以從 AWS 建構程式庫匯入並使用建構,以定義您的基礎設施。在部署之前,您的CDK應用程式必須至少包含一個堆疊。

CDK 應用程式合成

若要執行合成,建議您使用 CDK CLI cdk synth 命令。cdk deploy 命令也會在啟動部署之前執行合成。不過,透過使用 cdk synth,您可以在啟動部署之前驗證CDK應用程式並擷取錯誤。

合成行為取決於您為堆疊設定的堆疊合成器。 CDK如果您未設定合成器,DefaultStackSynthesizer則會使用 。您也可以設定和自訂合成,以符合您的需求。如需說明,請參閱 設定和執行CDK堆疊合成

若要讓您的合成 CloudFormation 範本成功部署到您的環境中,它必須與環境的引導方式相容。例如,您的 CloudFormation 範本必須指定要部署資產的正確 Amazon S3 儲存貯體。如果您使用預設的引導環境方法,預設堆疊合成器將會運作。如果您自訂CDK行為,例如自訂引導或合成,CDK部署行為可能會有所不同。

應用程式生命週期

當您執行合成時,CDK應用程式會執行下列階段,稱為應用程式生命週期

建構 (或初始化)

您的程式碼會執行個體化所有定義的建構,然後將它們連結在一起。在此階段,所有建構 (應用程式、堆疊及其子建構) 都會進行執行個體化,並執行建構器鏈。您大部分的應用程式程式碼都會在此階段執行。

準備

所有已實作該prepare方法的建構都參與了最後一輪修改,以設定其最終狀態。準備階段會自動發生。身為使用者,您不會看到此階段的任何意見回饋。很少需要使用「準備」勾點,通常不建議使用。在此階段中將建構樹靜音時請特別小心,因為操作順序可能會影響行為。

在此階段,建置建構樹之後,您設定的任何層面也會套用。

驗證

所有已實作 validate方法的建構體都可以自行驗證,以確保其處於將正確部署的狀態。您會在此階段收到任何驗證失敗的通知。一般而言,我們建議盡快執行驗證 (通常是在您取得一些輸入時盡快執行),並儘早擲出例外狀況。儘早執行驗證可改善可靠性,因為堆疊追蹤會更準確,並確保您的程式碼可以繼續安全地執行。

合成

這是執行CDK應用程式的最後一個階段。它由呼叫 觸發app.synth(),它會周遊建構樹並在所有建構上叫用 synthesize方法。實作 的建構synthesize可以參與合成,並為產生的雲端組件產生部署成品。這些成品包括 CloudFormation 範本、 AWS Lambda 應用程式套件、檔案和 Docker 映像資產和其他部署成品。在大多數情況下,您不需要實作 synthesize方法。

執行您的應用程式

CDK CLI 需要知道如何執行您的CDK應用程式。如果您使用 cdk init命令從範本建立專案,則應用程式的 cdk.json 檔案會包含 app金鑰。此金鑰會指定應用程式寫入語言的必要命令。如果您的語言需要編譯,命令列會在自動執行應用程式之前執行此步驟。

TypeScript
{ "app": "npx ts-node --prefer-ts-exts bin/my-app.ts" }
JavaScript
{ "app": "node bin/my-app.js" }
Python
{ "app": "python app.py" }
Java
{ "app": "mvn -e -q compile exec:java" }
C#
{ "app": "dotnet run -p src/MyApp/MyApp.csproj" }
Go
{ "app": "go mod download && go run my-app.go" }

如果您未使用 建立專案 CDK CLI,或者,如果您想要覆寫 中提供的命令列cdk.json,您可以在執行cdk命令時提供 --app選項。

$ cdk --app 'executable' cdk-command ...

命令的 executable部分指出執行CDK應用程式時應執行的命令。使用如下所示的引號,因為這類命令包含空格。cdk-command 是類似 synth或 的子命令deploy,可告知 CDK CLI 您想要使用應用程式執行的操作。按照此操作,使用該子命令所需的任何其他選項。

CDK CLI 也可以直接與已合成的雲端組件互動。若要這麼做,請傳遞雲端組件存放在 中的目錄--app。下列範例列出存放在 下的雲端組件中定義的堆疊./my-cloud-assembly

$ cdk --app ./my-cloud-assembly ls

雲端組件

對 的呼叫app.synth()會指示 AWS CDK 合成來自應用程式的雲端組件。一般而言,您不會直接與雲端組件互動。這些檔案包含將應用程式部署至雲端環境所需的一切。例如,它包含應用程式中每個堆疊的 AWS CloudFormation 範本。它還包括任何檔案資產或 Docker 您在應用程式中參考的映像。

如需雲端組件格式化方式的詳細資訊,請參閱雲端組件規格

若要與 AWS CDK 應用程式建立的雲端組件互動,您通常會使用 AWS CDK CLI。 不過,任何可以讀取雲端組合格式的工具都可以用來部署您的應用程式。

部署您的應用程式

若要部署應用程式,建議您使用 CDK CLI cdk deploy 命令來啟動部署或設定自動化部署。

當您執行 時cdk deploy, CDKCLI 會啟動 cdk synth以準備部署。下圖說明部署內容中的應用程式生命週期:

AWS CDK 應用程式生命週期的流程圖。

在部署期間, CDKCLI 接受合成產生的雲端組件,並將其部署到 AWS 環境。資產會上傳至 Amazon S3 和 Amazon,ECR並將 CloudFormation 範本提交至 AWS CloudFormation 以進行部署。

在 AWS CloudFormation 部署階段開始時,您的CDK應用程式已完成執行並結束。這具有以下含義:

  • CDK 應用程式無法回應部署期間發生的事件,例如正在建立的資源或整個部署完成。若要在部署階段執行程式碼,您必須將程式碼插入 AWS CloudFormation 範本做為自訂資源。如需將自訂資源新增至應用程式的詳細資訊,請參閱 AWS CloudFormation 模組自訂資源範例。您也可以設定 Triggers 模組在部署期間執行程式碼。

  • CDK 應用程式可能需要使用執行時無法得知的值。例如,如果 AWS CDK 應用程式使用自動產生的名稱定義 Amazon S3 儲存貯體,而您擷取 bucket.bucketName(Python:bucket_name) 屬性,則該值不是部署儲存貯體的名稱。反之,您會取得Token值。若要判斷特定值是否可用,請呼叫 cdk.isUnresolved(value)(Python:is_unresolved)。如需詳細資訊,請參閱 權杖和 AWS CDK

部署許可

必須先建立許可,才能執行部署。下圖說明使用預設引導程序和堆疊合成器時,預設部署期間使用的許可:

預設 AWS CDK 部署程序的流程圖。
演員啟動部署

部署是由演員使用 啟動 CDK CLI。 演員可以是個人,也可以是 等服務 AWS CodePipeline。

如有必要, CDKCLI 當您執行 cdk synth時, 會執行 cdk deploy。在合成期間, AWS 身分會假設 LookupRole會在環境中 AWS 執行內容查詢。

已建立許可

首先,演員的安全登入資料用於對 進行身分驗證, AWS 並取得程序中的第一個IAM身分。對於人類演員,安全登入資料的設定和取得方式取決於您或您的組織管理使用者的方式。如需詳細資訊,請參閱設定安全登入資料 AWS CDKCLI。對於服務演員,例如 CodePipeline,擔任和使用IAM執行角色。

接下來,在引導期間在您的 AWS 環境中建立IAM的角色會用來建立許可,以執行部署所需的動作。如需這些角色及其授予許可的詳細資訊,請參閱 IAM 在引導期間建立的角色。此程序包括下列項目:

  • AWS 身分會擔任DeploymentActionRole角色並將CloudFormationExecutionRole角色傳遞給 CloudFormation,確保 在您的 AWS 環境中執行任何動作時, CloudFormation 會擔任該角色。 DeploymentActionRole會授予許可,以在您的環境中執行部署,並CloudFormationExecutionRole決定 CloudFormation 可執行的動作。

  • AWS 身分會假設 FilePublishingRole,這會決定可以在引導期間建立的 Amazon S3 儲存貯體上執行的動作。

  • AWS 身分會假設 ImagePublishingRole,這會決定可以在引導期間建立的 Amazon ECR儲存庫上執行的動作。

  • 如有必要, AWS 身分會假設LookupRole在 AWS 環境中執行內容查詢。此動作也可以在範本合成期間執行。

部署已執行

在部署期間, CDKCLI 會讀取引導版本參數以確認引導版本編號。 AWS CloudFormation 也會在部署時間讀取此參數以確認。如果部署工作流程中的許可有效,則會執行部署。資產會上傳至引導的資源,而合成時產生的 CloudFormation 範本會使用 CloudFormation 服務做為 CloudFormation 堆疊來部署,以佈建您的資源。