我正在迁移 Terraform 存储库中的某些内容,并将资源 A 替换为不同类型的资源 B。如果细节很重要,A 是 CloudFormation 堆栈,B 是同一事物的原生 Terraform 资源。
我想告诉 Terraform 在尝试创建资源 B 之前删除资源 A,因为它们设置了相同的东西,否则我会从 AWS 收到有关重复事物的错误。
我可以巧妙地使用它depends_on
来按照我想要的顺序删除它吗?
来自文档:
Depends_on 元参数指示 Terraform 在对声明依赖项的对象执行操作之前完成对依赖项对象的所有操作(包括读取操作)。
删除时是否反向执行相同的操作?因此,我可以这么说,B depends_on A
并让它在创建 B 之前对 A (删除) 执行所有操作吗?或者还有其他方法可以做到这一点?
目前,我只需要运行 2 次,让第一次失败。但感觉应该有一种方法可以在 1 次内完成这项工作……
答案1
如果您要替换现有资源的 Terraform 配置,则无需删除该资源。您可以从状态中删除资源 A,然后添加资源 B。以下步骤很有帮助:
- 运行
terraform state rm
以从 Terraform 状态中删除资源 A - 删除资源 A Terraform 配置代码
- 添加资源 B Terraform 配置代码
- 运行
terraform import
以将现有资源 B 的状态添加到状态