AWS CDK

使用 TypeScript 或 Python 等编程语言定义 AWS 基础设施,并作为 CloudFormation 模板部署的 IaC 框架

概述

AWS Cloud Development Kit (CDK) 是一个开源的 Infrastructure as Code (IaC) 框架,允许使用熟悉的编程语言 (TypeScript、Python、Java、C#、Go) 定义 AWS 基础设施。CDK 编写的代码在内部被转换 (合成) 为 CloudFormation 模板,并通过 CloudFormation 进行部署。通过 L1 (CloudFormation 资源的一对一映射)、L2 (内置最佳实践的高级抽象)、L3 (组合多个资源的模式) 三层构造,只需几行代码即可构建生产级基础设施。

L1、L2、L3 构造的使用区分

CDK 的构造按抽象程度分为 3 个级别。L1 构造 (CfnXxx) 是 CloudFormation 资源的直接包装器,可以访问 CloudFormation 中所有可配置的属性。L2 构造是日常使用的核心级别,例如创建 s3.Bucket 时,加密启用等安全默认值会自动应用。L3 构造 (模式) 如 LambdaRestApi 可以一次性构建多个资源 (Lambda + API Gateway + IAM 角色)。实务中一种有效的做法是以 L2 为中心,仅在 L2 无法满足的细节设置上使用 L1 的逃生舱口进行补充。

用编程语言编写 IaC 的优势与注意事项

CDK 最大的特点是可以使用 TypeScript 或 Python 等通用编程语言定义基础设施。可以利用循环、条件分支、函数、类继承等语言特性,轻松实现复杂基础设施模式的复用和动态配置生成。与 Terraform 的声明式语言 (HCL) 相比,代码表达力更强,但编程语言的灵活性也可能导致意外的资源变更风险。养成使用 cdk diff 确认差异的习惯很重要。需要多云支持时 Terraform 更合适,但在 AWS 专用环境中更容易发挥 CDK 的生产力。

栈拆分与测试策略

CDK 实务导入时首先要决定的是栈的拆分策略。将所有资源塞入一个栈会导致部署时间变长,且一个变更可能影响所有资源。较为稳妥的做法是按职责拆分栈,如网络 (VPC)、数据存储 (RDS、DynamoDB)、计算 (Lambda、ECS),栈间依赖通过 SSM Parameter Store 或 CloudFormation 导出实现松耦合。在测试方面,可以使用 cdk-nag 进行安全与合规检查,使用 Assertions 模块进行快照测试和细粒度测试,在 CI/CD 管道中自动验证基础设施代码质量。通过测试 CloudFormation 模板的转换 (合成) 结果,可以在部署前检测意外变更,这是 CDK 的优势。

参考资料(AWS 官方)

本页的第一手信息来源是 AWS 官方网站及官方文档。最新的规格与价格请以下列官方页面为准。

如本页内容与官方文档不一致,请以官方文档为准。

分享