簡體   English   中英

如何在 Terraform 中使用 JSON 編碼指定解組類型?

[英]How do I specify unmarshall types with JSON encode in Terraform?

我正在構建一個 fargate 集群,並且在遵循 aws_ecs_task_definition 部分的文檔時遇到了困難 ( https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/ecs_task_definition )

│ Error: ECS Task Definition container_definitions is invalid: Error decoding JSON: json: cannot unmarshal string into Go struct field ContainerDefinition.Cpu of type int64
│ 
│   with aws_ecs_task_definition.app,
│   on ecs.tf line 40, in resource "aws_ecs_task_definition" "app":
│   40:   container_definitions = jsonencode([
│   41:     {
│   42:       "name": "${var.prefix}",
│   43:       "image": "${var.app_image}",
│   44:       "cpu": "256",
│   45:       "memory": "${var.fargate_memory}",
│   46:       "networkMode": "awsvpc",
│   47:       "logConfiguration": {
│   48:           "logDriver": "awslogs",
│   49:           "options": {
│   50:             "awslogs-group": "${aws_cloudwatch_log_group.ecs.name}",
│   51:             "awslogs-region": "${var.region}",
│   52:             "awslogs-stream-prefix": "ecs"
│   53:           }
│   54:       },
│   55:       "environment": [
│   56:         {"name": "ENV_RUNNER_SLEEP_SECS", "value": "${var.app_env_runner_sleep_secs}"}
│   57:       ]
│   58:     }
│   59:   ])

錯誤指向 CPU 的值。 這通常是另一個變量,但我只是測試輸入以嘗試使其通過。 令人討厭的是,如果我將值設置為一個數字,我會得到一個不同的錯誤: cannot unmarshal number into Go struct field KeyValuePair.Environment.Value of type string

有任何想法嗎?

您對第一個錯誤的分析是正確的:這是由於cpu必須是整數/數字/int64。 這意味着您需要將其指定為"cpu": 256

然后第二個錯誤告訴您不要查看ContainerDefinition.Cpu而是KeyValuePair.Environment.Value這是"environment": [ ... ]部分。 這里的問題是鍵和值必須是string s,即使你寫了"${var.app_env_runner_sleep_secs}" terraform 仍然輸出一個數字,盡管"圍繞它。要解決這個問題,你需要在參數周圍放置一個tostring"value": "${tostring(var.app_env_runner_sleep_secs)}"

請注意,另外,根據您的 terraform 版本,通過刪除所有位置的"${...}"來編寫例如"awslogs-region": var.region更短更干凈。

暫無
暫無

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

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