Skip to content
返回云服务

AWS CloudFormation 与 CDK IaC

基础设施即代码 — CloudFormation YAML/JSON 或 CDK TypeScript,可复现部署。

AWS进阶

为什么

IaC 使基础设施版本化、可审查、可复现。CDK 用 TS/Python 编译到 CloudFormation — 比 YAML 少 10 倍代码。漂移检测抓手动变更。

何时使用

所有生产基础设施用 IaC — 无控制台点击。复杂栈用 CDK,简单/sam 用 CloudFormation。一次性资源避免(CLI 即可)。

如何做

1. CDK init — npx cdk init app --language typescript 2. 定义栈 — 构造库(aws-s3、aws-lambda 等) 3. 合成 — cdk synth → CloudFormation 模板 4. 引导 — cdk bootstrap(每环境一次,创建部署角色) 5. 部署 — cdk deploy,diff 显示变更,确认破坏性 6. 阶段 — cdk deploy --stage prod,独立账户/环境 7. 漂移 — cdk drift detect,手动变更显示漂移 8. CI/CD — 合并时 CodePipeline/GitHub Actions 中 cdk deploy

示例

// lib/my-stack.ts — CDK 栈 import * as cdk from "aws-cdk-lib"; import * as s3 from "aws-cdk-lib/aws-s3"; import * as lambda from "aws-cdk-lib/aws-lambda"; export class MyStack extends cdk.Stack { constructor(scope: cdk.App, id: string, props?: cdk.StackProps) { super(scope, id, props); const bucket = new s3.Bucket(this, "uploads", { removalPolicy: cdk.RemovalPolicy.DESTROY, autoDeleteObjects: true, }); const fn = new lambda.Function(this, "api", { runtime: lambda.Runtime.NODEJS_20_X, handler: "index.handler", code: lambda.Code.fromAsset("./dist"), environment: { BUCKET: bucket.bucketName }, }); bucket.grantReadWrite(fn); } } # 部署 cdk deploy MyStack --require-approval never

常见问题

  • ⚠破坏性变更未捕获 — cdk deploy 显示 REPLACE/DELETE,仔细读
  • ⚠栈卡 UPDATE_ROLLBACK — 手动修或 continue-rollback,先理解原因
  • ⚠CDK v1 vs v2 — v2 单包(aws-cdk-lib),v1 已弃用,迁移

最佳实践

  • ✓CI 中用 cdk diff — 阻止意外破坏性变更 PR
  • ✓按生命周期分栈 — 有状态(DB)vs 无状态(Lambda)安全重部署
  • ✓用 cdk-nag 安全 — 自动按 AWS 最佳实践检查,违规失败 CI

常见问题解答

什么是AWS CloudFormation 与 CDK IaC?它解决什么问题?

基础设施即代码 — CloudFormation YAML/JSON 或 CDK TypeScript,可复现部署。 它可帮助开发者在不自建基础设施的前提下完成部署、存储与扩展,是云服务选型的核心参考。

如何在 5 分钟内上手AWS CloudFormation 与 CDK IaC?

两步即可跑通:① CDK init — npx cdk init app --language typescript;② 定义栈 — 构造库(aws-s3、aws-lambda 等)。建议先用免费套餐验证流程,再接入生产环境。

AWS CloudFormation 与 CDK IaC 最容易踩的坑是什么?

最高频的问题是:破坏性变更未捕获 — cdk deploy 显示 REPLACE/DELETE,仔细读。建议在上线前用 checklist 逐项核对,并在 CI 中加入策略与配置扫描。

AWS CloudFormation 与 CDK IaC 的最佳实践有哪些?

AWS CloudFormation 与 CDK IaC 的最佳实践包括:CI 中用 cdk diff — 阻止意外破坏性变更 PR;按生命周期分栈 — 有状态(DB)vs 无状态(Lambda)安全重部署;用 cdk-nag 安全 — 自动按 AWS 最佳实践检查,违规失败 CI。其中首条「CI 中用 cdk diff — 阻止意外破坏性变更 PR」应作为团队默认规范写入 IaC 模板。

AWS CloudFormation 与 CDK IaC 如何控制成本与避免账单意外?

三招防超支:① 为所有资源打 env/team 标签并启用账单告警;② 用预算阈值触发 Slack/邮件通知;③ 定期用 Cost Explorer 审查闲置资源并清理。AWS CloudFormation 与 CDK IaC 多数提供免费套餐,先在免费额度内验证再放量。