aws-cdk

aws-cdk

熱門

使用 TypeScript 或 Python 透過 CDK 撰寫、部署及排解 AWS 基礎設施問題。涵蓋最佳實踐、堆疊架構與建構模式。在撰寫 CDK 建構、引導環境、執行 cdk deploy/synth/diff、修正 CDK 或 CloudFormation 錯誤、規劃堆疊結構、匯入現有資源、解決漂移或重構堆疊而不取代資源時,一律使用此技能。

2174星標
204分支
更新於 2026/7/29
SKILL.md
readonlyread-only
name
aws-cdk
description

使用 TypeScript 或 Python 透過 CDK 撰寫、部署及排解 AWS 基礎設施問題。涵蓋最佳實踐、堆疊架構與建構模式。在撰寫 CDK 建構、引導環境、執行 cdk deploy/synth/diff、修正 CDK 或 CloudFormation 錯誤、規劃堆疊結構、匯入現有資源、解決漂移或重構堆疊而不取代資源時,一律使用此技能。

version
1

AWS CDK

概述

CDK 建構撰寫、部署工作流程、合規、漂移、匯入資源、安全重構以及排解 CDK CLI / CloudFormation 錯誤的領域專業知識。

何時不使用: 原始 CloudFormation YAML/JSON、SAM、Terraform/Pulumi、CDK Pipelines 以外的 CI/CD。請使用內建知識或專門技能處理這些情況。

重要警告

致命循環: 移除跨堆疊參考會導致部署死結(Export ... cannot be deleted as it is in use by ...)。建議的修正方式:先弱化參考 — CrossStackReferences.of($RESOURCE).produce(ReferenceStrength.BOTH) 然後 WEAK,再移除(需三次部署)。舊版替代方案:兩次部署的 this.exportValue() 方法。請參閱 troubleshooting-deployment

建構 ID 變更會導致資源取代: 重新命名或移動建構會變更其邏輯 ID → CloudFormation 會取代該資源(有狀態資源會遺失資料)。務必在部署前執行 cdk diff。請參閱 refactor-and-prevent-replacement

UPDATE_ROLLBACK_FAILED: 堆疊卡住。使用 cdk rollback $STACKcdk rollback $STACK --orphan <LogicalId> 修正。請參閱 troubleshooting-deployment

非空 S3 儲存桶在銷毀後仍存在: 您必須同時設定 removalPolicy: DESTROYautoDeleteObjects: true。啟用版本控制的儲存桶更糟 — 即使看似刪除,刪除標記仍會保留。

常見工作流程

任務 快速指令 詳細資訊
引導 cdk bootstrap aws://$ACCOUNT/$REGION bootstrap-and-project-setup
新增 TypeScript 專案 cdk init app --language typescript — 使用 tsxeslint-plugin-awscdk bootstrap-and-project-setup
新增 Python 專案 cdk init app --language python — 鎖定相依套件、使用虛擬環境 bootstrap-and-project-setup
部署 cdk synth --strictcdk diffcdk deploy 部署至正式環境前務必先執行 diff
cdk-nag Aspects.of(app).add(new AwsSolutionsChecks()) compliance-and-drift
漂移 cdk drift $STACK(在 CI 中使用 --fail compliance-and-drift
匯入資源 cdk import(互動式或 CI 中使用 --resource-mapping)、cdk deploy --import-existing-resources import-and-migrate
安全重構 cdk refactor --unstable=refactor — 同一次部署中不得有屬性變更 refactor-and-prevent-replacement

排解問題

錯誤 原因 → 修正方式
DeployFailed / DeploymentError CDK 錯誤並非根本原因。執行 cdk deploy $STACK --verbose,然後 cdk --unstable=diagnose diagnose $STACK(CLI ≥ 2.1120.0);否則執行 aws cloudformation describe-events --stack-name $STACK --filters FailedEvents=true — 第一個 _FAILED 事件即為原因。詳細資訊
NoCredentials / ExpiredToken / AssumeRoleFailed 執行 aws sts get-caller-identity + cdk doctor。SSO 過期、缺少 env、缺少 sts:AssumeRole詳細資訊
資產錯誤(CannotFindAsset、FailedToBundleAsset、AssetBuildFailed、AssetPublishFailed) 路徑錯誤、Docker 未執行或引導儲存桶權限問題。使用 path.join(__dirname, ...)詳細資訊
AppRequired cdk.json 中加入 "app": "npx tsx bin/my-app.ts"詳細資訊
AnnotationErrors 修正根本問題;僅在最後手段使用 NagSuppressions 抑制。詳細資訊
ConcurrentReadLock / ConcurrentWriteLock 執行 rm -rf cdk.out 然後重新執行。並行 CI:使用 --output ./cdk.out.$BUILD_ID詳細資訊
BootstrapVersionValidation 重新引導。在所有地方使用相同的 --qualifier詳細資訊
DependencyCycle 將共享資源提取到第三個堆疊,或使用 SSM 進行晚期繫結。詳細資訊
UnresolvedAccount 在堆疊上設定明確的 env: { account, region }。提交 cdk.context.json詳細資訊
NoStacksMatched CDK 使用邏輯 ID(第二個建構參數),而非 CFN 名稱。執行 cdk list 尋找 ID。詳細資訊
Cannot find module(合成時) 執行 npx tsc --noEmit,檢查 cdk.json 中的應用程式路徑是否與 tsconfig.jsonoutDir 相符,刪除過時的 .js 檔案。Python:啟動虛擬環境。詳細資訊
V1 匯入路徑 / 重複的 aws-cdk-lib V1 的 @aws-cdk/* 匯入、錯誤的 Construct 匯入、monorepo 中的重複函式庫副本。詳細資訊
Lambda Cannot find module(執行時期) 錯誤的處理常式值、缺少 SDK v3 遷移、Python 相依套件未打包。詳細資訊
API Gateway 多階段衝突 RestApi 上設定 deploy: false,明確建立 DeploymentStage詳細資訊

建構模式

優先使用 L2。當 L2 缺少某個屬性時,使用 L1 搭配 Mixins/Facades。脫逃機制:node.defaultChildaddPropertyOverride。請參閱 construct-patterns

其他資源

  • 搜尋 AWS 文件中的「CDK Developer Guide」、「CDK API Reference」和「CDK Pipelines」

安全考量

  • CI/CD 憑證使用 OIDC(無靜態金鑰)
  • 引導時使用 --custom-permissions-boundary
  • 使用 grant*() 進行資源間的 IAM 授權
  • 在 CI 中使用 cdk-nag + --strict
  • 有狀態資源放在自己的堆疊中,並設定 terminationProtection: true
  • 提交 cdk.context.json