cdk deploy - AWS Cloud Development Kit (AWS CDK) V2

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

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

cdk deploy

在您的 AWS 環境中部署一或多個 AWS CDK 堆疊。

在部署過程中,CDK CLI 將輸出進度指示器,類似於從 AWS CloudFormation 控制台觀察到的內容。

如果 AWS 環境未啟動載入,則只有沒有資產且合成範本低於 51,200 位元組的堆疊才能成功部署。

用量

$ cdk deploy <arguments> <options>

引數

CDK 堆疊邏輯識別碼

要部署的應用程式中 CDK 堆疊的邏輯 ID。

類型:字串

必要:否

選項

如需與所有 CDK CLI 指令搭配使用的全域選項清單,請參閱〈〉全域選項

--all BOOLEAN

在您的 CDK 應用程式中部署所有堆疊。

預設值false

--asset-parallelism BOOLEAN

指定是否要 parallel 建置和發佈資產。

--asset-prebuild BOOLEAN

指定是否在部署第一個堆疊之前建置所有資產。這個選項對於失敗的Docker組建很有用。

預設值true

--build-exclude, -E ARRAY

請勿使用指定 ID 重建資產。

此選項可以在單個命令中多次指定。

預設值[]

--change-set-name STRING

要建立之 AWS CloudFormation 變更集的名稱。

此選項與不相容--method='direct'

--concurrency NUMBER

並行部署多個堆疊,parallel 時考量堆疊間的相依性。使用此選項可加快部署速度。您仍然必須考慮 AWS CloudFormation 和其他 AWS 帳戶 速率限制。

提供一個數字,以指定要執行的同時部署數目上限 (相依性允許)。

預設值1

--exclusively, -e BOOLEAN

僅部署請求的堆棧,不包括依賴關係。

--force, -f BOOLEAN

當您部署更新現有堆疊時,CDK CLI 會將已部署堆疊的範本和標籤與即將部署的堆疊進行比較。如果未偵測到任何變更,CDK CLI 會略過部署。

若要覆寫此行為並始終部署堆疊 (即使未偵測到任何變更),請使用此選項。

預設值false

--help, -h BOOLEAN

顯示指令的指cdk deploy令參考資訊。

--hotswap BOOLEAN

HetSwap 部署可加快開發速度。如果可能,此選項會嘗試執行更快速的 hotswap 部署。例如,如果您在 CDK 應用程式中修改 Lambda 函數的程式碼,CDK CLI 將直接透過服務 API 更新資源,而不是執行部署。 CloudFormation

如果 CDK CLI 偵測到不支援熱抽換的變更,則會忽略這些變更並顯示訊息。如果您偏好執行完整 CloudFormation 部署做為後退,請--hotswap-fallback改用。

CDK CLI 會使用您目前的 AWS 認證來執行 API 呼叫。即使@aws-cdk/core:newStyleStackSynthesis功能標誌設定為,它也不會假設您的啟動程序堆疊中的角色true。這些角色沒有直接更新 AWS 資源的必要權限,而不使用 CloudFormation. 因此,請確定您的登入資料與執行 hotswap 部署的堆疊相同 AWS 帳戶 ,並且它們具有更新資源所需的 IAM 許可。

下列變更目前支援熱抽取功能:

  • Lambda 函數的程式碼資產 (包括Docker影像和內嵌程式碼)、標籤變更和組態變更 (僅支援描述和環境變數)。

  • Lambda 版本和別名變更。

  • AWS Step Functions 狀態機器的定義更改。

  • Amazon ECS 服務的容器資產變更。

  • Amazon S3 儲存貯體部署的網站資產變更。

  • AWS CodeBuild 項目的來源和環境變化。

  • AWS AppSync 解析器和函數的 VTL 映射模板更改。

  • AWS AppSync GraphQLAPI 的結構描述變更。

某些 CloudFormation 內建函式的使用可做為熱開發部署的一部分受到支援。其中包含:

  • Ref

  • Fn::GetAtt— 僅部分支援。如需支援的資源和屬性,請參閱此實作

  • Fn::ImportValue

  • Fn::Join

  • Fn::Select

  • Fn::Split

  • Fn::Sub

此選項也與巢狀堆疊相容。

