AWS CDK 热门2019年〜
使用 TypeScript、Python 等编程语言定义 AWS 基础设施的 IaC 框架
它能做什么
AWS CDK(Cloud Development Kit)是一个使用 TypeScript、Python、Java、C#、Go 等通用编程语言以代码方式定义 AWS 基础设施的 IaC(Infrastructure as Code)框架。可以充分利用编程语言的条件分支、循环、函数等功能来描述基础设施,定义的代码会被转换为 CloudFormation 模板进行部署。通过高级抽象(Constructs),可以用少量代码构建复杂的基础设施。
使用场景
用于无服务器应用程序的基础设施定义、微服务架构的环境搭建、CI/CD 流水线的自动构建、多环境(开发、预发布、生产)的基础设施管理等。特别适合熟悉编程的开发者在不编写 YAML/JSON 的情况下构建基础设施。
日常类比
可以将其比作乐高积木。如果 CloudFormation 是逐个组装小积木块(单个资源)的工作,那么 CDK 就是组合预制套件(Constructs)的工作。选择“房屋套件”(Web 应用架构),墙壁、屋顶、门(VPC、ALB、ECS)就一应俱全,只需少量步骤即可完成。
什么是 AWS CDK
AWS CDK 是一个使用编程语言定义 AWS 基础设施的框架。传统的 CloudFormation 使用 YAML 或 JSON 描述资源,而 CDK 可以使用 TypeScript 或 Python 等熟悉的语言进行编写。由于可以使用 IDE 的代码补全功能和编译时的类型检查,能够及早发现配置错误,大幅提升开发效率。
Constructs 的机制
CDK 的核心是称为 Constructs(构造体)的可复用组件。L1 Constructs 与 CloudFormation 资源一一对应,L2 Constructs 是内置了最佳实践的高级抽象。例如,使用 L2 的 Bucket 类,只需几行代码就能创建正确配置了加密和版本控制的 S3 存储桶。L3 Constructs(Patterns)是将多个资源的组合封装为一个组件。
与 CloudFormation 的关系
CDK 编写的代码通过 cdk synth 命令转换(合成)为 CloudFormation 模板。部署通过 CloudFormation 进行,因此可以直接使用 CloudFormation 的堆栈管理、变更集、回滚等功能。CDK 是 CloudFormation 的“上层”,不是替代 CloudFormation,而是使其更易用的工具。 从基础到高级,可以通过Amazon 的技术书籍系统地学习 CloudFormation 与 CDK 的关系。
开始使用
使用 npm install -g aws-cdk 安装 CDK CLI,然后使用 cdk init app --language typescript 创建新项目。在 lib/ 目录的堆栈文件中定义资源,使用 cdk deploy 进行部署。首次使用时需要运行 cdk bootstrap 命令创建 CDK 所需的 S3 存储桶和 IAM 角色。可以使用 cdk diff 预先确认变更内容。
注意事项
- CDK 本身是免费的开源工具,仅对部署的 AWS 资源收费
- CDK 版本升级时可能包含破坏性变更,建议固定版本并确认变更日志
- cdk bootstrap 需要针对每个 AWS 账户和区域的组合执行一次。团队开发中只需一人执行即可