【问题标题】:Dynamic IP in /etc/fstab/etc/fstab 中的动态 IP
【发布时间】:2017-06-16 04:35:49
【问题描述】:

我正在尝试在 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...

纳米/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

谢谢

【问题讨论】:

  • fstab 不是编程环境,您不能在其中嵌入动态内容。您可以动态生成文件,但无论您尝试在内部做什么,它都会被读取为静态文本。
  • 谢谢...有什么办法可以让它在开机时挂载吗?
  • cron 中的外部脚本或其他为您执行挂载调用的自动触发环境。那么你就可以找出IP并直接调用mount。

标签: amazon-web-services automount


【解决方案1】:

对我来说,当我手动停止并启动我的 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

【讨论】:

  • 非常感谢!它也对我有用。我希望这样做没有缺点。
【解决方案2】:

我能够在启动过程中使用 init.d 脚本自动挂载 EFS。这是我遵循的说明:http://www.archisoft.ca/ami/lemp/#setting-up-efs-with-auto-mounting

此 init.d 脚本在启动时启动并循环执行一个函数,直到网络可用,然后尽快安装 EFS。

EFS 在 Web 服务器启动之前被挂载,因此驻留在 EFS 中的站点目录可以被 NGINX Web 服务器识别而不会出现问题。

我认为这可能会对某人有所帮助!

【讨论】:

    【解决方案3】:

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

    你只需要像这样使用 fstab 条目:

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

    旧回复:

    我在独立于可用区的/etc/fstab 中安装 EFS 卷时遇到了同样的问题。

    来自experoinc.com - Amazon’s Elastic File System: Kicking the Tires

    最后,让 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 文件系统也将在重启后在启动时挂载。

    【讨论】: