EFS + ECS: подключение общего тома

Быстрые ссылки
- Почему это полезно?
- Создание файловой системы EFS
- Локальное монтирование и предзагрузка данных
- Подключение к развертыванию ECS
- Устранение неполадок и безопасность
Почему это полезно?
Amazon Elastic File System (EFS) — это полностью управляемая серверная сеть общего файлового хранилища, которую можно одновременно примонтировать к множеству экземпляров или контейнеров. В сочетании с Amazon ECS (Elastic Container Service) EFS решает типичную проблему контейнеров: отсутствие постоянного локального дискового хранилища.
Коротко:
- EFS даёт долговечность и совместный доступ к файлам между задачами.
- Подходит для статического контента сайтов, общих артефактов, логов и кешей.
- Упрощает миграцию и масштабирование, так как данные не привязаны к конкретному экземпляру ECS.
Важно: EFS — это сетевое хранилище, поэтому задержки и пропускная способность зависят от сети и выбранных параметров (Throughput mode). Для высокочувствительных к задержкам сценариев стоит протестировать производительность.
Создание файловой системы EFS
- Перейдите в AWS Management Console → EFS → Create file system.
- Укажите имя (Tag) и выберите VPC, где располагаются ваши кластеры ECS.
- Создайте точки монтирования (mount targets) в нужных подсетях, чтобы ECS-таски могли достучаться до EFS.
- Обратите внимание на File System ID — он потребуется дальше.



Совет: создавайте точки монтирования в каждой подсети, где у вас будут задачи ECS, чтобы избежать сетевых ограничений.
Локальное монтирование и предзагрузка данных
Если нужно предварительно загрузить файлы в EFS или вручную проверить содержимое, можно примонтировать том к EC2-инстансу.
Установите утилиты:
sudo yum install -y amazon-efs-utilsЗатем примонтируйте, подставив ваш File System ID:
sudo mount -t efs fs-12345678:/ /mnt/efsУбедитесь, что установлены nfs-utils, и что Security Group вашей точки монтирования разрешает трафик NFS (порт 2049) с EC2 и из VPC, где работают ECS задачи.
Важно: EFS использует NFSv4.1; убедитесь, что в параметрах монтирования используются совместимые опции.
Подключение к развертыванию ECS
Чтобы использовать EFS в задачах ECS, откройте консоль ECS и создайте/отредактируйте task definition. В нижней части выберите “Configure via JSON” и замените пустой ключ “volumes” на JSON-конфигурацию, похожую на следующую. Не забудьте заменить адрес на ваш.
"volumes": [
{
"name": "efs-demo",
"host": null,
"dockerVolumeConfiguration": {
"autoprovision": true,
"labels": null,
"scope": "shared",
"driver": "local",
"driverOpts": {
"type": "nfs",
"device": ":/",
"o": "addr=fs-XXXXXX.efs.us-east-1.amazonaws.com,nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport"
}
}
}
],
"family": "nginx",Замените fs-XXXXXX.efs.us-east-1.amazonaws.com на DNS-имя вашей файловой системы EFS (можно найти в консоли EFS).
После сохранения вы увидите новый том в списке volumes в определении задачи.

Далее в определении контейнера нажмите Add Container или отредактируйте существующий контейнер. В секции Storage And Logging выберите созданный том и укажите путь в контейнере (container path), например /usr/share/nginx/html.

Сохраните task definition и запустите сервис/задачу. Все контейнеры, использующие этот том, получат доступ к единому файловому дереву.
Примеры использования и ограничения
Когда это работает хорошо:
- Статический контент сайтов (HTML, изображения)
- Общие конфигурации и шаблоны
- Совместные кеши или очереди на файловой системе
Когда это может не подойти:
- Высокопроизводительные случайные I/O операции требуют локального SSD
- Сценарии с высокими пиковыми нагрузками на запись, где требуются специальные показатели IOPS
- Если контейнеры развернуты в разных AWS регионах — EFS работает в пределах региона
Безопасность и сетевые настройки
- Security Groups: разрешите порт 2049 (NFS) между вашими задачами/инстансами и точками монтирования EFS.
- IAM и политики: управление доступом к консоли EFS через IAM, но само монтирование контролируется сетевыми правилами и правами файловой системы (POSIX).
- POSIX-права: внутри тома используют обычные UNIX-права — убедитесь, что uid/gid контейнеров согласованы для доступа.
- Шифрование: включайте шифрование данных в покое (EFS предлагает опцию) и шифрование in-transit при необходимости.
Рекомендация: используйте least privilege в Security Groups и проверяйте, что только нужные подсети/службы имеют доступ к NFS.
Альтернативы
- Amazon S3 + s3fs или SDK: хорошо для статического контента, но поведение и семантика файлов отличаются (лучше для объектов, а не POSIX).
- EBS с файловой системой и файловым шарингом через NFS на EC2: более контролируемая, но требует управления EC2 и доступности.
- Сетевые файловые системы сторонних поставщиков на EC2: когда нужны специфические характеристики производительности.
Модель принятия решений (простая)
Mermaid (логика выбора):
flowchart TD
A[Нужно ли совместное POSIX-совместимое хранилище?] -->|Да| B{Требуется ли высокая IOPS/латентность?}
B -->|Да| C[Рассмотреть EBS/локальные SSD или специализированное решение]
B -->|Нет| D[Использовать EFS]
A -->|Нет| E[Рассмотреть S3 или локальные тома контейнеров]Роль‑ориентированные чек-листы
Для разработчика:
- Указать корректный container path.
- Проверить права доступа (uid/gid).
- Тестировать работу с файловой системой локально (через EC2).
Для инженера DevOps:
- Создать точки монтирования для всех нужных подсетей.
- Настроить Security Groups для порта 2049.
- Подготовить task definition и протестировать в staging.
Для инженера по безопасности:
- Проверить шифрование данных в покое и при передаче.
- Убедиться в принципе наименьших привилегий в сетевых правилах.
Устранение неполадок
Проблемы и что проверить:
- Контейнер не видит файлы: проверьте mount point и права в контейнере.
- Таймауты NFS: проверьте сетевые правила и доступность mount target в той же подсети.
- Медленная работа: замеряйте задержку и throughput; при необходимости измените режим пропускной способности EFS.
Мини‑методология: быстрый план внедрения
- Создать EFS и точки монтирования в нужных подсетях.
- Примонтировать к EC2 и предзагрузить файлы, проверить POSIX-права.
- Подготовить task definition с JSON-томом и добавить mount point в контейнер.
- Запустить тестовые задачи в staging и прогнать нагрузочный тест.
- Перенести в production и мониторить производительность.
Критерии приёмки
- Контейнеры в staging видят и читают файлы из тома.
- Права и владение файлов соответствуют требованиям приложения.
- Нет сетевых ошибок NFS в логах.
- Производительность соответствует ожиданиям на тестовой нагрузке.
Глоссарий (в одну строку)
EFS — управляемая сетьвая файловая система AWS; ECS — служба управления контейнерами в AWS; NFS — сетевой протокол файловой системы.
Итог
EFS — удобный способ предоставить контейнерам ECS единое POSIX-совместимое хранилище, особенно для статического контента и совместного доступа к файлам. Важно учитывать сетевые требования, права доступа и ограничения по производительности; для критичных по задержке сценариев рассмотрите альтернативы.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента