【问题标题】:Terraform - Use SSM Parameters in ECS container definitionTerraform - 在 ECS 容器定义中使用 SSM 参数
【发布时间】:2020-11-23 21:13:49
【问题描述】:

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

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

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

地形资源:

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"
}

service.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"
            }
        ]
    }
]

【问题讨论】:

    标签: amazon-web-services terraform ssm


    【解决方案1】:

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

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

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

    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"
                }
            ]
        }
    ]
    

    【讨论】:

      猜你喜欢
      • 2019-07-18
      • 1970-01-01
      • 2021-12-29
      • 1970-01-01
      • 1970-01-01
      • 2019-08-12
      • 2020-11-02
      • 2021-12-01
      • 2021-03-03
      相关资源
      最近更新 更多