[英]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.