注意
  • 此選項故意引入 CloudFormation 堆疊中的漂移,以加快部署速度。出於這個原因,只將其用於開發目的。請勿將此選項用於生產部署。

  • 此選項被認為是實驗性的,future 可能會有突破性的變化。

  • 某些參數的預設值可能與 hotswap 參數不同。例如,Amazon ECS 服務的最低健康狀0態百分比目前設定為。如果發生此情況,請相應地檢閱來源。

預設值false

--hotswap-fallback BOOLEAN

此選項類似於--hotswap。不同之處在於,如果檢測到需要更改,則--hotswap-fallback將退回以執行完整 CloudFormation 部署。

如需有關此選項的詳細資訊,請參閱 --hotswap

預設值false

--ignore-no-stacks BOOLEAN

即使您的 CDK 應用程式不包含任何堆疊,也要執行部署。

此選項在下列情況下很有用:您可能擁有具有多個環境的應用程式,例如devprod。開始開發時,您的 prod 應用程序可能沒有任何資源,或者資源可能會被註釋掉。這將導致部署錯誤,並顯示一條消息,指出該應用程序沒有堆棧。用--ignore-no-stacks於略過此錯誤。

預設值false

--logs BOOLEAN

在標準輸出 (stdout) 中顯示來自所選堆疊中所有資源的所有事件的 Amazon CloudWatch 日誌。

此選項僅與相容--watch

預設值true

--method, -m STRING

設定執行部署的方法。

  • change-set— 預設方法。CDK 會使用將要部署的變更CLI建立變 CloudFormation 更集,然後執行部署。

  • direct— 請勿建立變更集。請立即套用變更。這通常比建立變更集快,但是您會遺失進度資訊。

  • prepare-change-set— 建立變更集,但不執行部署。如果您有可檢查變更集的外部工具,或者您具有變更集的核准程序,則此選項非常有用。

有效值change-setdirectprepare-change-set

預設值change-set

--notification-arns ARRAY

CloudFormation 將通知堆疊相關事件的 Amazon SNS 主題的 ARN。

--outputs-file, -O STRING

將部署中堆疊輸出寫入的路徑。

部署後,堆棧輸出將以 JSON 格式寫入指定的輸出文件。

您可以在專cdk.json案的檔案或本機開發電腦~/.cdk.json上設定此選項:

