繁体   English   中英

Terraform - 在 ECS 容器定义中使用 SSM 参数

[英]Terraform - Use SSM Parameters in ECS container definition

我正在使用 Terraform 部署 ECS 任务,并希望在 ECS 任务的容器定义中使用 AWS SSM 参数。

我有 3 个 SSM 参数,我想用它们来覆盖 service.json 中定义的默认属性。 (端口、TEST_PROP_1、TEST_PROP_2)

有没有办法为容器定义环境变量提供这些 SSM 参数的 ARN?

Terraform资源:

resource "aws_ecs_task_definition" "testapp" {
  family                = "testapp"
  network_mode = "awsvpc"
  cpu = 256
  memory = 512
  container_definitions = file("../modules/ecs_service/task-definitions/service.json")
  requires_compatibilities = [
    "FARGATE"
  ]
  execution_role_arn = "arn:aws:iam::redacted:role/ecsTaskExecutionRole"
  task_role_arn = "arn:aws:iam::redacted:role/ecsTaskExecutionRole"
}

服务.json

[
    {
        "name": "testapp",
        "image": "redacted/demoapp:latest",
        "portMappings": [
            {
                "containerPort": 59817,
                "hostPort": 59817,
                "protocol": "tcp"
            }
        ],
        "logConfiguration": {
            "logDriver": "awslogs",
            "options": {
                "awslogs-group": "testappLG",
                "awslogs-region": "us-east-1",
                "awslogs-stream-prefix": "devtest"
            }
        },
        "Environment": [
            {
                "Name": "PORT",
                "Value": "9001"
            },
            {
                "Name": "TEST_PROP_1",
                "Value": "Override value - test prop 1"
            },
            {
                "Name": "TEST_PROP_2",
                "Value": "Override value - test prop 2"
            }
        ]
    }
]

您可以在此 Terraform 运行中创建 SSM 参数,在这种情况下,您已经拥有对它的引用,或者您可以使用数据源查找它。 出于示例目的,假设您使用数据源:

data "aws_ssm_parameter" "foo" {
  name = "foo"
}

现在,我将使用templatefile() function 而不是file() function,因此您可以在 json 中使用插值。这意味着您的 Terraform 模板中的行将更改为此(传递您要使用的秘密的 ARN在 JSON 中):

container_definitions = templatefile( "../modules/ecs_service/task-definitions/service.json", { 
    secret1 = data.aws_ssm_parameter.foo.arn 
})

最后,您的 JSON 文件需要如下所示,以便告诉 ECS 在创建您的任务实例时查找机密并将其传递到容器中:

[
    {
        "name": "testapp",
        "image": "redacted/demoapp:latest",
        "portMappings": [
            {
                "containerPort": 59817,
                "hostPort": 59817,
                "protocol": "tcp"
            }
        ],
        "logConfiguration": {
            "logDriver": "awslogs",
            "options": {
                "awslogs-group": "testappLG",
                "awslogs-region": "us-east-1",
                "awslogs-stream-prefix": "devtest"
            }
        },
        "secrets": [
            {
                "name": "MY_SECRET",
                "valueFrom": "${secret1}"
            }
        ],
        "Environment": [
            {
                "Name": "PORT",
                "Value": "9001"
            },
            {
                "Name": "TEST_PROP_1",
                "Value": "Override value - test prop 1"
            },
            {
                "Name": "TEST_PROP_2",
                "Value": "Override value - test prop 2"
            }
        ]
    }
]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM