首页 > 解决方案 > 带有 terraform 和 efs 的 AWS ECS 任务定义 - 未知卷

问题描述

我正在尝试保留容器数据,为此我想安装一个卷。这是我的任务定义,尽管声明它会引发未知卷错误。

aws_ecs_task_definition.wordpress:正在创建...错误:ClientException:未知卷'wordpress-volume'。

    locals {
      username = jsondecode(data.aws_secretsmanager_secret_version.wordpress.secret_string)["username"]
      password = jsondecode(data.aws_secretsmanager_secret_version.wordpress.secret_string)["password"]
    }
    
    resource "aws_ecs_task_definition" "wordpress" {
      family                = "wordpress"
      container_definitions = jsonencode([{
        name = "wordpress"
        image = "wordpress"
        essential = true
        cpu = 256
        memory = 512
        entryPoint = [ "sh", "-c"]
        command = ["ls -la /var/www/html"]
        volumes = [{
          name = "wordpress-volume"
          efsVolumeConfiguration = {
            fileSystemId = aws_efs_file_system.wordpress.id
          }
        }]
        mountPoints = [{
          sourceVolume = "wordpress-volume"
          containerPath = "/var/www/html"
          readOnly = false
        }]
        environment = [{
          name = "WORDPRESS_DB_HOST"
          value = "127.0.0.1"}, 
        {
          name = "WORDPRESS_DB_USER"
          value = local.username
        },
        { 
          name = "WORDPRESS_DB_PASSWORD"
          value = local.password
        },
        {
          name = "WORDPRESS_DB_NAME"
          value = "wordpressdb"
        }]
        portMappings = [{
          protocol = "tcp"
          containerPort = 80
          hostPort = 80
        }]
      }])
      network_mode = "awsvpc"
      requires_compatibilities = ["FARGATE"]
      execution_role_arn =  aws_iam_role.ecs_task_execution_role.arn
      task_role_arn = aws_iam_role.ecs_task_role.arn
      cpu = 1024
      memory = 3072
    }

标签: dockerterraformamazon-ecsamazon-efs

解决方案


您的volumes定义不应该在里面container_definitions,而是aws_ecs_task_definition资源参数的一部分。

所以,你应该把这部分移到外面:

 volumes = [{
      name = "wordpress-volume"
      efsVolumeConfiguration = {
         fileSystemId = aws_efs_file_system.wordpress.id
      }
 }]

resource "aws_ecs_task_definition" "wordpress" {
...
  volume {
      name  = "wordpress-volume"
      efs_volume_configuration {
        file_system_id = aws_efs_file_system.wordpress.id
      }
  }
...
}

请参阅文档:

和容器定义文档:


推荐阅读