這是 AWS CDK v2 開發人員指南。較舊的 CDK v1 於 2022 年 6 月 1 日進入維護,並於 2023 年 6 月 1 日結束支援。
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
AWS CDK CLI 參考
AWS Cloud Development Kit (AWS CDK) 命令列介面 (AWS CDK CLI),也稱為 CDK Toolkit, 是與您的 AWS CDK 應用程式互動的主要工具。它執行您的應用程式、查詢您定義的應用程式模型,以及產生和部署 產生的 AWS CloudFormation 範本 AWS CDK。它還提供其他功能,可用於建立和處理 AWS CDK 專案。本主題包含有關 的常見使用案例的資訊 CDK CLI.
的 CDK CLI 會與 Node Package Manager 一起安裝。在大多數情況下,我們建議全域安裝它。
npm install -g aws-cdk # install latest version npm install -g aws-cdk@X.YY.Z # install specific version
提示
如果您定期使用多個版本的 AWS CDK,請考慮安裝相符版本的 CDK CLI 在個別CDK專案中。若要執行此操作,-g
請省略npm install
命令中的 。然後使用 npx aws-cdk
來叫用它。如果存在本機版本,則這會執行本機版本,如果不存在,則會返回全域版本。
CDK CLI commands
全部 CDK CLI 命令以 開頭cdk
,後面接著子命令 synthesize
(list
、deploy
、 等)。某些子命令具有相當於 的較短版本 ls
(synth
、 等)。選項和引數會依任何順序遵循子命令。
如需所有子命令、選項和引數的說明,請參閱 AWS CDK CLI 命令參考。
指定選項及其值
命令列選項以兩個連字號 (--
) 開頭。有些常用選項具有以單一連字號開頭的單一字母同義字 (例如, --app
具有同義字 -a
)。中的選項順序 CDK CLI 命令並不重要。
所有選項都接受值,該值必須遵循選項名稱。值可以用空格或等號 與名稱分隔=
。下列兩個選項相當。
--toolkit-stack-name MyBootstrapStack --toolkit-stack-name=MyBootstrapStack
某些選項是旗標 (布林值)。您可以指定 true
或 false
作為其值。如果您未提供值,則會將該值視為 true
。您也可以使用 作為選項名稱的字首no-
,以暗示 false
。
# sets staging flag to true --staging --staging=true --staging true # sets staging flag to false --no-staging --staging=false --staging false
可以多次指定一些選項,即 --context
、--trust
、--tags
、 --parameters
--plugin
和 ,以指定多個值。這些會註明為在 中具有 [array]
類型 CDK CLI 說明。例如:
cdk bootstrap --tags costCenter=0123 --tags responsibleParty=jdoe
內建說明
的 CDK CLI 已整合說明。您可以透過發出以下訊息,查看有關公用程式的一般說明和提供的子命令清單:
cdk --help
若要查看特定子命令的說明,例如 deploy
,請在--help
旗標之前指定它。
cdk deploy --help
顯示 版本cdk version
的問題 CDK CLI。 在請求支援時提供此資訊。
版本報告
為了深入了解 AWS CDK 如何使用 ,應用程式所使用的建構 AWS CDK 會使用識別為 的資源進行收集和報告AWS::CDK::Metadata
。此資源會新增至 AWS CloudFormation 範本,而且可以輕鬆檢閱。此資訊也可以 AWS 由 使用已知安全性或可靠性問題的建構來識別堆疊。它也可以用來聯絡使用者提供重要資訊。
注意
在 1.93.0 版之前, AWS CDK 報告了合成期間載入的模組名稱和版本,而不是堆疊中使用的建構。
根據預設, 會 AWS CDK 報告下列堆疊中使用的NPM模組中的建構使用:
-
AWS CDK 核心模組
-
AWS 建構程式庫模組
-
AWS 解決方案建構模組
-
AWS Render Farm 部署套件模組
AWS::CDK::Metadata
資源看起來如下所示。
CDKMetadata: Type: "AWS::CDK::Metadata" Properties: Analytics: "v2:deflate64:H4sIAND9SGAAAzXKSw5AMBAA0L1b2PdzBYnEAdio3RglglY60zQi7u6TWL/XKmNUlxeQSOKwaPTBqrNhwEWU3hGHiCzK0dWWfAxoL/Fd8mvk+QkS/0X6BdjnCdgmOOQKWz+AqqLDt2Y3YMnLYWwAAAA="
Analytics
屬性是堆疊中建構的 gziped、base64 編碼、字首編碼清單。
選擇退出版本報告
您可以使用 選擇退出版本報告 CDK CLI 或透過設定專案cdk.json
的檔案。
若要使用 選擇退出版本報告 CDK CLI
-
將
--no-version-reporting
選項與任何 CDK CLI 命令以選擇退出單一命令。以下是在範本合成期間選擇退出的範例:$
cdk synth --no-version-reporting
由於 會在您執行 時自動 AWS CDK 合成範本
cdk deploy
,因此您也應該--no-version-reporting
搭配cdk deploy
命令使用 。
設定 cdk.json
檔案以選擇退出版本報告
-
在
./cdk.json
或false
中versionReporting
設定為~/.cdk.json
。依預設,這會讓您選擇退出。以下是範例:{ "app": "...", "versionReporting": false }
設定之後,您可以覆寫此行為,並在個別命令
--version-reporting
上指定 以選擇加入。
注意
當您選擇退出版本報告時, AWS CDK 不會收集或報告您正在使用哪些建構的資料。因此, AWS CDK 將無法識別您是否受到安全問題的影響,也不會傳送通知給您。
使用 進行身分驗證 AWS
視環境和您可用的存取權而定,您可以透過不同方式設定 AWS 資源的程式設計 AWS 存取。
選擇您的身分驗證方法,並為 設定 CDK CLI,請參閱設定安全登入資料 AWS CDKCLI。
對於未由其雇主提供身分驗證方法的本機開發新使用者,建議方法是設定 AWS IAM Identity Center。此方法包括安裝 AWS CLI 以方便設定,以及定期登入 AWS 存取入口網站。如果您選擇此方法,您的環境應在完成 AWS SDKs和 工具參考指南 中的IAM身分中心身分驗證程序後包含下列元素:
-
在執行應用程式之前, AWS CLI您用來啟動 AWS 存取入口網站工作階段的 。
-
具有
[default]
設定檔的共用 AWSconfig
檔案,具有一組可以從 參考的組態值 AWS CDK。若要尋找此檔案的位置,請參閱 AWS SDKs和 工具參考指南 中的共用檔案的位置。 -
共用
config
檔案會設定region
設定。這會設定預設 AWS 區域 AWS CDK 和 CDK CLI 用於 AWS 請求。 -
的 CDK CLI 使用設定檔的SSO權杖提供者組態,在傳送請求至 之前取得憑證 AWS。此
sso_role_name
值是連接至 IAM Identity Center 許可集IAM的角色,應允許存取應用程式中 AWS 服務 使用的 。下列範例
config
檔案顯示使用SSO權杖提供者組態設定的預設設定檔。設定檔sso_session
的設定是指命名的sso-session
區段。sso-session
本節包含啟動 AWS 存取入口網站工作階段的設定。[default] sso_session =
my-sso
sso_account_id =111122223333
sso_role_name =SampleRole
region =us-east-1
output = json [sso-sessionmy-sso
] sso_region =us-east-1
sso_start_url =https://provided-domain.awsapps.com/start
sso_registration_scopes = sso:account:access
啟動 AWS 存取入口網站工作階段
在存取 之前 AWS 服務,您需要 的作用中 AWS 存取入口網站工作階段 CDK CLI 使用 IAM Identity Center 身分驗證來解析憑證。視您設定的工作階段長度而定,您的存取權最終會過期,而 CDK CLI 將遇到身分驗證錯誤。在 中執行下列命令 AWS CLI ,以登入 AWS 存取入口網站。
aws sso login
如果您的SSO權杖提供者組態使用具名設定檔而非預設設定檔,則命令為 aws sso login --profile
。使用 --profile選項或NAME
AWS_PROFILE
環境變數發出cdk命令時,也請指定此設定檔。
若要測試是否已有作用中工作階段,請執行下列 AWS CLI 命令。
aws sts get-caller-identity
對此命令的回應應報告在共用config
檔案中設定的 IAM Identity Center 帳戶和許可集。
注意
如果您已有作用中的 AWS 存取入口網站工作階段並執行 aws sso login
,則不需要提供憑證。
登入程序可能會提示您允許 AWS CLI 存取您的資料。由於 AWS CLI 建置在 SDK for Python 的 之上,因此許可訊息可能包含botocore
名稱的變化。
指定區域和其他組態
的 CDK CLI 需要知道您要部署至 AWS 的區域,以及如何使用 進行身分驗證 AWS。這是部署操作和合成期間擷取內容值所需。您的帳戶和區域共同構成環境 。
可以使用環境變數或在組態檔案中指定區域。這些變數和檔案與 和各種 等其他 AWS 工具所使用的變數 AWS CLI 和檔案相同 AWS SDKs。的 CDK CLI 會依下列順序尋找此資訊。
-
AWS_DEFAULT_REGION
環境變數。 -
在標準 AWS
config
檔案中定義的具名設定檔,並使用cdk
命令上的--profile
選項進行指定。 -
標準 AWS
config
檔案的[default]
區段。
除了在 [default]
區段中指定 AWS 身分驗證和區域之外,您也可以新增一或多個[profile
區段,其中 NAME
]NAME
是設定檔的名稱。如需具名設定檔的詳細資訊,請參閱 和 AWS SDKs 工具參考指南 中的共用組態和憑證檔案。
標準 AWS config
檔案位於 ~/.aws/config
(macOS /Linux) 或 %USERPROFILE%\.aws\config
(Windows)。如需詳細資訊和替代位置,請參閱 AWS SDKs和 工具參考指南中的共用組態和憑證檔案的位置
您在 AWS CDK 應用程式中使用堆疊env
屬性指定的環境會在合成期間使用。它用於產生環境特定的 AWS CloudFormation 範本,在部署期間,它會覆寫上述方法之一指定的帳戶或區域。如需詳細資訊,請參閱適用的環境 AWS CDK。
注意
AWS CDK 使用與其他 AWS 工具和 相同的來源檔案的憑證SDKs,包括 AWS Command Line Interface。不過, 的行為 AWS CDK 可能與這些工具稍有不同。它使用 機罩 AWS SDK for JavaScript 下的 。如需設定 憑證的完整詳細資訊 AWS SDK for JavaScript,請參閱設定憑證 。
您可以選擇性地使用 --role-arn
(或 -r
) 選項來指定IAM應該用於部署ARN的角色的 。此角色必須由正在使用 AWS 的帳戶擔任。
指定應用程式命令
的許多功能 CDK CLI 需要合成一或多個 AWS CloudFormation 範本,這反過來需要執行您的應用程式。 AWS CDK 支援以各種語言撰寫的程式。因此,它使用組態選項來指定執行應用程式所需的確切命令。此選項可以透過兩種方式指定。
首先,而且最常用,它可以使用檔案 中的 app
金鑰來指定cdk.json
。這是在您 AWS CDK 專案的主目錄中。的 CDK CLI 使用 建立新專案時, 會提供適當的命令cdk init
。例如,這是cdk.json
來自新 TypeScript 專案的 。
{ "app": "npx ts-node bin/hello-cdk.ts" }
的 CDK CLI 嘗試執行應用程式時, cdk.json
會在目前的工作目錄中尋找 。因此,您可以在專案的主目錄中保持 Shell 開啟,以發出 CDK CLI 命令。
的 CDK CLI 如果在 中找不到應用程式金鑰, 也會在 中尋找應用程式金鑰 ~/.cdk.json
(亦即,在您的主目錄中)./cdk.json
。如果您通常使用相同語言的CDK程式碼,在此處新增應用程式命令很有用。
如果您在其他一些目錄中,或使用 中 以外的命令執行應用程式cdk.json
,請使用 --app
(或 -a
) 選項來指定它。
cdk --app "npx ts-node bin/hello-cdk.ts" ls
部署時,您也可以指定包含合成雲端組件的目錄,例如 cdk.out
,作為 的值--app。指定的堆疊是從此目錄部署;應用程式不會合成。
指定堆疊
許多 CDK CLI 命令 (例如 cdk deploy
) 會在應用程式中定義的堆疊上運作。如果您的應用程式只包含一個堆疊,則 CDK CLI 如果您未明確指定堆疊,則表示您表示該堆疊。
否則,您必須指定要使用的堆疊。您可以在命令列上依 ID 個別指定所需的堆疊來達成此目的。請記住,當您實例化堆疊時,ID 是第二個引數指定的值。
cdk synth PipelineStack LambdaStack
您也可以使用萬用字元來指定IDs與模式相符的 。
-
?
符合任何單一字元 -
*
符合任意數量的字元 (*
單獨符合所有堆疊) -
**
符合階層中的所有項目
您也可以使用 --all選項來指定所有堆疊。
如果您的應用程式使用CDK管道 ,則 CDK CLI 了解您的堆疊和階段作為階層。此外, --all 選項和*
萬用字元僅符合頂層堆疊。若要比對所有堆疊,請使用 **
。也請使用 **
指示特定階層下的所有堆疊。
使用萬用字元時,請以引號括住模式,或使用 逸出萬用字元\
。如果沒有,您的 Shell 可能會嘗試將模式擴展到目前目錄中的檔案名稱。最好,這不會如預期般執行;最糟糕的是,您可以部署您無意的堆疊。這在 Windows 上並非絕對必要,因為 cmd.exe
不會擴展萬用字元,但還是很好的做法。
cdk synth "*Stack" # PipelineStack, LambdaStack, etc. cdk synth 'Stack?' # StackA, StackB, Stack1, etc. cdk synth \* # All stacks in the app, or all top-level stacks in a CDK Pipelines app cdk synth '**' # All stacks in a CDK Pipelines app cdk synth 'PipelineStack/Prod/**' # All stacks in Prod stage in a CDK Pipelines app
注意
您指定堆疊的順序不一定是處理堆疊的順序。的 CDK CLI 在決定處理堆疊的順序時, 會考慮堆疊之間的相依性。例如,假設一個堆疊使用另一個堆疊產生的值 (例如在第二個堆疊中定義的 資源ARN的 )。在此情況下,由於此相依性,第二個堆疊會在第一個堆疊之前合成。您可以使用堆疊addDependency()
的方法在堆疊之間手動新增相依性。
啟動您的 AWS 環境
使用 部署堆疊CDK需要佈建特殊的專用 AWS CDK 資源。cdk bootstrap
命令會為您建立必要的資源。只有在部署需要這些專用資源的堆疊時,才需要啟動。如需詳細資訊,請參閱 AWS CDK 引導。
cdk bootstrap
如果沒有引數發出,如下所示,cdk bootstrap
命令會合成目前的應用程式,並引導堆疊要部署的環境。如果應用程式包含不區分環境的堆疊,但未明確指定環境、預設帳戶和區域已啟動,或使用 指定的環境--profile
。
在應用程式之外,您必須明確指定要啟動的環境。您也可以這樣做來啟動未在應用程式或本機 AWS 設定檔中指定的環境。必須為指定的帳戶和區域設定憑證 (例如,在 中~/.aws/credentials
)。您可以指定包含所需憑證的設定檔。
cdk bootstrap
ACCOUNT-NUMBER
/REGION
# e.g. cdk bootstrap 1111111111/us-east-1 cdk bootstrap --profile test 1111111111/us-east-1
重要
您部署此類堆疊的每個環境 (帳戶/區域組合) 都必須分別啟動。
您可能會針對開機資源中的 AWS CDK 存放區產生 AWS 費用。此外,如果您使用 -bootstrap-customer-key
,則會建立AWSKMS金鑰,這也會產生每個環境的費用。
注意
預設情況下,引導範本的較早版本會建立KMS金鑰。若要避免費用,請使用 重新開機--no-bootstrap-customer-key
。
注意
CDK CLI v2 不支援原始引導範本,稱為舊版範本,預設搭配 CDK v1 使用。
重要
現代引導範本可有效地將 隱含的許可授予--trust
清單中--cloudformation-execution-policies
的任何 AWS 帳戶。根據預設,這會延伸讀取和寫入引導帳戶中任何資源的許可。請務必使用您熟悉的政策和信任帳戶來設定引導堆疊。
建立新的應用程式
若要建立新應用程式,請為其建立目錄,然後在目錄中發行 cdk init
。
mkdir my-cdk-app cd my-cdk-app cdk init
TEMPLATE
--languageLANGUAGE
支援的語言 (LANGUAGE
) 為:
代碼 |
語言 |
---|---|
|
TypeScript |
|
JavaScript |
|
Python |
|
Java |
|
C# |
TEMPLATE
是選用的範本。如果所需的範本是應用程式 ,則預設可以省略它。可用的範本包括:
範本 |
描述 |
---|---|
|
建立空白 AWS CDK 應用程式。 |
|
使用包含 Amazon SQS佇列和 Amazon SNS主題的堆疊建立 AWS CDK 應用程式。 |
範本會使用專案資料夾的名稱,為新應用程式中的檔案和類別產生名稱。
列出堆疊
若要查看 AWS CDK 應用程式中堆疊IDs的清單,請輸入下列其中一個等效命令:
cdk list cdk ls
如果您的應用程式包含CDK管道堆疊,則 CDK CLI 根據堆疊在管道階層中的位置,將堆疊名稱顯示為路徑。(例如,PipelineStack
、 PipelineStack/Prod
和 PipelineStack/Prod/MyService
。)
如果您的應用程式包含許多堆疊,您可以指定要列出的堆疊IDs的全部或部分堆疊。如需詳細資訊,請參閱指定堆疊。
新增--long
旗標以查看堆疊的詳細資訊,包括堆疊名稱及其環境 (AWS 帳戶和區域)。
合成堆疊
cdk synthesize
命令 (幾乎一律縮寫 synth
) 會將應用程式中定義的堆疊合成到 CloudFormation 範本中。
cdk synth # if app contains only one stack cdk synth MyStack cdk synth Stack1 Stack2 cdk synth "*" # all stacks in app
注意
的 CDK CLI 實際執行您的應用程式,並在大多數操作之前合成新的範本 (例如部署或比較堆疊時)。這些範本預設會儲存在 cdk.out
目錄中。cdk synth
命令只會為一或多個指定的堆疊列印產生的範本。
如需所有可用選項cdk synth --help
,請參閱 。以下章節將介紹一些最常用的選項。
指定內容值
使用 --context
或 -c
選項將執行期內容值傳遞至您的CDK應用程式。
# specify a single context value cdk synth --context key=value MyStack # specify multiple context values (any number) cdk synth --context key1=value1 --context key2=value2 MyStack
部署多個堆疊時,指定的內容值通常會傳遞給所有堆疊。如果需要,您可以將堆疊名稱字首加上內容值,為每個堆疊指定不同的值。
# different context values for each stack cdk synth --context Stack1:key=value Stack2:key=value Stack1 Stack2
指定顯示格式
根據預設,合成範本會以 YAML 格式顯示。新增--json
旗標,改為以 JSON 格式顯示。
cdk synth --json MyStack
指定輸出目錄
新增 --output
(-o
) 選項,將合成範本寫入 以外的目錄cdk.out
。
cdk synth --output=~/templates
部署堆疊
cdk deploy
子命令會將一或多個指定的堆疊部署到 AWS 您的帳戶。
cdk deploy # if app contains only one stack cdk deploy MyStack cdk deploy Stack1 Stack2 cdk deploy "*" # all stacks in app
注意
的 CDK CLI 會執行您的應用程式,並在部署任何項目之前合成新的 AWS CloudFormation 範本。因此,您可以搭配 使用的大多數命令列選項 cdk synth
(例如 --context
) 也可以搭配 使用cdk deploy
。
如需所有可用選項cdk deploy --help
,請參閱 。下一節將介紹一些最有用的選項。
略過合成
cdk deploy 命令通常會在部署之前合成應用程式的堆疊,以確保部署反映應用程式的最新版本。如果您知道自上次 以來尚未變更程式碼cdk synth,則可以在部署時隱藏備援合成步驟。若要這麼做,請在 --app選項中指定專案的cdk.out
目錄。
cdk deploy --app cdk.out StackOne StackTwo
停用復原
AWS CloudFormation 能夠復原變更,以便部署為原子。這表示它們整體成功或失敗。會 AWS CDK 繼承此功能,因為它會合成和部署 AWS CloudFormation 範本。
復原可確保您的資源始終處於一致狀態,這對生產堆疊至關重要。不過,當您仍在開發基礎設施時,有些故障是不可避免的,而復原失敗的部署可能會拖慢您的速度。
因此, CDKCLI 可讓您將 新增至cdk deploy
命令--no-rollback
來停用復原。使用此旗標時,失敗的部署不會復原。相反地,在失敗資源之前部署的資源會保留到位,而下一個部署會從失敗的資源開始。您將花更少的時間等待部署,並花更多的時間開發基礎設施。
熱交換
使用 --hotswap
旗標cdk deploy
嘗試直接更新您的 AWS 資源,而不是產生 AWS CloudFormation 變更集並部署它。如果無法進行熱交換,則部署會恢復為 AWS CloudFormation 部署。
目前熱交換支援 Lambda 函數、Step Functions 狀態機器和 Amazon ECS容器映像。--hotswap
旗標也會停用復原 (即 代表 --no-rollback
)。
重要
生產部署不建議使用熱交換。
監看模式
的 CDK CLI的監看模式 ( cdk deploy --watch或 cdk watch 簡稱) 會持續監控CDK應用程式的來源檔案和資產是否有變更。偵測到變更時,它會立即執行指定堆疊的部署。
根據預設,這些部署會使用 --hotswap
旗標,可快速追蹤 Lambda 函數的變更部署。 AWS CloudFormation 如果您已變更基礎設施組態,它也會回到透過 部署。若要cdk watch
一律執行完整 AWS CloudFormation 部署,請將--no-hotswap
旗標新增至 cdk watch
。
cdk watch
已在執行部署時所做的任何變更都會合併為單一部署,一旦進行中的部署完成,就會立即開始。
監看模式使用專案 中的 "watch"
金鑰cdk.json
來決定要監控哪些檔案。根據預設,這些檔案是您的應用程式檔案和資產,但可以透過修改"watch"
金鑰中的 "include"
和 "exclude"
項目來變更。下列cdk.json
檔案顯示這些項目的範例。
{ "app": "mvn -e -q compile exec:java", "watch": { "include": "src/main/**", "exclude": "target/*" } }
cdk watch
會從 執行 "build"
命令cdk.json
,以在合成之前建置您的應用程式。如果您的部署需要任何命令來建置或封裝 Lambda 程式碼 (或CDK應用程式中未包含的任何其他程式碼),請將其新增至此處。
Git 型萬用字元,包括 *
和 **
,可用於 "watch"
和 "build"
金鑰。每個路徑都會相對於 的父目錄進行解譯cdk.json
。的預設值include
為 **/*
,表示專案根目錄中的所有檔案和目錄exclude
都是選用的。
重要
生產部署不建議使用監看模式。
指定 AWS CloudFormation 參數
的 CDK CLI 支援在部署時指定 AWS CloudFormation 參數。您可以在--parameters
標記之後的命令列上提供這些項目。
cdk deploy MyStack --parameters uploadBucketName=UploadBucket
若要定義多個參數,請使用多個--parameters
旗標。
cdk deploy MyStack --parameters uploadBucketName=UpBucket --parameters downloadBucketName=DownBucket
如果您要部署多個堆疊,您可以為每個堆疊指定不同的每個參數值。若要這麼做,請在 參數的名稱前面加上堆疊名稱和冒號。否則,相同的值會傳遞至所有堆疊。
cdk deploy MyStack YourStack --parameters MyStack:uploadBucketName=UploadBucket --parameters YourStack:uploadBucketName=UpBucket
根據預設, 會 AWS CDK 保留先前部署的參數值,如果未明確指定,則會在稍後部署中使用。使用 --no-previous-parameters
旗標要求指定所有參數。
指定輸出檔案
如果您的堆疊宣告 AWS CloudFormation 輸出,這些輸出通常會在部署結束時顯示在畫面上。若要將它們寫入JSON格式為 的檔案,請使用 --outputs-file
旗標。
cdk deploy --outputs-file outputs.json MyStack
核准安全相關變更
為了保護您免受影響您安全狀態的意外變更, CDKCLI 在部署安全相關變更之前, 會提示您核准這些變更。您可以指定需要核准的變更層級:
cdk deploy --require-approval
LEVEL
LEVEL
可以是下列其中一項:
術語 |
意義 |
---|---|
|
永遠不需要核准 |
|
需要核准任何 IAM或 security-group-related 變更 |
|
新增IAM陳述式或流量規則時需要核准;移除不需要核准 |
也可以在 cdk.json
檔案中設定 設定。
{ "app": "...", "requireApproval": "never" }
比較堆疊
cdk diff
命令會將應用程式中定義的堆疊 (及其相依性) 目前版本與已部署版本或儲存的 AWS CloudFormation 範本進行比較,並顯示變更清單。
Stack HelloCdkStack IAM Statement Changes ┌───┬──────────────────────────────┬────────┬──────────────────────────────┬──────────────────────────────┬───────────┐ │ │ Resource │ Effect │ Action │ Principal │ Condition │ ├───┼──────────────────────────────┼────────┼──────────────────────────────┼──────────────────────────────┼───────────┤ │ + │ ${Custom::S3AutoDeleteObject │ Allow │ sts:AssumeRole │ Service:lambda.amazonaws.com │ │ │ │ sCustomResourceProvider/Role │ │ │ │ │ │ │ .Arn} │ │ │ │ │ ├───┼──────────────────────────────┼────────┼──────────────────────────────┼──────────────────────────────┼───────────┤ │ + │ ${MyFirstBucket.Arn} │ Allow │ s3:DeleteObject* │ AWS:${Custom::S3AutoDeleteOb │ │ │ │ ${MyFirstBucket.Arn}/* │ │ s3:GetBucket* │ jectsCustomResourceProvider/ │ │ │ │ │ │ s3:GetObject* │ Role.Arn} │ │ │ │ │ │ s3:List* │ │ │ └───┴──────────────────────────────┴────────┴──────────────────────────────┴──────────────────────────────┴───────────┘ IAM Policy Changes ┌───┬────────────────────────────────────────────────────────┬────────────────────────────────────────────────────────┐ │ │ Resource │ Managed Policy ARN │ ├───┼────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────┤ │ + │ ${Custom::S3AutoDeleteObjectsCustomResourceProvider/Ro │ {"Fn::Sub":"arn:${AWS::Partition}:iam::aws:policy/serv │ │ │ le} │ ice-role/AWSLambdaBasicExecutionRole"} │ └───┴────────────────────────────────────────────────────────┴────────────────────────────────────────────────────────┘ (NOTE: There may be security-related changes not in this list. See https://github.com/aws/aws-cdk/issues/1299) Parameters [+] Parameter AssetParameters/4cd61014b71160e8c66fe167e43710d5ba068b80b134e9bd84508cf9238b2392/S3Bucket AssetParameters4cd61014b71160e8c66fe167e43710d5ba068b80b134e9bd84508cf9238b2392S3BucketBF7A7F3F: {"Type":"String","Description":"S3 bucket for asset \"4cd61014b71160e8c66fe167e43710d5ba068b80b134e9bd84508cf9238b2392\""} [+] Parameter AssetParameters/4cd61014b71160e8c66fe167e43710d5ba068b80b134e9bd84508cf9238b2392/S3VersionKey AssetParameters4cd61014b71160e8c66fe167e43710d5ba068b80b134e9bd84508cf9238b2392S3VersionKeyFAF93626: {"Type":"String","Description":"S3 key for asset version \"4cd61014b71160e8c66fe167e43710d5ba068b80b134e9bd84508cf9238b2392\""} [+] Parameter AssetParameters/4cd61014b71160e8c66fe167e43710d5ba068b80b134e9bd84508cf9238b2392/ArtifactHash AssetParameters4cd61014b71160e8c66fe167e43710d5ba068b80b134e9bd84508cf9238b2392ArtifactHashE56CD69A: {"Type":"String","Description":"Artifact hash for asset \"4cd61014b71160e8c66fe167e43710d5ba068b80b134e9bd84508cf9238b2392\""} Resources [+] AWS::S3::BucketPolicy MyFirstBucket/Policy MyFirstBucketPolicy3243DEFD [+] Custom::S3AutoDeleteObjects MyFirstBucket/AutoDeleteObjectsCustomResource MyFirstBucketAutoDeleteObjectsCustomResourceC52FCF6E [+] AWS::IAM::Role Custom::S3AutoDeleteObjectsCustomResourceProvider/Role CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092 [+] AWS::Lambda::Function Custom::S3AutoDeleteObjectsCustomResourceProvider/Handler CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F [~] AWS::S3::Bucket MyFirstBucket MyFirstBucketB8884501 ├─ [~] DeletionPolicy │ ├─ [-] Retain │ └─ [+] Delete └─ [~] UpdateReplacePolicy ├─ [-] Retain └─ [+] Delete
若要比較應用程式堆疊與現有部署:
cdk diff MyStack
若要將應用程式堆疊與儲存的 CloudFormation 範本進行比較:
cdk diff --template ~/stacks/MyStack.old MyStack
將現有資源匯入堆疊
您可以使用 cdk import
命令,為 CloudFormation 特定 AWS CDK 堆疊在 管理下提供資源。如果您正在遷移至 AWS CDK,或在堆疊之間移動資源或變更其邏輯 ID,這會很有用。 cdk import
會使用 CloudFormation 資源匯入 。請參閱此處可匯入的資源清單 。
若要將現有資源匯入 AWS CDK 堆疊,請遵循下列步驟:
-
確定資源目前未由任何其他 CloudFormation 堆疊管理。如果是,請先將資源目前所在的堆疊
RemovalPolicy.RETAIN
中的移除政策設定為 ,然後執行部署。然後,從堆疊中移除資源,然後執行另一個部署。此程序將確保資源不再由 管理, CloudFormation 但不會將其刪除。 -
執行
cdk diff
,以確保您要匯入資源的 AWS CDK 堆疊沒有待處理的變更。「匯入」操作中允許的唯一變更是新增您要匯入的新資源。 -
為您要匯入堆疊的資源新增建構。例如,如果您想要匯入 Amazon S3 儲存貯體,請新增類似 的內容
new s3.Bucket(this, 'ImportedS3Bucket', {});
。請勿對任何其他資源進行任何修改。您也必須確保將資源目前擁有的狀態精確建模到定義中。對於儲存貯體的範例,請務必包含 AWS KMS 金鑰、生命週期政策,以及與儲存貯體相關的任何其他項目。如果不這樣做,後續的更新操作可能無法如預期般執行。
您可以選擇是否要包含實體儲存貯體名稱。通常建議不要將資源名稱包含到您的 AWS CDK 資源定義中,以便更輕鬆地多次部署您的資源。
-
執行
cdk import
。STACKNAME
-
如果資源名稱不在模型中, CLI會提示您傳遞正在匯入之資源的實際名稱。之後,匯入就會開始。
-
當
cdk import
報告成功時,資源現在由 AWS CDK 和 管理 CloudFormation。您對 AWS CDK 應用程式中資源屬性所做的任何後續變更,建構組態都會套用至下一個部署。 -
若要確認您的 AWS CDK 應用程式中的資源定義符合資源的目前狀態,您可以啟動CloudFormation 偏離偵測操作 。
此功能目前不支援將資源匯入巢狀堆疊。
組態 (cdk.json
)
許多 的預設值 CDK CLI 命令列旗標可以存放在專案的cdk.json
檔案中,或使用者目錄中的.cdk.json
檔案中。以下是所支援組態設定的字母參考。
金錀 | 備註 | CDK CLI option |
---|---|---|
app |
執行CDK應用程式的命令。 | --app |
assetMetadata |
如果 false , CDK 不會將中繼資料新增至使用資產的資源。 |
--no-asset-metadata |
bootstrapKmsKeyId |
覆寫用於加密 Amazon S3 部署儲存貯體之 AWS KMS 金鑰的 ID。 | --bootstrap-kms-key-id |
build |
在合成之前編譯或建置CDK應用程式的命令。不允許在 中使用 ~/.cdk.json 。 |
--build |
browser |
為cdk docs 子命令啟動 Web 瀏覽器的命令。 |
--browser |
context |
請參閱 上下文值和 AWS CDK。不會清除組態檔案中的內容值cdk context --clear。( CDK CLI 在 中放置快取的內容值cdk.context.json 。) |
--context |
debug |
如果 true , CDKCLI 會發出更詳細的資訊,有助於偵錯。 |
--debug |
language |
用於初始化新專案的語言。 | --language |
lookups |
如果 false ,則不允許內容查詢。如果需要執行任何內容查詢,則合成會失敗。 |
--no-lookups |
notices |
如果 false , 會禁止顯示有關安全漏洞、迴歸和不支援版本的訊息。 |
--no-notices |
output |
將發出合成雲端組件的目錄名稱 (預設 "cdk.out" )。 |
--output |
outputsFile |
將寫入已部署堆疊 AWS CloudFormation 輸出的檔案 (JSON格式)。 | --outputs-file |
pathMetadata |
如果 false ,CDK路徑中繼資料不會新增至合成範本。 |
--no-path-metadata |
plugin |
JSON 陣列,指定擴展 的套件名稱或套件的本機路徑 CDK | --plugin |
profile |
用於指定區域和帳戶憑證的預設 AWS 設定檔名稱。 | --profile |
progress |
如果設定為 "events" ,則 CDK CLI 會顯示部署期間的所有 AWS CloudFormation 事件,而不是進度列。 |
--progress |
requireApproval |
安全性變更的預設核准層級。請參閱核准安全相關變更 | --require-approval |
rollback |
如果 false ,失敗的部署不會復原。 |
--no-rollback |
staging |
如果 false ,資產不會複製到輸出目錄 (使用 進行來源檔案的本機偵錯 AWS SAM)。 |
--no-staging |
tags |
JSON 物件包含堆疊的標籤 (鍵值對)。 | --tags |
toolkitBucketName |
用於部署 Lambda 函數和容器映像等資產的 Amazon S3 儲存貯體名稱 (請參閱 啟動您的 AWS 環境。 | --toolkit-bucket-name |
toolkitStackName |
引導堆疊的名稱 (請參閱 啟動您的 AWS 環境。 | --toolkit-stack-name |
versionReporting |
如果 false ,則選擇退出版本報告。 |
--no-version-reporting |
watch |
JSON 包含 "include" 和 "exclude" 索引鍵的物件,指出哪些檔案在變更時應該 (或不應該) 觸發專案重建。請參閱 監看模式。 |
--watch |