Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 如何快速有效地调试CloudFormation模板?_Amazon Web Services_Amazon Cloudformation - Fatal编程技术网

Amazon web services 如何快速有效地调试CloudFormation模板?

Amazon web services 如何快速有效地调试CloudFormation模板?,amazon-web-services,amazon-cloudformation,Amazon Web Services,Amazon Cloudformation,CloudFormation是一个功能强大的AWS产品,它允许通过编程方式创建AWS资源堆栈,例如使用单个API调用创建或。它非常强大。使用它肯定被认为是一种良好的AWS实践,尤其是当它与调试结合使用时,它会让我感到不舒服 以生产为例:库存对我不起作用。我不知道为什么。我相信这是一件简单的事情,因为它几乎总是如此。我的问题不在于我不知道出了什么问题。这是因为堆栈需要20到30分钟才能失败,然后再需要3到4分钟才能删除,假设它完全正确地删除了资源 我错过了什么?我知道--禁用回滚标志,并像氧气一样

CloudFormation是一个功能强大的AWS产品,它允许通过编程方式创建AWS资源堆栈,例如使用单个API调用创建或。它非常强大。使用它肯定被认为是一种良好的AWS实践,尤其是当它与调试结合使用时,它会让我感到不舒服

以生产为例:库存对我不起作用。我不知道为什么。我相信这是一件简单的事情,因为它几乎总是如此。我的问题不在于我不知道出了什么问题。这是因为堆栈需要20到30分钟才能失败,然后再需要3到4分钟才能删除,假设它完全正确地删除了资源


我错过了什么?我知道
--禁用回滚
标志,并像氧气一样使用它。很久以前,我就学会了用cfn信号包装出口信息,然后像扔沉船上的压舱物一样扔出去。如何使模板调试过程更快,或者在出错半小时后我一直无法注意到自己的错误?

使用AWS CLI工具中的命令。它只验证您的模板是否是有效的JSON或YAML,而不验证您的键和值是否正确(例如,不检查键中是否有拼写错误)

晚会迟到了,但我可能还要补充一点,花点时间配置和学习您的编辑器是值得的。我知道这个答案听起来很可笑,但不妨试试

在我的例子中,有了vim,我花了一些时间安装json语法插件,并且(最终)理解了折叠技术以轻松导航大型CF文件,我的表现就好多了。我现在建议使用拼写错误(不应该使用逗号等),颜色高亮显示可以节省大量时间,提供清晰的视觉线索


这可能有助于减轻语法错误,但模板内的逻辑错误最好由其他工具修复。希望有一天CF上会有一个“预览”模式。

您看过包含在中的AWS CloudFormation模板编辑器了吗?它有语法突出显示、语句完成和部署到AWS CloudFormation。

一年后的另一个选择是将这些模板抽象到第三方库,例如。该库为您构造JSON负载,并在此过程中进行大量验证。这也解决了“Wow管理1000行JSON文件确实很糟糕”的问题。

如果您处理的是EC2机器,那么我建议您登录EC2机器并跟踪boot.log文件(/var/log/boot.log in RHEL6/Centos)。此文件将随所有shell活动(如:安装、下载文件、复制文件等)一起更新

此外,使用编辑器可以获得JSON的树表示形式。这有助于检查JSON元素的顺序


更新文件时,请始终使用诸如或实际版本控制系统之类的工具,以确保不会意外更改可能会破坏脚本的内容。

去年12月,Cloudformation新增了一项新功能。这些新类型允许您的模板执行更强的数据检查,并且在创建资源和嵌套的Cloudformation堆栈时也可以“快速失败”。当使用新的方法传入无效值时,您还可以提供更好的人类可读的自定义错误消息

新类型在处理各种VPC资源时特别有用。您可以确保模板的参数是正确的类型,并且明确表示只需要一个值而不是一个列表

例如:

"Parameters" : {
  "SingleGroup": { "Type": "AWS::EC2::SecurityGroup::Id", ...},
  "GroupList": {"Type": "List<AWS::EC2::SecurityGroup::Id>", ...}
}
“参数”:{
“单组”:{“类型”:“AWS::EC2::SecurityGroup::Id”,…},
“组列表”:{“类型”:“列表”,…}
}

您还可以使用amazon提供的CloudFormation Designer:

只需将模板(JSON)粘贴到“模板”窗格上,然后单击勾号符号来验证模板。任何错误都将显示在“错误”窗格中

希望这有帮助

我怎样才能使模板调试过程更快,或者在我犯了错误半个小时后,我会永远注意到自己的错误吗

以下是一些最佳实践建议,特别关注于提高复杂CloudFormation模板开发的迭代速度:

使用CloudFormation工具验证模板和堆栈更新 AWS已经在其自己的文档中概述了这些内容,因此我不再重复:

这一步的重点是在实际执行堆栈创建/更新之前捕获明显的语法或逻辑错误

隔离测试资源 在复杂堆栈中使用任何单个CloudFormation资源之前,请确保您首先在较小的独立堆栈中测试其行为,从而全面了解该资源的创建/更新/删除行为,包括使用限制和典型的启动/拆卸时间

  • 如果您正在开发或使用任何第三方自定义资源,请使用语言平台的适当库编写单元测试,以确保应用程序逻辑在所有用例中都按预期运行
  • 请注意,根据底层API调用的行为,单个资源创建/更新/删除的时间在不同的资源类型之间可能存在很大差异。例如,一个复杂的资源有时需要30-60分钟才能创建/更新/删除,而一个复杂的资源则需要几秒钟才能更新
  • 单个资源在其实现中可能存在bug/问题/限制,在单独测试时,调试和开发解决方法要比在更大的堆栈中容易得多。请记住限制,例如取决于您的个人AWS帐户设置,或取决于您创建堆栈的区域
以小增量构建复杂的堆栈 执行堆栈创建/upd时