решения для постоянного хранения для aws fargate - PullRequest
1 голос
/ 29 октября 2019

Я запускаю веб-приложение apache на контейнере в ecs fargate, но мне нужно иметь возможность сохранять определенные файлы, чтобы любые изменения в них были доступны всем пользователям во всех версиях веб-приложения. К сожалению, поддержка Fargate для EFS находится в стадии разработки, поэтому мне нужно решение для постоянного хранения, по крайней мере, до тех пор, пока оно не станет полезным (или пока не будет объявлена ​​дата выпуска этой функции, так что я могу просто сказать, что потом с этим разберусь).

Я пытался переключиться с fargate на ec2, так как EFS предположительно совместим с ec2, но я не смог найти способ преодолеть «неспособность разместить задачу, потому что ни один контейнерный экземпляр не удовлетворял всем его требованиям». Причина: в вашем кластере не найдено ни одного контейнера. ошибка. Я испробовал все решения в Ошибка AWS ECS при выполнении задачи: в вашем кластере не было найдено ни одного экземпляра контейнера , а также всего, что я смог найти в нескольких поисках в Google, но безрезультатно.

Способ доступа к файлам по сути:

  1. Файл php вызывает базу данных
  2. база данных указывает на местоположение в веб-приложении, где хранятся данные приложения
  3. данные считываются / записываются в файл в веб-приложении

Кто-нибудь знает о решении для постоянного хранения для ecs fargate? И как мне его настроить?

1 Ответ

0 голосов
/ 30 октября 2019

Разная лошадка для разных курсов, Fargate предназначена для обнуления управления инфраструктурой, что означает просто указать образ Docker и затем оставить все на AWS.

Тома хоста связывания монтируются при использовании любого изТипы запуска EC2 или Fargate. Задачи Fargate поддерживают только непостоянные тома хранения, поэтому поля host и sourcePath не поддерживаются .

Обходной путь - монтирование томов.

Хранилище задач Fargate

При подготовке каждая задача Fargate получает следующее хранилище. Хранение задач эфемерно. После остановки задачи Fargate хранилище удаляется.

10 GB хранилища слоя Docker

Дополнительное 4 GB for volume mounts. Это может быть смонтировано и совместно использовано между контейнерами с использованием томов , mountPoints и volumeFrom с параметрами в определении задачи.

Чтобы обеспечить непостоянное пустое хранилище для контейнеров в задаче Fargate

В этом примере у вас может быть два контейнера базы данных, которым требуется доступ к одному и тому же месту хранения чистых файлов во время задачи.

В разделе томов определения задачи определите том с именем database_scratch.

  "volumes": [
    {
      "name": "database_scratch",
      "host": {}
    }
  ]

В разделе containerDefinitions создайте определения контейнера базы данных, чтобы они монтировали нестабильное хранилище.

  "containerDefinitions": [
    {
      "name": "database1",
      "image": "my-repo/database",
      "cpu": 100,
      "memory": 100,
      "essential": true,
      "mountPoints": [
        {
          "sourceVolume": "database_scratch",
          "containerPath": "/var/scratch"
        }
      ]
    },
    {
      "name": "database2",
      "image": "my-repo/database",
      "cpu": 100,
      "memory": 100,
      "essential": true,
      "mountPoints": [
        {
          "sourceVolume": "database_scratch",
          "containerPath": "/var/scratch"
        }
      ]
    }
  ]

Если вы ищете способ связывания тома хоста тогда вы ожидаете неверного от fargate, так как в случае fargate нет хоста.

Вам необходим тип Ec2 Задача ECS.

Для обеспечения постоянного хранилищадля контейнеров, использующих монтирование связывания

При использовании монтирования связывания, если указано значение sourcePath,Данные сохраняются даже после остановки всех контейнеров, на которые они ссылаются. Все файлы, которые существуют в sourcePath, представляются контейнерам в значении containerPath, а любые файлы, записываемые в значение containerPath, записываются в значение sourcePath в экземпляре контейнера.

В задачеВ разделе томов определения определите монтирование связывания со значениями name и sourcePath.

  "volumes": [
    {
      "name": "webdata",
      "host": {
        "sourcePath": "/ecs/webdata"
      }
    }
  ]

В разделе containerDefinitions определите контейнер со значениями mountPoints, которые ссылаются на имя определенного монтирования связывания и значение containerPath для монтированияbind mount at на контейнере.

  "containerDefinitions": [
    {
      "name": "web",
      "image": "nginx",
      "cpu": 99,
      "memory": 100,
      "portMappings": [
        {
          "containerPort": 80,
          "hostPort": 80
        }
      ],
      "essential": true,
      "mountPoints": [
        {
          "sourceVolume": "webdata",
          "containerPath": "/usr/share/nginx/html"
        }
      ]
    }
  ]

bind-mounts

снова

Параметры host и sourcePath не поддерживаются дляЗадачи Fargate.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...