使用Terraform的count和for_each函数导入通过定义资源的方法
首先或者首要的是
大家好。今天我要介绍一个小技巧,使用terraform import命令将现有资源导入到Terraform管理下。
当使用Terraform进行实现时,在例如将多个资源放置在多个区域或可用区的用例中,许多人可能会使用count或for_each进行配置。使用这些count或for_each定义的资源时,如果尝试将现有环境直接导入到Terraform管理下,可能会导致以下命令出错。我想在这里介绍解决这种情况的方法。
$ terraform import google_compute_subnetwork.private["tokyo"] \
${GOOGLE_PROJECT}/asia-northeast1/matt-private-snet-tokyo
╷
│ Error: Index value required
│
│ on <import-address> line 1:
│ 1: google_compute_subnetwork.private[tokyo]
│
│ Index brackets must contain either a literal number or a literal string.
╵
For information on valid syntax, see:
https://www.terraform.io/docs/cli/state/resource-addressing.html
使用count和for_each定义资源的导入方法
总的来说,如果在输出示例中像'(单引号)那样围绕Terraform资源名称,将会得到作为一种解决方案。这样做将按预期导入现有资源,并且非常顺利。
$ terraform import 'google_compute_subnetwork.private["tokyo"]' \
${GOOGLE_PROJECT}/asia-northeast1/matt-private-snet-tokyo
Acquiring state lock. This may take a few moments...
Import successful!
The resources that were imported are shown above. These resources are now in
your Terraform state and will henceforth be managed by Terraform.
Releasing state lock. This may take a few moments...
當不小心導入到錯誤的資源時,這就是我的廢話。
在这种情况下,请先将错误导入的资源从Terraform管理下移除,然后重新导入正确的资源。有关从Terraform管理下移除资源的步骤,请参考下文。
结束
这个信息可能有些晚了,不知道你觉得怎么样。或许问问Google老师就能解答,但这件事情也发生在我身上,所以我还是决定写一篇文章。希望即使是这样一篇文章也能帮助到某些人。
我在介绍中提到了一些关于使用terraform import命令将现有环境导入到Terraform管理下的小诀窍。
-
- Terraform は、HashiCorp, Inc. の米国およびその他の国における商標または登録商標です。
- その他、記載されている会社名および商品・製品・サービス名は、各社の商標または登録商標です。