簡體   English   中英

使用 for_each 將變量傳遞給模塊時,jsondecode 失敗

[英]jsondecode fails when using for_each to pass variables to module

我正在嘗試將 for_each 與創建數據狗綜合測試的 terraform 模塊一起使用。 列出 s3 存儲桶中的對象名稱並作為 for_each 的集合傳遞。 模塊使用調用模塊傳入的 each.value 作為鍵讀取每個文件的內容。 我在測試期間對模塊中的 s3 對象鍵值進行了硬編碼,它正在工作。 當我嘗試從 main.tf 調用模塊時,從集合中動態傳遞鍵名它失敗並出現以下錯誤。

│ Error: Error in function call
│
│   on modules\Synthetics\trial2.tf line 7, in locals:
│    7:   servicedef  = jsondecode(data.aws_s3_object.tdjson.body)
│     ├────────────────
│     │ data.aws_s3_object.tdjson.body is ""
│
│ Call to function "jsondecode" failed: EOF.

主文件

data "aws_s3_objects" "serviceList" {
  bucket = "bucketname"
}
module "API_test" {
  for_each = toset(data.aws_s3_objects.serviceList.keys)
  source  = "./modules/Synthetics"
  
  S3key   = each.value
  }

模塊

data "aws_s3_object" "tdjson" {
  bucket = "bucketname"
  key    = var.S3key
}

locals {
  servicedef  = jsondecode(data.aws_s3_object.tdjson.body)
  Keys        = [for k,v in local.servicedef.Endpoints: k]

}

關於這里有什么問題的任何線索?

謝謝

查看有關aws_s3_object 數據源的注釋:

對象的內容( body字段)僅適用於具有人類可讀Content-Typetext/*application/json )的對象。 這是為了防止打印不安全的字符並可能下載大量數據,這些數據將被丟棄以支持元數據。

由於它成功獲取了數據源(沒有拋出錯誤),但正文為空,這很可能是您的問題。 確保您的 S3 對象將Content-Type元數據設置為application/json 這是有關如何通過 CLI 執行此操作的 Stack Overflow 問題/答案 您也可以通過 AWS 控制台、API 或 Terraform(如果您通過 Terraform 創建對象)來執行此操作。

編輯:我發現了另一個問題。 查看將for_eachtoset一起使用的語法:

resource "aws_iam_user" "the-accounts" {
  for_each = toset( ["Todd", "James", "Alice", "Dottie"] )
  name     = each.key
}

重要的是您應該使用each.key而不是each.value

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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