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