帮酷LOGO
  • 显示原文与译文双语对照的内容
A more friendly CloudFormation JSON and YAML Validator

  • 源代码名称:cfn-lint
  • 源代码网址:http://www.github.com/martysweet/cfn-lint
  • cfn-lint源代码文档
  • cfn-lint源代码下载
  • Git URL:
    git://www.github.com/martysweet/cfn-lint.git
  • Git Clone代码到本地:
    git clone http://www.github.com/martysweet/cfn-lint
  • Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/martysweet/cfn-lint
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
  • cfn-lint CircleCInpm versionnpm

    一个更加友好的CloudFormation JSON和YAML验证器

    cfn-lint 是用于改进你的CloudFormation开发周期的工具。 如果你在这里,你可以能会在CloudFormation给出错误之前等待 10分钟或者更多时间。 这里工具旨在消除浪费时间。 工具接受CloudFormation模板,并解析定义资源的属性之前定义的所有内部函数。

    这个工具可以在命令行使用 cfn-lint,也可以在另一个JavaScript应用程序中用作 MODULE 。

    注意:这个工具目前在AWS类型方面是敏感的,例如 AWS:: lambda:: 函数!= AWS:: lambda:: function 。

    安装

    你可以使用 npm 安装:

    $ npm install -g cfn-lint

    如果你得到 /usr/bin/env: 'node': No such file or directory 确保你的系统已经安装 NodeJs 。 在Debian系统上,由于命名空间问题,你可能需要将 node 链接到 nodejs 。 ln -s/usr/bin/nodejs/usr/bin/node ) 。

    :如何使用

    cfn-lint validate my_template.yaml

    cfn-lint validate my_template.json

    cfn-lint validate my_template.yaml --parameters key="my value",key2=value2,key3=3

    cfn-lint validate my_template.yaml --parameters key="my value",key2=value2 --no-guess-parameters

    cfn-lint validate my_template.yaml --pseudo AWS::StackName="My-Stack"

    cfn-lint validate my_template.yaml --parameters key="my value" --pseudo AWS::Region=ap-northeast-1,AWS::AccountId=000000000000

    cfn-lint docs AWS::Lambda::Function

    cfn-lint docs AWS::Lambda::Function.Code

    cfn-lint docs AWS::Lambda::Function.Code.S3Bucket

    注意:目前和 --pseudo的顺序是重要的。 这应该在以后的版本中解决。

    示例输出

    0 infos
    0 warn
    2 crit
    Resource: Resources> MyInstance> Properties
    Message: Required property ImageId missing for type AWS::EC2::Instance
    Documentation: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance.html
    Resource: Resources> MyInstance> Properties
    Message: Required property Value missing for type Tag
    Documentation: http://docs.aws.amazon.com/search/doc-search.html?searchPath=documentation-guide&searchQuery=Tag&x=0&y=0&this_doc_product=AWS+CloudFormation&this_doc_guide=User+Guide&doc_locale=en_us#facet_doc_product=AWS%20CloudFormation&facet_doc_guide=User%20Guide
    Template invalid!

    标志

    输入参数

    --parameters <param values>: 提供在验证模板时使用的逗号分隔的key=value参数的列表。 如果在这里处未指定参数,cfn-lint 将基于参数和on的类型猜测模拟值。 e.g. --parameters InstanceType=t2.micro,Memory=512

    AWS伪参数重写

    --pseudo <psuedo param values> :提供一个逗号分隔的key=value对的列表,用于验证模板时使用的CloudFormation伪参数。 e.g. --pseudo AWS::Region=ap-southeast-2

    参数猜测

    --guess-parameters: 如果在模板中没有任何默认值,则猜测任何参数。 参数将根据它的AllowedValues 或者 Type 被猜测/模仿。 这是默认行为;它只作为explicitness的选项包含。

    --no-guess-parameters: 如果参数没有默认值,则禁用它们的猜测。 如果在CLI中没有提供它们,则会引发一个关键错误,而不是被所忽略的参数值。

    --only-guess-parameters <param names> :只猜测提供的参数,并禁用没有默认的猜测。 将为丢失的参数引发一个关键错误,如 above 。 e.g. --only-guess-parameters InstanceType,Memory

    用户定义的资源属性

    --custom-resource-attributes <attribute values> :使用资源类型表示法( 比如 ) 提供逗号分隔的资源属性的逗号分隔的key=value对。 AWS::CloudFormation::CustomResource.SomeAttribute ) 或者逻辑名称表示法( 比如 。 SomethingPretty.SomeAttribute ) 及其预期值,在验证模板时使用。 如果未在此指定自定义资源属性,cfn-lint 将猜测模拟值。 e.g. --custom-resource-attributes AWS::CloudFormation::CustomResource.SomeAttribute=[1,2],Custom::Dooby.SomeAttribute=[1,2],SomethingPretty.SomeAttribute=123

    详细输出

    --verbose: 在模板解析失败时提供详细输出和堆栈跟踪。

    ** 注释 **: 包含逗号的参数值必须使用反斜杠( 比如 ) 转义。 根据命令行解释器的不同,你可能必须使用双引号或者双引号,或者用引号,Bash Bash Bash和其他 Bourne ( 比如 -based ) 。--parameters'Param1=[1,2,3]' ) 。

    : cfn-lint能做什么?

    • 读取 JSON + YAML ( 包括YAML短格式)
    • 检测无效的属性名称
    • 检测无效的引用
    • 检测无效映射
    • 检测无效格式
    • 缺少或者无效的AWSTemplateFormatVersion
    • Fn::FindInMap
    • Fn::GetAtt
    • Fn::GetAZs
    • Fn::Join
    • Fn::Base64
    • Fn::Sub
    • Fn::If
    • Fn::Equals
    • Fn::Not
    • Fn::Or
    • Fn::And
    • Fn::ImportValue
    • Fn::Select
    • Fn::Split
    • 条件支持
    • 引用
    • 转到 命令行 文档( 参见 above 示例)
    • 检测无效的属性类型
    • 检测缺少的属性

    功能待办事项

    • 读取无效JSON时详细解析错误
    • Fn::ImportValue - 支持CLI注入( 类似于当前的Params )
    • 测试条件和属性检查的测试覆盖
    • 重构属性检查更清晰
    • 循环依赖检查
    • 扩展验证标志( 调用 AWS CloudFormation API )
    • 监视文件标志在文件保存时重新验证
    • 在生成过程中下载最新资源

    可以很好,但目前不可能使用的特性

    • 检测条件必需属性( AWS资源规范中不存在信息)

    API

    cfn-lint 也可以用作 node 库:

    const cfnLint =require('cfn-lint')

    以下方法被认为是 public:

    cfnLint.validateFile(fileName: string, options?:ValidationOptions): ValidationResult

    验证文件,并返回带有结果的ValidationResult 。

    cfnLint.validateJsonObject(object: any, options?:ValidationOptions): ValidationResult

    验证一个对象,并返回带有结果的ValidationResult 。 对象是你可以能从 JSON.parse的Cloudformation模板获得的内容。

    interfaceValidationOptions {
     parameters?: {
     Param1:Param1value,
     //.. . }
     pseudoParameters?: {
     'AWS::Region':'ap-southeast-2',
     //.. . },
     guessParameters?:string[] |undefined// default undefined}

    在验证之前,parameters 传入模板参数,pseudoParameters 用于重写AWS的伪参数,比如 AWS::RegionAWS::AccountId 等。

    如果 guessParameters 设置为参数名列表,则如果没有在 parameters 或者 guessParameters 选项中指定任何参数,则会引发关键错误。 空列表可以用于强制所有参数都必须在 parameters 中指定。 如果 undefined 保留默认的松散行为,那么参数就可以以根据需要进行猜测,而不会导致错误。

    interfaceErrorRecord {
     message:string,
     resource:string,
     documentation:string}interfaceValidationResult {
     templateValid:boolean,
     errors: {
     crit:ErrorRecord[],
     warn:ErrorRecord[],
     info:ErrorRecord[]
     },
     outputs: {
     [outputName:string]:string;
     };
     exports: {
     [outputName:string]:string;
     };
    }

    表示验证的结果。

    部署你的模板

    CloudFormation往往会涉及到一些线索和错误。 为了启用快速开发,可以以使用下面的方法防止所有必须删除和重新创建整个堆栈的'回滚'场景。

    使用以下内容部署模板,NAME 将它的调用为 final 堆栈。

    Resources:
     MyBucket:
     Type: AWS::S3::Bucket

    对模板进行每次更改后,只需更新刚刚创建的堆栈。 如果由于某些原因而部署堆栈失败,你可以执行'更新堆栈'操作,而不需要从头开始重新创建栈。 你还可以使用这里方法在开发阶段中保留参数。 这里方法将使用AWS控制台或者CLI工具进行工作。

    常见问题解答

    没有为模板抛出错误,但在部署时仍然失败 ! 这个工具没有意义? !

    希望 cfn-lint 在部署模板之前发现了一些错误,但是在部署之前捕捉每个错误是非常棘手的。 通过解释如何从CloudFormation中获取错误,请帮助解释社区,以下信息将帮助添加检查:

    • 导致错误的资源/语句
    • 从CloudFormation抛出的错误
    • 解决错误的工作资源/语句

    你可以在问题页面中添加一个问题。 感谢你帮助 !

    不提供这个功能

    of cloudformation validate-template API只检查模板的有效性,这包括内部函数。资源类型和一般结构的预期参数。 AWS不检测不正确的资源属性名或者不正确的资源属性类型( 比如 。 字符串,布尔值,通常只在CloudFormation尝试部署不正确配置的资源时检测到。

    cfn-lint如何知道什么是有效的?

    AWS为每个区域提供一个CloudFormation规范文件。 cfn lint使用美国东部( N 。 弗吉尼亚) CloudFormationResourceSpecification.json 文件在 AWS CloudFormation资源规范页面上可用。 目前,该JSON文件的更新是手动的,并根据需要将它的放入每个主要的。次要的或者 Bug 修复版本中。

    还有什么问题?

    Github问题页面上提出问题。

    插件开发

    语言

    这个项目是用 TypeScript 编写的,它是JavaScript的超集,允许在编译时进行类型检查。 项目目前旨在支持 node 4和更高版本。

    数据驱动的单元测试

    可以使用 npm test 运行测试。 每个模板都应该有一个测试用例,例如 Fn::Join的无效参数或者 Ref的错误引用。 测试依赖于 Mochachai

    IDE设置

    如果使用JetBrains编辑器,则可以为 mocha 测试套件设置以下运行配置:

    node 选项:无额外的mocha 选项: 无测试目录:/lib/test

    的本地测试

    环境变量

    • 调试- 设置为接收运行时调试消息
    $ npm link
    $ cfn-lint <some command>

    资源属性模拟

    为了模拟在部署之前捕获错误的内在函数,属性和资源的属性被模仿。 这可以在 assignResourcesOutputs()validator.es6的和 assignParameterOutputs() 中看到。 一个资源总是有 mock-ref-RESOURCENAME的引用,并且将附加其他可以与 Fn::GetAtt 函数一起使用的属性。 这样可以在部署模板之前检查特定资源的属性是否存在。

    内部函数

    每个内部函数都有一个 doIntrinsicXYZ(ref, key) 签名,由 resolveIntrinsicFunction(ref, key) 函数调用。 doIntrinsic.. 函数应返回函数的解析值。 例如对于 fn:: sub,"My ${MyInstance}"的输入将返回类似 "My i-0a0a0a0a0a的字符串。

    发布说明

    • 对于每个 PR,编辑 CHANGELOG.md 文件,将固定的。更改的或者添加的消息添加到未发布的块中。
    • 为将要包含在版本中的所有问题和tmodel创建一个里程碑,例如,v1.7.0
    • 创建发布( 分支 release-VERSION )的公关,将 CHANGELOG.md的内容移动到新版本,更新文件底部的链接。
    • 确保最新CFN规范在 aws_resources_specification.json 文件中有( AWS CloudFormation资源规范 ),如果需要则更新。
    • 验证更改并使用标题合并到 masterUpdate CHANGELOG for VERSION (#PRNUM)
    • 转到释放并单击"起草新版本"。
    • 输入版本的标签和相同的版本,例如 v1.7.0
    • 将版本的CHANGELOG.md 文件的部分复制到描述部分。
    • 单击发布发布。这将生成一个发布包到 npm 。
    • 然而,单元测试通常可以以信任,一个快速测试不会有任何危害,可以能会捕捉到错误。 接下来,在一个干净的环境中测试发布,确保最新版本被提取。
    > docker run -it node/bin/bash
    $ npm install -g cfn-lint
    $ cat <<EOF> working.yaml
    Resources:
     MyBucket:
     Type: AWS::S3::Bucket
    EOF
    $ cfn-lint validate working.yaml
    $ cat <<EOF> failure.yaml
    Resources:
     MyBucket:
     Type: AWS::S3::Buckets
    EOF
    $ cfn-lint validate failure.yaml

    捐赠

    请查看 contributor的指南,了解有关如何启动的更多信息。

    翻译

    这里文档可以用于:

    如果你希望将这里文档翻译为其他语言,我们欢迎你的贡献 !




    Copyright © 2011 HelpLib All rights reserved.    知识分享协议 京ICP备05059198号-3  |  如果智培  |  酷兔英语