Cloudformation 对共享资源的依赖

问题描述

情况

我们在 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>