如何将AWS控制台创建的服务导出至本地CDK并实现部署更新?
用AWS CDK接管手动创建的API Gateway、Lambda与DynamoDB资源
背景
我通过AWS控制台手动创建了一套资源:关联多个AWS Lambda的API Gateway,部分Lambda会查询DynamoDB实例。目前无CloudFormation模板,希望通过本地CDK搭建文件系统,实现测试、部署管理及版本控制(如借助GitHub或AWS相关工具)。多数教程仅覆盖从零创建CDK或已有CloudFormation结构的场景,因此有以下疑问:
- 是否可初始化CDK并使用与现有服务同名的方式接管?
- 此举是否会覆盖现有服务导致故障?
- 是否有办法导出现有各服务的代码示例并建立关联?
解答
1. 可以通过同名方式用CDK接管现有资源
完全可行。你需要在CDK代码中定义与现有资源完全匹配的核心属性(如资源名称、ARN关键段、配置参数等),通过CDK的资源导入功能或直接定义同名资源实现接管:
- DynamoDB表:使用
Table.fromTableName/Table.fromTableArn导入现有表,或直接定义同名表并确保分区键、排序键、读写模式等核心属性与现有表一致。 - Lambda函数:使用
Function.fromFunctionName/Function.fromFunctionArn导入,若需接管代码部署,先将现有Lambda代码导出到本地,再在CDK中定义同名函数并关联本地代码目录。 - API Gateway:使用
RestApi.fromRestApiId/RestApi.fromRestApiAttributes导入现有网关,若需管理API结构,要确保CDK中定义的资源、方法、集成与现有网关完全一致。
2. 操作得当不会覆盖现有服务导致故障
只要CDK代码定义的资源属性与现有资源完全匹配,首次部署CDK时,CloudFormation会识别资源已存在且配置一致,不会执行修改或删除操作:
- 关键注意:若CDK代码属性与现有资源不匹配(如Lambda内存配置、DynamoDB读写容量不同),部署时CloudFormation会尝试修改现有资源,可能引发短暂服务中断或配置变更。需仔细核对所有配置参数。
- 安全建议:先运行
cdk diff命令查看CDK计划执行的变更。若输出显示No changes或仅为资源导入操作,即可安全部署;若有修改/删除操作,立即调整CDK代码至匹配现有配置。
3. 可导出现有服务的代码和配置并建立关联
- Lambda代码导出:在AWS控制台Lambda函数的「代码」标签页,选择「下载代码」,将代码包保存到本地CDK项目的对应目录(如
lambda/文件夹),再在CDK代码中关联该目录作为Lambda代码源。 - 资源配置导出:
- 使用AWS CLI的
describe命令导出配置:# 导出API Gateway配置 aws apigateway get-rest-api --rest-api-id <你的API ID> aws apigateway get-resources --rest-api-id <你的API ID> # 导出Lambda配置 aws lambda get-function --function-name <你的Lambda名称> # 导出DynamoDB配置 aws dynamodb describe-table --table-name <你的表名> - 也可通过AWS CloudFormation的资源导入向导(控制台CloudFormation页面),选择导入现有资源,向导会生成CloudFormation模板片段,你可将其转换为CDK代码(如把JSON/YAML转成TypeScript/Python代码)。
- 使用AWS CLI的
- 建立关联:在CDK代码中按现有依赖关系关联API Gateway、Lambda、DynamoDB(如将Lambda集成到API Gateway对应方法,为Lambda添加DynamoDB访问权限),确保与当前控制台配置一致。
内容的提问来源于stack exchange,提问作者Imnotapotato
相关产品推荐
相关产品推荐

