我有两个 Terraform 模块 -
X
和 Y
- 其中 Y
取决于 X
通过 terraform_remote_state
数据源。
X
自然会在管道中的Y
之前部署,这意味着只要X
发生更改导致资源被重新创建或删除,管道就会失败。在这种情况下,无法删除 X
中的资源,因为它已被 Y
中的某些资源使用。
这个问题一般是如何解决的?我认为首先使用
terraform_remote_state
是一种反模式?
将基础设施声明拆分为可独立应用的不同配置时,仔细选择划分点非常重要,以便不同的配置真正可独立应用。 Terraform 一次仅适用于一种配置,因此它无法自动解决需要同时更改两种不同配置的更改。
这本质上并不是terraform_remote_state
的问题——使用
data
块依赖于其他地方管理的对象时可能会出现同样的问题。这里的根本问题似乎是 Y 被声明为管理实际上可能应该由 X 管理的东西,因为它需要立即更改以响应 X 中的其他更改。具体如何解决这个问题将取决于您在实践中使用的基础设施对象。重新组织哪些对象由哪些配置管理可能会解决问题,但也可能会引入另一个类似的问题。有时,成功地将基础设施拆分为两个独立的单元需要不同的设计方法,例如X 和 Y 都依赖某个第三个单元,它为 X 和 Y 成功协作提供了某种方式。
如果您提出一个新问题,并准确命名您正在使用的资源类型并共享您的配置,那么您可能会得到更可行的答案。