如何获取已部署AWS资源的CloudFormation模板及逆向生成方法
如何为已部署的AWS资源获取CloudFormation模板?
这得分两种核心情况来看,取决于你的资源最初的部署方式:
情况1:资源原本就是通过CloudFormation部署的
如果你的资源是从CloudFormation堆栈创建的,获取模板的方法非常直接:
- 通过AWS CLI:运行以下命令,替换
<your-stack-name>为你的目标堆栈名称:
要是想直接把模板内容保存到文件,可以加上查询参数:aws cloudformation get-template --stack-name <your-stack-name>aws cloudformation get-template --stack-name <your-stack-name> --query 'TemplateBody' > template.yaml - 通过AWS控制台:登录CloudFormation控制台,找到对应的堆栈,切换到「模板」标签页,就能直接查看或下载完整的模板内容。
情况2:资源不是通过CloudFormation部署的(比如手动GUI创建、直接CLI/SDK创建)
这种场景下没有“一键导出”的原生功能,但有几种可靠的方法生成对应的CloudFormation模板:
- 使用CloudFormation「导入现有资源」向导:
- 在CloudFormation控制台新建堆栈,选择「导入现有资源」选项;
- 挑选你要导入的资源类型(比如S3 Bucket、AWS Glue Job),跟着向导选择具体资源;
- 向导会自动生成包含这些资源定义的CloudFormation模板,你可以直接下载用于后续管理。
- 借助AWS CDK导入功能:
如果你日常使用AWS CDK,可以通过cdk import命令将现有资源导入到CDK栈中,之后运行cdk synth就能生成对应的CloudFormation模板。 - 第三方工具辅助生成:
像Former2这类工具可以扫描你的AWS账户资源,自动生成匹配的CloudFormation模板(注意只使用可信工具,确保账户安全)。
通过AWS GUI创建的资源,能否用AWS CLI获取对应的CloudFormation模板?是否存在逆向生成的方法?
先给明确结论:没有直接的AWS CLI命令可以一键导出GUI创建的资源为CloudFormation模板,但确实有多种实用的逆向生成方法,除了上面提到的通用方案,这里补充几个针对性细节:
- 结合AWS Config辅助编写:
先用AWS Config记录资源的完整配置细节,再参考这些信息手动编写模板,也可以用Config的规则来验证你编写的模板是否匹配现有资源的配置。 - 用CLI完成导入式模板生成:
如果你偏好CLI操作,可以通过创建变更集的方式完成导入准备(需要先准备好包含资源标识符的JSON文件):
不过这个方法需要你先有一个基础模板框架,更适合已有部分模板内容的场景。aws cloudformation create-change-set \ --stack-name <new-stack-name> \ --change-set-type IMPORT \ --resources-to-import file://resources-to-import.json \ --template-body file://base-template.json - 手动编写+验证:
对于简单资源(比如基础S3 Bucket),可以参考AWS官方文档的CloudFormation资源类型定义手动编写模板,然后用aws cloudformation validate-template命令验证模板合法性,再通过aws cloudformation deploy测试部署(注意不要覆盖现有资源)。
总的来说,虽然没有直接的CLI一键生成路径,但通过CloudFormation导入功能、CDK工具或者第三方辅助工具,都能高效地将GUI创建的资源逆向生成为CloudFormation模板,实现基础设施即代码的管理。
内容的提问来源于stack exchange,提问作者Infinite
相关产品推荐
相关产品推荐

