【问题标题】:How to import a remote resource while performing an apply in Terraform?如何在 Terraform 中执行应用时导入远程资源?
【发布时间】:2021-10-14 23:11:27
【问题描述】:

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

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

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

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

【问题讨论】:

  • 我有点难以理解为什么apply 不为您创建B,作为A 的依赖项。你能分享更多细节吗?
  • @MohammadJafarMashhadi 我添加了一些细节。
  • 之前没用过Azure,但是如果和AWS类似的话,你或许可以自己创建存储容器,这样你就可以拥有它并自定义它
  • resource "azurerm_storage_container" xxx { storage_account_name = azurerm_storage_account.xxx.name}

标签: terraform


【解决方案1】:

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

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

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

我真的希望其他人能提供更好的答案:|

【讨论】:

    猜你喜欢
    • 2019-03-16
    • 2022-10-19
    • 2020-01-23
    • 2020-12-16
    • 2020-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-27
    相关资源
    最近更新 更多