簡體   English   中英

Terraform ECS任務定義jsonencode問題

[英]Terraform ECS Task Definition jsonencode issue

我在申請 terraform 時收到此錯誤。這顯然是我的 env_Vars 有問題。 我試過用引號或不帶引號來命名和價值。

錯誤:ECS 任務定義 container_definitions 無效:解碼 JSON 時出錯:json:無法將數字解組為 Go 結構字段 KeyValuePair.Environment.Value 類型字符串

當地人:

locals {
  task_name = "${var.project_name}-${var.environment}-pgadmin"
  env_vars = [
    {
      name  = "ENV",
      value = var.environment
    },
    {
      name  = "POSTGRES_HOST",
      value = module.rds.db_address
    },
    {
      name  = "POSTGRES_USER",
      value = module.rds.db_username
    },
    {
      name  = "POSTGRES_PORT",
      value = module.rdsdb_port
    }
  ]
}

任務定義模板:

data "template_file" "task-definition" {

template = file("${path.module}/container_definition_template.json.tpl")

  vars = {
    container_name        = local.task_name
    container_image       = "dpage/pgadmin4"
    container_port        = 3001
    env_variables         = jsonencode(local.env_vars)
    secrets               = jsonencode(local.secrets)
  }
}

任務定義:

resource "aws_ecs_task_definition" "pgadmin_task_definition" {
  family                = local.task_name
  container_definitions = data.template_file.task-definition.rendered
  task_role_arn         = aws_iam_role.ecsTaskRole.arn

  network_mode             = "awsvpc"
  cpu                      = 1024
  memory                   = 2048
  requires_compatibilities = ["FARGATE"]
  execution_role_arn       = aws_iam_role.ecsTaskExecutionRole.arn
}

實際的 json 模板是:

 [
  {
    "name": "${container_name}",
    "image": "${container_image}",
    "startTimeout": 120,
    "logConfiguration": {
      "logDriver": "awslogs",
      "options": {
        "awslogs-group": "${aws_logs_group}",
        "awslogs-region": "${aws_region}",
        "awslogs-stream-prefix": "${aws_log_stream_prefix}"
      }
    },
    "environment": ${env_variables},
    "secrets": ${secrets},
    "portMappings": [
      {
        "containerPort": ${container_port},
        "hostPort": ${container_port}
      }
    ]
  }
]

我認為發生這種情況是因為module.rdsdb_portlocal.env_vars中的數字,而不是字符串。 您可以嘗試:

      value = tostring(module.rdsdb_port)

暫無
暫無

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

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