這是 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 應用程式不包含任何堆疊,也要執行部署。
此選項在下列情況下很有用:您可能擁有具有多個環境的應用程式,例如
dev
和prod
。開始開發時,您的 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-set
、direct
、prepare-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" }
有效值:
bar
、events
預設值:
bar
-
--require-approval
STRING
-
指定需要手動核准的安全性敏感變更。
-
any-change
— 對堆疊的任何變更都需要手動核准。 -
broadening
— 如果變更涉及擴大權限或安全群組規則,則需要手動核准。 -
never
— 不需要核准。
有效值:
any-change
、broadening
、never
預設值:
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'