![](/img/trans.png)
[英]In Terraform is it possible to store multiple values in a single ssm_parameters?
[英]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.