如果创建的模板无效,为什么要使用AWS CloudFormation Template生成器?

时间:2015-03-19 20:46:50

标签: amazon-web-services amazon-cloudformation

我试图自动化我的服务器设置过程,所以我最终考虑使用CloudFormation。我启动了CloudFormation模板服务,以便它可以内省我当前的设置(在帐户A中)并生成一个模板供我在新帐户(帐户B)中使用。我正在从俄勒冈州建立模板并尝试在俄勒冈州运行它。完整模板在这里(真实IP,帐号和密码已被清除):https://gist.github.com/cannikin/9801aa3451d538be1689

当我尝试基于该模板启动堆栈时,我得到15个CREATE_FAILED事件,然后整个事情回滚。看一些消息,我看到很多AWS::EC2::SecurityGroupEgress | egress3 | Encountered unsupported property CidrIP如果我在模板中查找egress3

"egress3": {
  "Type": "AWS::EC2::SecurityGroupEgress",
  "Properties": {
    "GroupId": {
      "Ref": "sgweb"
    },
    "IpProtocol": "-1",
    "CidrIP": "0.0.0.0/0"
  }
}

这似乎是一个非常简单的规则:允许到任何IP的出站连接。我甚至没有创建该规则,它只是新安全组的默认出站规则(入站规则是您要限制到某些IP地址的规则)。

当它是由自己的模板生成器创建时,它是如何无效的?我不应该包括出口规则吗?

我在那里看到我的帐户A帐号几次(123456789),可能需要换成帐户B帐号吗?

2 个答案:

答案 0 :(得分:2)

它无效,因为您有语法错误。 "CidrIP"应为"CidrIp"。例如https://gist.github.com/cannikin/9801aa3451d538be1689#file-cloudformation-template-L460

我建议您先使用aws cli运行“测试”。例如:

aws cloudformation validate-template --template-body file://foo.json

答案 1 :(得分:0)

即使验证测试成功,您的cloudformation模板也可能总是由于未说明的原因而失败。有时,aws资源具有紧密的依赖关系,这些依赖关系只有在部署它们时才会浮出水面。验证模板操作仅检查模板语法,在某种程度上验证功能。但是,它并不总是对运行时资源具有完全可见性。我们可以尝试的最好方法是确保根据AWS文档来处理模板依赖项。