如何解决从Terraform输入变量中获取ECS任务定义环境变量
我正在尝试使用Terraform部署ECS任务定义。这是我的ECS任务定义资源代码:
resource "aws_ecs_task_definition" "my_TD" {
family = "my_container"
container_definitions = <<DEFINITION
[{
"name": "my_container","image": "${format("%s:qa",var.my_ecr_arn)}","portMappings": [
{
"containerPort": 80,"hostPort": 80
}
],"memory": 300,"networkMode": "awsvpc","environment": [
{
"name": "PORT","value": "80"
},{
"name": "Token","value": "xxxxxxxx"
}
]
}
]
DEFINITION
requires_compatibilities = ["EC2"]
network_mode = "awsvpc"
cpu = "256"
memory = "512"
task_role_arn = var.ecs_role
execution_role_arn = var.ecs_role
}
环境变量在此处被硬编码。因此,我尝试从Terraform输入中获取那些环境变量。因此,我修改为:
variable "my_env_variables"{
default = [
{
"name": "PORT",{
"name": "token","value": "xxxxx"
}
]
}
...
...
"environment" : "${var.my_env_variables}"
...
...
这给了我这样的问题:
var.my_env_variables is tuple with 1 element
Cannot include the given value in a string template: string required.
我是Terraform的新手。我该如何解决这个问题?
解决方法
您需要json字符串,可以使用jsonencode获得。因此,您可以尝试以下操作:
resource "aws_ecs_task_definition" "my_TD" {
family = "my_container"
container_definitions = <<DEFINITION
[{
"name": "my_container","image": "${format("%s:qa",var.my_ecr_arn)}","portMappings": [
{
"containerPort": 80,"hostPort": 80
}
],"memory": 300,"networkMode": "awsvpc","environment": ${jsonencode(var.my_env_variables)}
}
]
DEFINITION
requires_compatibilities = ["EC2"]
network_mode = "awsvpc"
cpu = "256"
memory = "512"
task_role_arn = var.ecs_role
execution_role_arn = var.ecs_role
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。