簡體   English   中英

如何為使用 for_each 創建的資源編寫 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM