首页 > 解决方案 > 如何在 Terraform 中执行应用时导入远程资源?

问题描述

我正在使用 Terraform 创建一些资源。创建资源的副作用之一是创建另一个资源(我们称之为 B)。问题是我无法访问 B 以在 terraform 中对其进行编辑,因为 terraform 将其视为“州外”。我也无法在terraform apply启动之前的状态下导入 B,因为 B 不存在。

是否有任何解决方案可以在运行apply命令时向状态添加(导入)远程资源?

我认为这是一个一般性问题,如果没有解决方案,我还可以分享我正在创建的资源的详细信息。

更多详细信息:当我使用 Terraform 在 Azure 上创建“存储帐户”并启用 static_website 时,Azure 会自动创建一个storage_container名为$web. 我需要编辑$web容器的属性之一,但 Terraform 告诉我它不在当前状态,需要导入。存储帐户是 A,容器是 B

标签: terraform

解决方案


不幸的是,对于您在申请期间导入资源的具体问题,我没有答案。Terraform 的基本前提是它从创建开始就管理资源。因此,您需要azurerm_storage_container声明一个(在本例中为 )资源,然后才能将该资源的当前状态导入您的状态。

在理想情况下,您可以先显式创建容器并指定存储帐户使用它,但快速查看文档并不表明这是一个选项(我认为您已经尝试过)。如果它没有在 Terraform 中公开,那可能是因为它没有被 Azure API 公开(免责声明:不是 Azure 用户)

我能想到的唯一(坏)答案是您在代码中定义一个数据资源,依赖于资源,它将能够拉回创建的容器的详细信息。然后,您可能有一个调用可以触发 CLI 命令的配置程序,使用从数据资源中获取的参数来允许您使用 Azure CLI 工具来编辑容器。azurerm_storage_container azurerm_storage_accountnull_resourcelocal-exec

我真的希望其他人可以提出更好的答案:|


推荐阅读