如何通过Terraform在AWS ECS任务定义中配置环境变量
问题根因
ECS任务定义的environment字段要求每一个环境变量对象必须同时包含name和value两个必填属性,你当前的配置中仅填写了name属性,缺少value,该条无效配置会被AWS后台直接过滤,因此最终生成的任务定义中没有环境变量。
修正方案
单个环境变量的正确写法如下:
"environment" : [ { "name" : "自定义变量名", "value" : "对应变量值" }, // 支持同时添加多个环境变量,也可以直接引用Terraform变量传值 { "name" : "DEPLOY_STAGE", "value" : "${var.stage}" } ],
完整修正后的Terraform资源配置参考:
resource "aws_ecs_task_definition" "data-check" { family = "${var.stage}-data-check" execution_role_arn = aws_iam_role.ecs_data_check_role.arn container_definitions = <<TASK_DEFINITION [ { "name" : "data-check-task", "image" : "${local.image_name}", "essential" : true, "environment" : [ { "name" : "CUSTOM_VAR", "value" : "this is value" } ], "logConfiguration" : { "logDriver" : "awslogs", "options" : { "awslogs-region" : "${var.aws_region}", "awslogs-group" : "/ecs/${local.ecs_name}", "awslogs-stream-prefix" : "ecs" } } } ] TASK_DEFINITION cpu = 1024 memory = 2048 requires_compatibilities = ["FARGATE"] network_mode = "awsvpc" }
额外提示:如果是密码、Token这类敏感配置,不要放在environment字段中,建议使用secrets字段关联AWS Secrets Manager或者Systems Manager Parameter Store的敏感参数,避免明文泄露。
内容的提问来源于stack exchange,提问作者Joey Yi Zhao
相关产品推荐
相关产品推荐

