[英]Referencing resource instances created by "for_each" in Terraform
[英]How to write the Terraform resource address for resource created with for_each?
我們在 GCP 中有現有的基礎設施,並希望將其導入 Terraform 以擁有 IaC。
這是我們創建的 Terraform 文件的一部分,PubSub 主題已經存在於 GCP 中。
locals {
gcp_pubsub_topics = [
"aws-rds-export-s3"
]
}
resource "google_pubsub_topic" "pubsub_topics" {
for_each = toset(local.gcp_pubsub_topics)
project = var.gcp_target_project_id
name = each.value
labels = {
env = terraform.workspace
}
}
當我運行terraform import google_pubsub_topic.pubsub_topics["aws-rds-export-s3"] aws-rds-export-s3
時,顯示以下錯誤
terraform import $(./var.sh) google_pubsub_topic.pubsub_topics["aws-rds-export-s3"] aws-rds-export-s3
╷
│ Error: Index value required
│
│ on <import-address> line 1:
│ 1: google_pubsub_topic.pubsub_topics[aws-rds-export-s3]
│
│ 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
我不明白似乎是什么問題並檢查了文檔並嘗試了不同的語法。
哦,好吧,您需要將地址用引號括起來。
terraform import $(./var.sh) 'google_pubsub_topic.pubsub_topics["aws-rds-export-s3"]' aws-rds-export-s3
Terraform 的命令行正在由您的 shell(在 Unix 系統上)或由您的 shell 和 Terraform 內部實現平台的參數解析約定(在 Windows 上)的一些邏輯的混合來解析。
因此,根據您使用的平台和外殼,答案會有所不同。
對於 Windows 命令提示符:
terraform import google_pubsub_topic.pubsub_topics[\"aws-rds-export-s3\"] aws-rds-export-s3
對於 Windows 上的 PowerShell:
terraform import --% google_pubsub_topic.pubsub_topics[\"aws-rds-export-s3\"] aws-rds-export-s3
對於典型的 Unix shell,比如 Bash:
terraform import 'google_pubsub_topic.pubsub_topics["aws-rds-export-s3"]' aws-rds-export-s3
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.