Amazon web services 如何快速有效地调试CloudFormation模板?
CloudFormation是一个功能强大的AWS产品,它允许通过编程方式创建AWS资源堆栈,例如使用单个API调用创建或。它非常强大。使用它肯定被认为是一种良好的AWS实践,尤其是当它与调试结合使用时,它会让我感到不舒服 以生产为例:库存对我不起作用。我不知道为什么。我相信这是一件简单的事情,因为它几乎总是如此。我的问题不在于我不知道出了什么问题。这是因为堆栈需要20到30分钟才能失败,然后再需要3到4分钟才能删除,假设它完全正确地删除了资源Amazon web services 如何快速有效地调试CloudFormation模板?,amazon-web-services,amazon-cloudformation,Amazon Web Services,Amazon Cloudformation,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已经在其自己的文档中概述了这些内容,因此我不再重复:
- 如果您正在开发或使用任何第三方自定义资源,请使用语言平台的适当库编写单元测试,以确保应用程序逻辑在所有用例中都按预期运行
- 请注意,根据底层API调用的行为,单个资源创建/更新/删除的时间在不同的资源类型之间可能存在很大差异。例如,一个复杂的资源有时需要30-60分钟才能创建/更新/删除,而一个复杂的资源则需要几秒钟才能更新
- 单个资源在其实现中可能存在bug/问题/限制,在单独测试时,调试和开发解决方法要比在更大的堆栈中容易得多。请记住限制,例如取决于您的个人AWS帐户设置,或取决于您创建堆栈的区域