Amazon web services /etc/fstab中的动态IP

Amazon web services /etc/fstab中的动态IP,amazon-web-services,automount,Amazon Web Services,Automount,我正在尝试在AWS中使用弹性文件系统(EFS)。。。我的目标是使用/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.amazona

我正在尝试在AWS中使用弹性文件系统(EFS)。。。我的目标是使用/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
然而,EFS DNS url存在一些问题,我只能通过提供的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

谢谢

我能够在引导期间使用init.d脚本自动装载EFS。以下是我遵循的说明:

这个init.d脚本在引导时启动,并循环通过一个函数,直到网络可用,然后尽快装载EFS

EFS是在web服务器启动之前装载的,因此NGINX web服务器可以识别EFS中的站点目录,而不会出现问题


我想这可能会有帮助

更新:目前,EFS已经允许您使用不依赖于可用性区域的通用URL(它始终指向正确的可用性点)

您只需使用类似以下的fstab条目:

'file-system-id'.efs.'aws-region'.amazonaws.com:/  /path/to/dir  nfs4  nfsvers=4.1  0  0
旧的响应:

我在我的
/etc/fstab
中独立于可用性区域装载EFS卷时遇到了相同的问题

发件人:

最后,当机器重启时EFS消失,这是没有意思的,所以考虑将EFS安装添加到机器映像的/ETC/FSTAB中。不幸的是,每个可用性区域有不同的挂载点,所以像通常情况下那样,要烘焙到每个区域的AMI中有点困难。明智的做法是在启动时运行的配置脚本中进行配置

目前,我使用的解决方案是创建一个mount helper(
/sbin/mount.efs-nfs4
)并使用它装载我的efs卷

此帮助程序的代码和说明位于以下Github要点中:

简而言之,使用它,您可以在
/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文件系统也将在重新启动后的启动时装载。

对于我来说,当我手动停止并启动EC2实例时,使用fstab(如亚马逊建议的)无法工作。对我来说,这就是实现自动化的原因——我需要一个解决方案,用于灾难恢复场景、冷启动以及离线时垂直扩展(例如,当手动将RAM添加到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

fstab不是一个编程环境,您不能将动态内容嵌入其中。您可以动态生成该文件,但无论您在内部尝试做什么,它都会被读取为静态文本。谢谢。。。是否有其他方法可以在启动时挂载此脚本?在cron或其他自动触发环境中的外部脚本可以为您执行挂载调用。然后你就可以计算出IP地址并直接呼叫mount。非常感谢!这对我也很管用。我希望这样做没有坏处。