我试图自动化我的服务器设置过程,所以我最终考虑使用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帐号吗?
答案 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文档来处理模板依赖项。