terraform - 如何在 Terraform 中执行应用时导入远程资源?
问题描述
我正在使用 Terraform 创建一些资源。创建资源的副作用之一是创建另一个资源(我们称之为 B)。问题是我无法访问 B 以在 terraform 中对其进行编辑,因为 terraform 将其视为“州外”。我也无法在terraform apply
启动之前的状态下导入 B,因为 B 不存在。
是否有任何解决方案可以在运行apply
命令时向状态添加(导入)远程资源?
我认为这是一个一般性问题,如果没有解决方案,我还可以分享我正在创建的资源的详细信息。
更多详细信息:当我使用 Terraform 在 Azure 上创建“存储帐户”并启用 static_website 时,Azure 会自动创建一个storage_container
名为$web
. 我需要编辑$web
容器的属性之一,但 Terraform 告诉我它不在当前状态,需要导入。存储帐户是 A,容器是 B
解决方案
不幸的是,对于您在申请期间导入资源的具体问题,我没有答案。Terraform 的基本前提是它从创建开始就管理资源。因此,您需要azurerm_storage_container
声明一个(在本例中为 )资源,然后才能将该资源的当前状态导入您的状态。
在理想情况下,您可以先显式创建容器并指定存储帐户使用它,但快速查看文档并不表明这是一个选项(我认为您已经尝试过)。如果它没有在 Terraform 中公开,那可能是因为它没有被 Azure API 公开(免责声明:不是 Azure 用户)
我能想到的唯一(坏)答案是您在代码中定义一个数据资源,依赖于资源,它将能够拉回创建的容器的详细信息。然后,您可能有一个调用可以触发 CLI 命令的配置程序,使用从数据资源中获取的参数来允许您使用 Azure CLI 工具来编辑容器。azurerm_storage_container
azurerm_storage_account
null_resource
local-exec
我真的希望其他人可以提出更好的答案:|
推荐阅读
- python - 使用 pycharm 在 googlemaps 上绘图
- python - RuntimeError:无法使用来自“CPU”后端的参数运行“aten::to_dense”
- python - 连胜数低于 0
- ansible - 在ansible中获取已安装包列表和所需包列表之间的差异列表
- python - python:从文本文件创建字典:输入短文本并返回长文本
- python - 以键值格式加载 apache_superset 中的 json 数据
- ansible - 如何从ansible列表中过滤e过滤器字符串
- flutter - 如果使用 Getx,如何构建 Navigator()?
- matlab - 可视化/比较从 Matlab/Octave 到 matplotlib 的 numpy 数组
- reactjs - 反应原生的FlatList不从状态呈现数据