{ "app": "npx ts-node bin/myproject.ts", // ... "outputsFile": "outputs.json" }

如果部署了多個堆疊,則輸出會寫入相同的輸出檔案,並依代表堆疊名稱的索引鍵進行組織。

--parameters ARRAY

CloudFormation 在部署期間將其他參數傳遞給。

此選項接受以下格式的陣列:STACK:KEY=VALUE

  • STACK— 要與參數相關聯的堆疊名稱。

  • KEY— 堆疊中的參數名稱。

  • VALUE— 要在部署時傳遞的值。

如果未提供堆疊名稱,或*是以堆疊名稱提供,則參數會套用至所有正在部署的堆疊。如果堆疊未使用參數,部署將會失敗。

參數不會傳播到巢狀堆疊。若要將參數傳遞至巢狀堆疊,請使用NestedStack建構。

預設值{}

--previous-parameters BOOLEAN

對現有參數使用先前的值。

將此選項設定為時false,您必須指定每個部署的所有參數。

預設值true

--progress STRING

設定 CDK 如何CLI顯示部署進度。

  • bar— 將堆疊部署事件顯示為進度列,其中包含目前部署之資源的事件。

  • events— 提供完整的歷史記錄,包括所有 CloudFormation 事件。

您也可以在專cdk.json案的檔案或本機開發電腦~/.cdk.json上設定此選項:

{ "progress": "events" }

有效值barevents

預設值bar

--require-approval STRING

指定需要手動核准的安全性敏感變更。

  • any-change — 對堆疊的任何變更都需要手動核准。

  • broadening— 如果變更涉及擴大權限或安全群組規則,則需要手動核准。

  • never— 不需要核准。

有效值any-changebroadeningnever

預設值broadening

--rollback BOOLEAN

在部署期間,如果無法建立或更新資源,部署會在 CDK CLI 傳回之前復原至最新的穩定狀態。到該時間點所做的所有更改都將被撤消。已建立的資源將會遭到刪除,而所做的更新也會復原。

false定停用此行為。如果無法建立或更新資源,CDK CLI 將保留對該點所做的變更並傳回。這可能會在您快速迭代的開發環境中有所幫助。

對於--rollback=false,您可以使用--no-rollback-R

注意

何時false,導致資源取代的部署永遠會失敗。您只能將此選項值用於更新或建立新資源的部署。

預設值true

--toolkit-stack-name STRING

現有 CDK 工具組堆疊的名稱。

此選項僅適用於使用舊式合成的 CDK 應用程式。

--watch BOOLEAN

持續觀察 CDK 專案檔案,並在偵測到變更時自動部署指定的堆疊。

此選項意味著--hotswap默認情況下。

此選項具有等效的 CDK CLI 指令。如需詳細資訊,請參閱 cdk watch

範例

部署名為的堆疊 MyStackName

$ cdk deploy MyStackName --app='node bin/main.js'

在應用程式中部署多個堆疊

使cdk list用列出您的堆疊:

$ cdk list CdkHelloWorldStack CdkStack2 CdkStack3

若要部署所有堆疊,請使用下列--all選項:

$ cdk deploy --all

若要選擇要部署的堆疊,請提供堆疊名稱做為引數:

$ cdk deploy CdkHelloWorldStack CdkStack3

部署管線堆疊

用於cdk list將堆疊名稱顯示為路徑,顯示它們在管線階層中的位置:

$ cdk list PipelineStack PiplelineStack/Prod PipelineStack/Prod/MyService

使用選--all項或萬用字元*來部署所有堆疊。如果您具有上述堆棧層次結構,--all*且僅匹配頂級的堆棧。若要符合階層中的所有堆疊,請使用**

您可以組合這些模式。下列步驟會部署Prod階段中的所有堆疊:

$ cdk deploy PipelineStack/Prod/**

在部署時傳遞參數

在 CDK 堆疊中定義參數。以下是建立為 Amazon SNS 主題命名TopicNameParam的參數的範例:

new sns.Topic(this, 'TopicParameter', { topicName: new cdk.CfnParameter(this, 'TopicNameParam').value.toString() });

若要提供的參數值parameterized,請執行下列命令:

$ cdk deploy --parameters "MyStackName:TopicNameParam=parameterized"

您可以使用--force選項來取代參數值。以下是覆寫先前部署的主題名稱的範例:

$ cdk deploy --parameters "MyStackName:TopicNameParam=parameterName" --force

部署後將堆疊輸出寫入檔案

在 CDK 堆疊檔案中定義輸出。以下是為函數 ARN 建立輸出的範例:

const fn = new lambda.Function(this, "fn", { handler: "index.handler", code: lambda.Code.fromInline(`exports.handler = \${handler.toString()}`), runtime: lambda.Runtime.NODEJS_LATEST }); new cdk.CfnOutput(this, 'FunctionArn', { value: fn.functionArn, });

部署堆疊並將輸出寫入至outputs.json

$ cdk deploy --outputs-file outputs.json

以下是部署outputs.json後的範例:

{ "MyStack": { "FunctionArn": "arn:aws:lambda:us-east-1:123456789012:function:MyStack-fn5FF616E3-G632ITHSP5HK" } }

在此範例中,索FunctionArn引鍵對應於執行個CfnOutput體的邏輯 ID。

以下是部署多個堆疊時部署outputs.json後的範例:

{ "MyStack": { "FunctionArn": "arn:aws:lambda:us-east-1:123456789012:function:MyStack-fn5FF616E3-G632ITHSP5HK" }, "AnotherStack": { "VPCId": "vpc-z0mg270fee16693f" } }

修改部署方法

若要加快部署速度,而不使用變更集,請使用--method='direct'

$ cdk deploy --method='direct'

若要建立變更集但不部署,請使用--method='prepare-change-set'. 依預設,cdk-deploy-change-set將建立名為的變更集。如果先前使用此名稱的變更集存在,則會覆寫該變更集。如果未偵測到任何變更,仍會建立空的變更集。

您也可以為變更集命名。以下是範例:

$ cdk deploy --method='prepare-change-set' --change-set-name='MyChangeSetName'