我有一个VPC(通过cloudformation创建),它为该VPC中创建的所有堆栈创建了一些公共共享基础架构,例如: ssh jumphost和ssh jumphost的安全组 .
我有一个单独的cloudformation模板,用于在现有VPC中创建Web App DB堆栈 .
如何从第一个模板中定义的常见ssh jumphost允许入站ssh 22到我的堆栈模板中的实例?
根据文档,在VPC中我需要指定 SourceSecurityGroupId
,它必须具有实际的VPC ID或使用 Ref
函数来查找 this 模板中定义的安全组的ID .
如何在同一个VPC中引用现有的SG,但是从另一个模板引用?
编辑:
通过NAT实例出站的相同问题 . NAT实例是在VPC级别提供的,但每个堆栈都需要其安全组才允许对NAT实例进行出站访问 .
2 回答
更新:自我原来的答案以来,这已经改变了 . 另请参阅Vor下面的答案,建议使用custom resources and Lambda来允许跨堆栈引用 .
Original Answer
不支持从另一个堆栈引用资源,因此您无法使用
Ref()
. 你可以使用SourceSecurityGroupId
(如你的建议)并将其作为parameter传递,和/或你可以使用SourceSecurityGroupName . 但是,Cloudformation无法以编程方式引用其他堆栈 .我喜欢使用Python,boto和troposphere library编写Cloudformation模板来解决代码中的问题 .
上一个答案的替代方法是创建一个CustomResource . 您可以在订阅SQS队列的EC2上运行服务 . 一旦CFN到达
CustomResource
,它将向您提供的主题发送SNS通知 . 然后,您的服务将收到通知,处理请求并回复 .还有一个图书馆,可以帮助你很多设置你的
custom service
https://github.com/aws/aws-cfn-resource-bridge