View a markdown version of this page

使用 cloudformation-validate 验证模板 - Amazon CloudFormation
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)。

使用 cloudformation-validate 验证模板

该开源 cloudformation-validate 项目会在本地检查 JSON 和 YAML CloudFormation 模板,并在 GitHub 上提供。它可以查找无效的模板结构、损坏的引用、安全问题和最佳实践问题。每项调查发现都包括问题、其严重程度以及其在模板中的位置。

该工具包括所需的规则和 CloudFormation 资源定义,因此安装后无需网络访问或 Amazon 凭证即可运行。

选择验证方法

  • 命令行:运行 cfn-validate 以从终端或自动构建检查一个模板或目录中的每个模板。

  • 库:向 Rust、Node.js、Python、Go 或 JVM 应用程序添加验证器,然后在代码中处理结果。

  • Amazon CDK:在 CDK 合成模板后自动验证模板。

  • 自定义规则:添加以 CEL、Rego 或 Guard 规则语言编写的检查。有关支持的规则格式和示例,请参阅 GitHub 上的 Custom Rules Reference。有关 Guard 规则语法,请参阅本指南中的使用 Guard 验证模板。

安装命令行工具

在 GitHub 上打开最新的 cfn-validate 版本,然后下载适用于您的操作系统和处理器的 cfn-validate 文件。按照 GitHub 上的安装指南将文件重命名为 cfn-validate,将其添加到您的 PATH,然后验证下载的文件。

运行验证

该命令使用以下语法:

cfn-validate TEMPLATE_OR_DIRECTORY [OPTIONS]

检查一个模板:

cfn-validate template.yaml

传递一个目录,以递归方式检查每个 .yaml、.yml 和 .json 文件:

cfn-validate ./templates/

该命令将结构化的 JSON 验证报告写入标准输出。使用 --format standard 可获得精简输出,使用 --format detailed 可获得默认详细报告。

该命令在未发现错误或致命诊断时会返回 0,在发现错误或致命诊断时会返回 1,在出现使用或初始化错误(例如无效选项或文件不存在)时会返回 2。

有关所有引擎、筛选条件、输出格式和参数,请参阅 GitHub 上的 cfn-validate CLI 参考。

添加自定义规则

使用 --rule-source 加载自定义 Rego 或 CEL 规则文件。使用 --guard-rule-source 加载 Guard 规则文件或目录。您可以重复任一选项以加载多个规则源:

cfn-validate template.yaml --rule-source ./rules/my-rule.rego cfn-validate template.yaml --guard-rule-source ./guard-rules/

有关规则格式和示例,请参阅 GitHub 上的 Custom Rules Reference。

嵌入验证库

安装适用于所用编程语言的已发布程序包,以便从您的应用程序运行相同的离线检查。创建一次验证引擎,将其重复用于多个模板,然后处理针对每个模板返回的结构化诊断。您还可以通过库 API 配置自定义 CEL、Rego 或 Guard 规则。

有关安装说明和支持的平台,请参阅语言绑定安装指南。

如需查看各种语言的完整示例以及各 API 指南的链接,请参阅 GitHub 上项目文档中的作为库嵌入。

将 与 结合使用Amazon CDK

如果您使用 Amazon CDK,则无需单独安装验证器。Amazon CDK 构造库包含一个默认 CloudFormationValidatePlugin,其会在合成 CloudFormation 模板后自动运行相同的检查。

cdk synth

CDK 会在其验证结果中报告可能的部署失败和最佳实践调查发现。当您想要添加自定义 Rego 或 Guard 规则时,可以显式配置 CloudFormationValidatePlugin。

有关插件配置、确认和验证报告,请参阅《Amazon CDK API 参考》中的 Template and Policy Validation。

了解验证范围

有关本地验证的限制以及部署前需采取的步骤,请参阅了解验证范围。