[AWS] DevTools 布道 CDK 版
Source: Dev.to
引言
这是 2025 年日本 AWS 顶尖工程师圣诞倒计时日历的第四篇文章。
我们将讨论 AWS CDK,这是一款常用的 IaC(基础设施即代码)编写工具。
虽然 CloudFormation(另一款 AWS IaC 工具)可以使用任何文本编辑器轻松编写,但容易产生冗余代码。AWS CDK 的设置稍微复杂一些,但它可以让你用更少的代码高效地编写 IaC。
Japan AWS Top Engineers Advent Calendar 2025
什么是 AWS CDK?
AWS Cloud Development Kit(CDK) 是一种用于创建基础设施即代码(IaC)的工具,它将基础设施配置以代码的形式进行规范化。
IaC 的优势
减少手动配置错误和重复性工作
基础设施也可以通过 AWS 管理控制台手动定义,但每次手动操作既耗时又容易出错。通过将配置代码化,同一段代码可以重复使用,从而消除手动失误和繁琐操作。
便于共享与版本控制
代码化的基础设施可以作为一个代码块在团队内部共享。使用版本控制系统管理可以轻松追踪差异,同时也能对代码的正确性进行测试。
下面的图片展示了一个大致的概览:

CloudFormation 与 CDK 的区别
CloudFormation 允许进行细粒度的定义,但生成的 IaC 代码往往非常冗长,导致编写时间增加且可读性下降。
CDK 通过 constructs(构造) 实现抽象。通过自动配置部分定义,IaC 代码可以用更少的行数完成。
下面的图片展示了一个大致的流程概览:

初始化 AWS CDK
创建项目
mkdir my-project
cd my-project
初始化 CDK 项目(本例使用 TypeScript):
cdk init app --language typescript

AWS CDK 实现示例
注意(测试环境)
我在 Windows PC 上使用 Kiro(IDE)。
使用 API Gateway、Lambda 和 S3 实现 API
实现过程使用了 Amazon Q Developer 与 Kiro 的 Vibe 编码。
需求是:“使用 API Gateway 和 Lambda 定义一个 API。Lambda 函数使用 TypeScript 编写。Lambda 函数应返回 S3 存储桶中的文件列表。”
开发过程中,我通过聊天向 Kiro 咨询,以修改 S3 存储桶名称和 Lambda 函数名称。
实现细节
文件夹结构
Lambda 函数代码位于 lambda 文件夹,CDK IaC 代码位于 lib 文件夹。

lib 文件夹
堆栈(Stack)定义放在该文件夹内的文件中。
导入、类与构造
导入所需模块,定义类名和构造函数,并声明各资源。

S3 存储桶定义
存储桶定义包括:
- bucketName – 固定的存储桶名称(可选;若不指定,CDK 会生成类似
myprojectstack-mybucket-的名称)。 - removalPolicy –
DESTROY(堆栈删除时同时删除存储桶)。 - autoDeleteObjects –
true(即使存储桶中有对象也允许删除)。

Lambda 函数定义
Lambda 定义包括:
- functionName – 固定的函数名称(可选;若不指定,CDK 会生成类似
MyProjectStack-ListFilesFunction-的名称)。 - runtime – Node.js 20.x。
- handler –
index.js中的入口函数。 - code – 来自
lambda/目录的源码。 - environment – 将存储桶名称作为环境变量传入。

Lambda 函数需要读取 S3 存储桶中的文件列表,因此为其授予了读取权限。
