Use an existing EBS volume with the Docker REX-Ray plugin on ECS

I'm using Terraform to create an ECS Cluster, a task definition and a service.

For task definition, the piece of code looks like this:

resource "aws_ecs_task_definition" "postgres" {
  container_definitions    = ...
  family                   = "Postgres"
  requires_compatibilities = ["EC2"]
  network_mode             = "bridge"

  volume {
    name = "PreCreatedEBSVolume"

    docker_volume_configuration {
      scope         = "task"
      autoprovision = false
      driver        = "rexray/ebs"
    }
  }
}

I specifically set autoprovision to false to make sure a new volume is not created. But still, when the service runs, a new volume is created with 16GiB (which I assume is the default size) and used instead of using the "PreCreatedEBSVolume".

I check the docker volume ls in the instance and sure enough, I see the EBS volumes listed. And if I run a new instance with this volume mounted, it's mounting as expected.

Is there a way I can make REX-Ray use existing block storage?


I found the issue.

The problem is the "scope" property. The docs had the following to say:

The scope for the Docker volume that determines its lifecycle. Docker volumes that are scoped to a task are automatically provisioned when the task starts and destroyed when the task stops. Docker volumes that are scoped as shared persist after the task stops.

So, I just had to change it to "shared" from "task" to make it use the existing EBS volume.