
Amazon EFS – это полностью управляемый сервис, который позволяет просто настраивать и масштабировать файловое хранилище в облаке Amazon, а также обеспечивать его экономичное использование. За несколько щелчков мышью в Консоли управления AWS можно создавать файловые системы, доступные для инстансов Amazon EC2 через интерфейс файловой системы (с использованием стандартных API ввода‑вывода файлов в операционной системе). Для таких файловых систем поддерживается полная семантика доступа, включая строгую непротиворечивость и блокировку файлов.
Файловые системы Amazon EFS обеспечивают автоматическое масштабирование от нескольких гигабайтов до петабайтов данных без необходимости предоставления хранилища. Десятки, сотни или даже тысячи инстансов Amazon EC2 могут одновременно получать доступ к файловой системе Amazon EFS, при этом Amazon EFS обеспечивает стабильную производительность для каждого инстанса Amazon EC2. Система Amazon EFS отличается высокой доступностью и надежностью. С Amazon EFS оплате подлежат только реально используемые ресурсы; минимальные взносы и платежи за настройку отсутствуют.
Работа с AWS EFS и Terraform в Unix/Linux
Установка efs-utils для AWS EFS в Unix/Linux
AWS EFS можно установить несколькими способами. Сам сервис можно создать и руками, — необходимо зайти в AWS консоль и создать ресурс или — автоматически, например через — Terraform. Но на стороне серверов (где будет прикреплен EFS), необходимо установить ПО.
Установка efs-utils для AWS EFS в Amazon Linux
Для тех, кто использует Amazon Linux или Amazon Linux 2, самый простой способ установить efs-utils — это использовать репозиторий Amazon:
$ sudo yum -y install amazon-efs-utils
После чего стоит примонтировать все необходимое.
Установка efs-utils для AWS EFS в RedHat’s
Клонируем проект:
$ git clone https://github.com/aws/efs-utils && cd efs-utils
А затем, выполняем команды:
$ sudo yum -y install rpm-build && make rpm && \
sudo yum -y install build/amazon-efs-utils*rpm
После чего стоит примонтировать все необходимое.
Установка efs-utils для AWS EFS в Debian’s
Клонируем проект:
$ git clone https://github.com/aws/efs-utils && cd efs-utils
Далее, выполняем:
$ sudo apt-get update && sudo apt-get -y install binutils && \
./build-deb.sh && \
sudo apt-get -y install ./build/amazon-efs-utils*deb
После чего стоит примонтировать все необходимое.
Настройка AWS EFS в Unix/Linux
Для монтирования с рекомендуемыми параметрами по умолчанию просто запустите:
$ sudo mount -t efs EFS_ID:/ to_MOUNT_POINT/
Для автоматического монтирования с рекомендуемыми параметрами добавьте запись в /etc/fstab, например:
EFS_ID to_MOUNT_POINT efs _netdev 0 0
Чтобы смонтировать поверх TLS, просто добавьте опцию tls:
$ sudo mount -t efs -o tls EFS_ID:/ to_MOUNT_POINT/
Пример c поддержкой ocsp и tls:
$ sudo mount -t efs -o tls,ocsp fs-12345678:/ /mnt/efs
Для автоматического монтирования поверх TLS добавьте запись в /etc/fstab, например:
EFS_ID to_MOUNT_POINT efs _netdev,tls 0 0
Я для своих нужд запускаю EFS следующим образом:
# mount -t efs $EFS_ID -o tls $JENKINS_HOME && \
mount -t nfs -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport $EFS_DNS_NAME:/ $JENKINS_HOME
Где:
- AWS_REGION — Регион где находиться EFS.
- AWS_EFS_NAME — Имя созданного AWS EFS (в моем случае). Более детально описан пример ниже в скрипте.
- EFS_ID — ID от вашего EFS. Если используете AWS, его можно получить так: (aws efs describe-file-systems —region=$AWS_REGION —output=text —query FileSystems[?Name==`$AWS_EFS_NAME`].FileSystemId). Более детально описан пример ниже в скрипте.
- to_MOUNT_POINT — Путь куда монтируем EFS.
- EFS_DNS_NAME — DNS имя AWS EFS-а, обычно имеет следующую команду: ($EFS_ID.efs.$AWS_REGION.amazonaws.com)
- JENKINS_HOME — Путь к монтируемой папке. У меня это папка с дженкинсом, которую нужно смонтировать.
Вот готовый скрипт для Terraform (Ubuntu), с использованием user_data для провижининга нод(ы):
#!/bin/bash
export JENKINS_HOME="/var/build/jenkins_home"
export AWS_REGION="us-west-2"
export AWS_EFS_NAME="jenkins-master-efs-nonprod"
git clone https://github.com/aws/efs-utils $JENKINS_HOME/efs-utils
cd $JENKINS_HOME/efs-utils && ./build-deb.sh
apt-get -y install ./build/amazon-efs-utils*deb
EFS_ID=$(aws efs describe-file-systems --region=$AWS_REGION --output=text --query FileSystems[?Name==\`$AWS_EFS_NAME\`].FileSystemId)
EFS_DNS_NAME="$EFS_ID.efs.$AWS_REGION.amazonaws.com"
mount -t efs $EFS_ID -o tls $JENKINS_HOME
mount -t nfs -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport $EFS_DNS_NAME:/ $JENKINS_HOME
Возможно чет стоит еще добавить, но пока только так. Это моя заметка чтобы не забыть что делал на своем проекте.
Чтобы убедиться что с машины есть коннект к AWS EFS, можно выполнить тесты:
root@ip-10-101-44-43:~# nc -zv 10.101.106.242 2049
Connection to 10.101.106.242 2049 port [tcp/nfs] succeeded!
root@ip-10-101-44-43:~# nc -zv 10.101.170.84 2049
Connection to 10.101.170.84 2049 port [tcp/nfs] succeeded!
root@ip-10-101-44-43:~# nc -zv 10.101.40.97 2049
Connection to 10.101.40.97 2049 port [tcp/nfs] succeeded!
root@ip-10-101-44-43:~# nc -zv fs-e404e64e.efs.us-west-2.amazonaws.com 2049
Connection to fs-e404e64e.efs.us-west-2.amazonaws.com 2049 port [tcp/nfs] succeeded!
root@ip-10-101-44-43:~#
Вот и все, статья «Установка AWS EFS в Unix/Linux», завершена.