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")
}
Terraform エラー
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": []
}