我有一个正在 Terraform 中创建的资源。在资源中有一个使用 JSON 文件读取值的属性。我正在从一个单独的 JSON 文件中读取这些值,并希望与我的 Terraform 工作区一起声明该属性。以下是我的资源和错误消息。如果可以在文件功能中集成 terraform 工作空间,那么任何有关如何实现这一点的见解都会有所帮助。
地形资源
resource "aws_ecs_task_definition" "task_definition" {
family = "${var.application_name}-${var.application_environment[var.region]}"
execution_role_arn = aws_iam_role.ecs_role.arn
network_mode = "awsvpc"
cpu = "256"
memory = "512"
requires_compatibilities = ["FARGATE"]
container_definitions = file("scripts/ecs/${terraform.workspace}.json")
}
地形错误
Error: ECS Task Definition container_definitions is invalid: Error decoding JSON: json: cannot unmarshal object into Go value of type []*ecs.ContainerDefinition
on ecs.tf line 26, in resource "aws_ecs_task_definition" "task_definition":
26: container_definitions = file("scripts/ecs/${terraform.workspace}.json")
我希望以这种方式处理它,因为我设置了多个 Terraform 工作区,并且希望尽可能保持我的 TF 脚本相同。
容器定义
{
"executionRoleArn": "arn:aws:iam::xxxxxxxxxxxx:role/ecsTaskExecutionRole",
"containerDefinitions": [
{
"logConfiguration": {
"logDriver": "awslogs",
"options": {
"awslogs-group": "/ecs/fargate-devstage",
"awslogs-region": "us-east-2",
"awslogs-stream-prefix": "ecs"
}
},
"entryPoint": [
"[\"sh\"",
"\"/tmp/init.sh\"]"
],
"portMappings": [
{
"hostPort": 9003,
"protocol": "tcp",
"containerPort": 9003
}
],
"cpu": 0,
"environment": [],
"mountPoints": [],
"volumesFrom": [],
"image": "xxxxxxxxxxxx.dkr.ecr.us-east-2.amazonaws.com/fargate:latest",
"essential": true,
"name": "fargate"
}
],
"placementConstraints": [],
"memory": "1024",
"compatibilities": [
"EC2",
"FARGATE"
],
"taskDefinitionArn": "arn:aws:ecs:us-east-2:xxxxxxxxxxxx:task-definition/fargate-devstage:45",
"family": "fargate-devstage",
"requiresAttributes": [
{
"name": "com.amazonaws.ecs.capability.logging-driver.awslogs"
},
{
"name": "ecs.capability.execution-role-awslogs"
},
{
"name": "com.amazonaws.ecs.capability.ecr-auth"
},
{
"name": "com.amazonaws.ecs.capability.docker-remote-api.1.19"
},
{
"name": "ecs.capability.execution-role-ecr-pull"
},
{
"name": "com.amazonaws.ecs.capability.docker-remote-api.1.18"
},
{
"name": "ecs.capability.task-eni"
}
],
"requiresCompatibilities": [
"FARGATE"
],
"networkMode": "awsvpc",
"cpu": "512",
"revision": 45,
"status": "ACTIVE",
"volumes": []
}