问题描述
情况:
我们在 Service A
中部署了 Service B
和 same AWS account
。他们都希望在此帐户中部署另一个包含 datalake D (Athena) 的堆栈。
Service A 和 Service B 的 cloudformation 模板是否应该依赖于 Datalake D?如果是这样,你会怎么做?或者他们应该假设它存在并且只管理他们的下游资源?
感觉你应该引用它,因为如果我们将服务 A 移到另一个帐户,人们可能会忘记这种依赖关系。另一方面,我们不希望服务 A 和 B 都部署堆栈,因为它只需要一次。
解决方法
假设A、B、D都是在同一个区域和账户创建的堆栈,你可以使用cross-stack references将D与A和B链接起来。
在这个解决方案中,堆栈 D 将 export 其输出。例如:
Outputs:
OutputFromD:
Value: <a-value-to-be-exported>
Export:
Name: <export-name>
然后,在 A 和 B 中需要 OutputFromD
的地方,可以使用 ImportValue。例如,在 A 和 B 中:
Resources:
SomeResource:
Properties:
SomeProperty: !ImportValue <export-name>