在Terraform中执行应用时如何导入远程资源?



我正在使用Terraform创建一些资源。创建资源的副作用之一是创建另一个资源(让我们称之为B)。问题是我无法访问B来在terraform中编辑它,因为terraform认为它"不在状态"。我也不能在terraform apply启动前的状态下导入B,因为B不存在。

在运行apply命令时,是否有办法将远程资源添加(导入)到状态?

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

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

不幸的是,我没有回答您在应用期间导入资源的具体问题。起程拓殖的基本前提是,它从创建管理资源。因此,在您可以将资源的当前状态导入到您的状态之前,您需要声明一个资源(在本例中为azurerm_storage_container)。

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

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

我真的希望别人可以用一个更好的答案出现tho: |

最新更新