這是 AWS CDK v2 開發人員指南。較舊的 CDK v1 已於 2022 年 6 月 1 日進入維護,並於 2023 年 6 月 1 日結束支援。
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
您可以使用 AWS CDK 命令列介面 (AWS CDK CLI) 或修改和部署 AWS Cloud Development Kit (AWS CDK) 引導範本來自訂 AWS CloudFormation 引導。
如需引導簡介,請參閱AWS CDK 引導。
使用 CDKCLI 自訂引導
以下是如何使用 CDK 自訂引導的一些範例CLI。如需所有cdk bootstrap
選項的清單,請參閱cdk bootstrap。
- 覆寫 Amazon S3 儲存貯體的名稱
-
使用
--bootstrap-bucket-name
選項覆寫預設的 Amazon S3 儲存貯體名稱。這可能需要您修改範本合成。如需詳細資訊,請參閱自訂 CDK 堆疊合成。 - 修改 Amazon S3 儲存貯體的伺服器端加密金鑰
-
根據預設,引導堆疊中的 Amazon S3 儲存貯體設定為使用受 AWS 管金鑰進行伺服器端加密。若要使用現有的客戶受管金鑰,請使用
--bootstrap-kms-key-id
選項,並提供值供 AWS Key Management Service (AWS KMS) 金鑰使用。如果您想要對加密金鑰進行更多控制,請提供--bootstrap-customer-key
以使用客戶受管金鑰。 - 將受管政策連接至 擔任的部署角色 AWS CloudFormation
-
根據預設,堆疊會使用
AdministratorAccess
政策,以完整的管理員許可進行部署。若要使用您自己的 受管政策,請使用--cloudformation-execution-policies
選項,並提供 受管政策ARNs 以連接至部署角色。若要提供多個政策,請傳遞一個字串,以逗號分隔:
$
cdk bootstrap --cloudformation-execution-policies
"arn:aws:iam::aws:policy/AWSLambda_FullAccess,arn:aws:iam::aws:policy/AWSCodeDeployFullAccess"
為了避免部署失敗,請確定您指定的政策足以讓您對要引導的環境執行任何部署。
- 變更新增至引導堆疊中資源名稱的限定詞
-
根據預設,
hnb659fds
限定詞會新增至引導堆疊中資源的實體 ID。若要變更此值,請使用--qualifier
選項。此修改在相同環境中佈建多個引導堆疊時非常有用,以避免名稱衝突。
變更限定詞旨在隔離 CDK 本身自動測試之間的名稱。除非您可以非常精確地將授予 CloudFormation 執行角色的 IAM 許可範圍縮小,否則在單一帳戶中具有兩個不同的引導堆疊,沒有許可隔離的優勢。因此,通常不需要變更此值。
當您變更限定詞時,您的 CDK 應用程式必須將變更的值傳遞給堆疊合成器。如需詳細資訊,請參閱自訂 CDK 堆疊合成。
-
使用 格式的
--tags
選項KEY=VALUE
,將 CloudFormation 標籤新增至您的引導堆疊。 - 指定可部署到要引導環境的其他 AWS 帳戶 。
-
使用
--trust
選項提供 AWS 帳戶 允許部署到要引導環境的其他 。根據預設,執行引導的帳戶一律會受信任。當您從Pipeline另一個環境引導 CDK 部署到的環境時,此選項非常有用。
使用此選項時,您還必須提供
--cloudformation-execution-policies
。若要將信任的帳戶新增至現有的引導堆疊,您必須指定要信任的所有帳戶,包括您先前可能提供的帳戶。如果您只提供新帳戶來信任,先前信任的帳戶將被移除。
以下是信任兩個帳戶的範例:
$
cdk bootstrap
⏳ Bootstrapping environment aws://123456789012/us-west-2... Trusted accounts for deployment: 234567890123, 987654321098 Trusted accounts for lookup: (none) Execution policies: arn:aws:iam::aws:policy/AdministratorAccess CDKToolkit: creating CloudFormation changeset... ✅ Environment aws://123456789012/us-west-2 bootstrapped.aws://123456789012/us-west-2
--trust234567890123
--trust987654321098
--cloudformation-execution-policiesarn:aws:iam::aws:policy/AdministratorAccess
- 指定可在要引導的環境中查詢資訊的其他 AWS 帳戶 。
-
使用
--trust-for-lookup
選項來指定 AWS 帳戶 ,允許 從要引導的環境查詢內容資訊。此選項有助於提供帳戶合成要部署到環境中的堆疊的許可,而不需要實際授予他們直接部署這些堆疊的許可。 - 啟用引導堆疊的終止保護
-
如果刪除引導堆疊,則最初在環境中佈建 AWS 的資源也會遭到刪除。環境開機後,建議您不要刪除並重新建立環境的開機堆疊,除非您刻意這麼做。反之,請再次執行
cdk bootstrap
命令,嘗試將引導堆疊更新為新版本。使用
--termination-protection
選項來管理引導堆疊的終止保護設定。透過啟用終止保護,您可以防止不小心刪除引導堆疊及其資源。如果您使用 CDK,這尤其重要,Pipelines因為如果您不小心刪除引導堆疊,則沒有一般復原選項。啟用終止保護後,您可以使用 AWS CLI 或 AWS CloudFormation 主控台進行驗證。
啟用終止保護
-
執行下列命令,在新的或現有的引導堆疊上啟用終止保護:
$
cdk bootstrap --termination-protection
-
使用 AWS CLI 或 CloudFormation 主控台進行驗證。以下是使用 AWS CLI的範例。如果您修改了引導堆疊名稱,請將 取代
CDKToolkit
為您的堆疊名稱:$
aws cloudformation describe-stacks --stack-name
" trueCDKToolkit
--query "Stacks[0].EnableTerminationProtection
-
修改預設引導範本
當您需要比 CDK CLI提供的自訂更多時,您可以視需要修改引導範本。然後,部署 範本以引導您的環境。
修改和部署預設引導範本
-
使用
--show-template
選項取得預設引導範本。根據預設,CDK CLI會在終端機視窗中輸出範本。您可以修改 CDK CLI命令,將範本儲存至本機機器。以下是範例:$
cdk bootstrap --show-template
> my-bootstrap-template.yaml
-
視需要修改引導範本。您所做的任何變更都應該遵守引導範本合約。如需引導範本合約的詳細資訊,請參閱遵循引導合約。
若要確保稍後
cdk bootstrap
使用預設範本執行的人員不會意外覆寫您的自訂,請變更BootstrapVariant
範本參數的預設值。CDK CLI只允許使用與目前部署的範本具有相同BootstrapVariant
和或更高版本的範本覆寫引導堆疊。 -
使用您偏好的部署方法 AWS CloudFormation 部署修改後的範本。以下是使用 CDK 的範例CLI:
$
cdk bootstrap --template
my-bootstrap-template.yaml
遵循引導合約
若要讓 CDK 應用程式正確部署,合成期間產生的 CloudFormation 範本必須正確指定在引導期間建立的資源。這些資源通常稱為引導資源。引導會在您的 AWS 環境中建立 資源,供 用來 AWS CDK 執行部署和管理應用程式資產。合成會從應用程式中的每個 CDK 堆疊產生 CloudFormation 範本。這些範本不僅會定義要從您的應用程式佈建 AWS 的資源。他們也會指定要在部署期間使用的引導資源。
在合成期間,CDK CLI 並不知道您的 AWS 環境如何開機。反之,CDK 會根據您設定的合成器CLI產生 CloudFormation 範本。因此,當您自訂引導時,您可能需要自訂合成。如需自訂合成的說明,請參閱 自訂 CDK 堆疊合成。目的是確保您的合成 CloudFormation 範本與引導環境相容。此相容性稱為引導合約。
自訂堆疊合成最簡單的方法是修改Stack
執行個體中的 DefaultStackSynthesizer
類別。如果您需要超出此類別提供的自訂,您可以將自己的合成器寫入實作的類別 IStackSynthesizer
(可能衍生自 DefaultStackSynthesizer
)。
當您自訂引導時,請遵循引導範本合約,以保持與 的相容性DefaultStackSynthesizer
。如果您修改引導範本合約以外的引導,則需要撰寫自己的合成器。
版本控制
引導範本應包含資源,以建立具有已知名稱和輸出的 Amazon EC2 Systems Manager (SSM) 參數,以反映範本的版本:
Resources:
CdkBootstrapVersion:
Type: AWS::SSM::Parameter
Properties:
Type: String
Name:
Fn::Sub: '/cdk-bootstrap/${Qualifier}/version'
Value: 4
Outputs:
BootstrapVersion:
Value:
Fn::GetAtt: [CdkBootstrapVersion, Value]
角色
DefaultStackSynthesizer
需要五個 IAM 角色用於五個不同的用途。如果您不使用預設角色,則必須在DefaultStackSynthesizer
物件中指定 IAM 角色 ARNs。角色如下所示:
-
部署角色由 CDK 擔任,CLI並由 AWS CodePipeline 部署到 環境。其
AssumeRolePolicy
控制誰可以部署到環境中。在 範本中,您可以查看此角色所需的許可。 -
CDK 會擔任查詢角色CLI,以在 環境中執行內容查詢。其
AssumeRolePolicy
控制誰可以部署到環境中。您可以在 範本中查看此角色所需的許可。 -
檔案發佈角色和映像發佈角色由 CDK CLI和 AWS CodeBuild 專案擔任,以將資產發佈至環境。它們分別用於寫入 Amazon S3 儲存貯體和 Amazon ECR 儲存庫。這些角色需要這些資源的寫入存取權。
-
AWS CloudFormation 執行角色會傳遞至 AWS CloudFormation 以執行實際部署。其許可是部署將執行的許可。許可會以參數的形式傳遞至堆疊,列出受管政策 ARNs。
輸出
CDK CLI要求開機堆疊上存在下列 CloudFormation 輸出:
-
BucketName
– 檔案資產儲存貯體的名稱。 -
BucketDomainName
– 網域名稱格式的檔案資產儲存貯體。 -
BootstrapVersion
– 引導堆疊的目前版本。
範本歷史記錄
引導範本會進行版本化,並隨著 AWS CDK 本身隨著時間演進。如果您提供自己的引導範本,請使用正式預設範本來保持最新狀態。您希望確保範本繼續適用於所有 CDK 功能。如需詳細資訊,請參閱引導範本版本歷史記錄。