部署 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 應用程式:

  • 設定的安全認證CDKCLI。

  • 引導您的 AWS 環境。

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

  • 開發您的CDK應用程式。

設定安全認證

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

引導您的 AWS 環境

部署永遠與一或多個 AWS 環境相關聯。在部署之前,必須先啟動載入環境。啟動安裝會在您的環境中佈建資源,以CDK用來執行和管理部署。這些資源包括 Amazon Simple Storage Service (Amazon S3) 儲存貯體和 Amazon 彈性容器登錄 (AmazonECR) 儲存庫,用於存放和管理資產。這些資源還包括用於在開發和部署期間提供權限的 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應用合成

若要執行合成,我們建議您使用CDKCLIcdk synth指令。該cdk deploy命令也將在啟動部署之前執行合成。但是,通過使用cdk synth,您可以在啟動部署之前驗證CDK應用程序並 catch 錯誤。

合成行為由您為堆疊配置的CDK堆疊合成器決定。如果您未配置合成器,DefaultStackSynthesizer將使用。您還可以配置和自定義合成以滿足您的需求。如需說明,請參閱 設定和自訂CDK堆疊合成

為了讓您的合成 CloudFormation 範本成功部署到您的環境中,它必須與啟動載入環境的方式相容。例如,您的 CloudFormation 範本必須指定要將資產部署到的正確 Amazon S3 儲存貯體。如果您使用默認的引導方法來啟動您的環境,則默認的堆棧合成器將起作用。如果您自訂CDK行為 (例如自訂啟動載入或合成),CDK部署行為可能會有所不同。

應用生命週期

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

構造(或初始化)

您的代碼實例化所有定義的結構,然後將它們鏈接在一起。在這個階段,所有的構造(應用程序,棧和它們的子構造)被實例化,並運行構造函數鏈。您的大多數應用程序代碼都在此階段運行。

準備

已實作此prepare方法的所有建構都會參與最後一輪修改,以設定其最終狀態。準備階段會自動發生。身為使用者,您看不到此階段的任何意見反應。很少需要使用「準備」掛鉤,通常不建議使用。在此階段變更建構樹時要非常小心,因為作業的順序可能會影響行為。

在此階段中,建構樹狀結構之後,也會套用您已設定的任何方面

驗證

所有實作validate方法的建構都可以驗證自己,以確保它們處於正確部署的狀態。您將收到此階段發生的任何驗證失敗的通知。一般來說,我們建議盡快執行驗證(通常只要你得到一些輸入),並儘早拋出異常。儘早執行驗證可提高可靠性,因為堆棧跟踪將更加準確,並確保您的代碼可以繼續安全地執行。

合成

這是運行CDK應用程序的最後階段。它是由調用觸發的app.synth(),它遍歷構造樹並在所有構造上調用該synthesize方法。實作的建構可synthesize以參與合成,並為產生的雲端組件產生部署成品。這些成品包括 CloudFormation 範本、 AWS Lambda 應用程式服務包、檔案和Docker影像資產,以及其他部署成品。在大多數情況下,您不需要實現該synthesize方法。

執行應用程式

CDKCLI需要知道如何運行您的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" }

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

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

所以此 executable 命令的一部分表示應該運行以執行應CDK用程序的命令。使用引號,如圖所示,因為這些命令包含空格。所以此 cdk-command 是一個子命令,synth或者deploy告訴你想要用CDKCLI你的應用程序做什麼。請按照該子命令所需的任何其他選項進行操作。

也CDKCLI可以直接與已經合成的雲端組件互動。要做到這一點,傳遞雲程序集存儲在其中的目錄--app。下列範例會列出儲存在下方的雲端組合中定義的堆疊./my-cloud-assembly

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

雲端組件

呼叫app.synth()是指示從應用程 AWS CDK 式合成雲端組件的原因。通常您不會直接與雲端組件互動。它們是包含將應用程序部署到雲環境所需的一切文件。例如,它包含應用程序中每個堆棧的 AWS CloudFormation 模板。它還包括您在應用程序中引用的任何文件資產或Docker圖像的副本。

如需如何格式化雲端組合的詳細資訊,請參閱雲端組合規格。

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

部署您的應用程式

若要部署應用程式,建議您使用CDKCLIcdk 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 模塊或自定義資源示例。您也可以將觸發器模組設定為在部署期間執行程式碼。

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

部署權限

在執行部署之前,必須先建立權限。下圖說明使用預設啟動載入程序和堆疊合成器時,預設部署期間所使用的權限:

預設 AWS CDK 部署程序的流程圖。
演員初始化部署

部署由實行者啟動,使用CDKCLI。演員可以是一個人,也可以是諸如此類的服務 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 模板,以佈建您的資源。