Динамический IP в /etc/fstab
Я пытаюсь использовать эластичную файловую систему (EFS) в AWS... Моя цель - автоматически смонтировать ее с помощью /etc/fstab
Поскольку экземпляры EC2 автоматически масштабируются по доступным зонам, EFS монтирует IP-адреса в зависимости от зоны экземпляра. На данный момент AWS предоставляет эту команду для монтирования в нужную зону...
sudo mount -t nfs4 -o nfsvers=4.1 $(curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone).fs-xxxx.efs.us-east-1.amazonaws.com:/ efs
Однако есть некоторые проблемы с URL-адресами EFS DNS, я смог подключиться только через предоставленные EFS IP. Поэтому я создал скрипт bash, чтобы получить правильный IP, относящийся к зоне...
nano /efsmount.sh
#!/bin/sh
CURR_ZONE=$(/usr/bin/curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone)
if [ "$CURR_ZONE" == "us-east-1e" ];then
echo "172.xx.xx.xx"
fi
... more if statements to cover all zones
Я могу смонтировать с помощью этого скрипта
sudo mount -t nfs4 -o nfsvers=4.1 $(/efsmount.sh):/ /efs
Теперь мой вопрос... как мне автоматически смонтировать fstab?
Как то так не работает
$(/efsmount.sh):/ /efs nfs auto,noatime,nolock,bg,nfsvers=4.1,intr,tcp,actimeo=1800 0 0
Спасибо
3 ответа
Я смог автоматически смонтировать EFS во время загрузки с помощью скрипта init.d. Вот инструкции, которым я следовал: http://www.archisoft.ca/ami/lemp/
Этот сценарий init.d запускается во время загрузки и проходит через функцию до тех пор, пока сеть не станет доступной, а затем монтирует EFS как можно скорее.
EFS монтируется до запуска веб-сервера, поэтому каталоги сайтов, находящиеся в EFS, распознаются веб-сервером NGINX без проблем.
Я думал, что это может кому-то помочь!
Для меня использование fstab (как рекомендует amazon) не работало, когда я вручную остановил и запустил свой экземпляр EC2. Что для меня является причиной автоматизации - мне нужно решение для сценариев аварийного восстановления, "холодной загрузки" и перехода в автономный режим для вертикального масштабирования (например, при ручном добавлении ОЗУ к экземпляру EC2 необходимо его "остановить")., "добавьте RAM", затем "запустите". Для меня это сработало
crontab -e
а затем добавить строку
@reboot sudo mount -t nfs4 -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2 fs-123ddddd.efs.us-east-1.amazonaws.com:/ /data
Обновление: в настоящее время EFS уже позволяет использовать общий URL-адрес, который не зависит от зоны доступности (он всегда указывает на правильную точку доступности).
Вам нужно использовать только такую запись в fstab:
'file-system-id'.efs.'aws-region'.amazonaws.com:/ /path/to/dir nfs4 nfsvers=4.1 0 0
Старый ответ:
У меня была такая же проблема при монтировании томов EFS в моем /etc/fstab
независимо от зоны доступности.
От Experoinc.com - Эластичная файловая система Amazon: пинать шины:
Наконец, неинтересно, что EFS исчезает при перезагрузке машины, поэтому подумайте о добавлении EFS-монтирования в / etc / fstab образа вашей машины. К сожалению, у вас есть разные точки монтирования для каждой зоны доступности, поэтому немного сложнее запечь AMI для региона, чем обычно. Может быть целесообразно настроить в сценарии подготовки к запуску при загрузке.
На данный момент я использую решение для создания помощника по монтированию (/sbin/mount.efs-nfs4
) и использовать его для монтирования томов EFS.
Код и инструкции для этого помощника находятся в этом Github Gist: https://gist.github.com/rarylson/9095c56137a60a7fdb7bb2b420f0ad04.
Короче говоря, используя его, вы можете поместить такую строку в /etc/fstab
без указания зоны доступности в URL и использования efs-nfs4
тип "поддельной" файловой системы:
'file-system-id'.efs.'aws-region'.amazonaws.com:/ /path/to/dir efs-nfs4 nfsvers=4.1 0 0
А потом работает:
mount /path/to/dir
Файловая система EFS будет также смонтирована во время загрузки после перезагрузки.