仅使用ebs卷ID自动挂载ebs卷

时间:2014-10-08 11:49:01

标签: amazon-web-services amazon-ec2

想象一下,您有一组数据的ebs卷,并且您经常将这些SAME EBS卷集合安装到随时间变化的ec2节点(因为每次您不再需要它时都会将其删除并创建一个新的节点当你需要它时)但是在每个创建ec2实例可能有不同的virtype,操作系统,实例类型等等(无论出于何种原因),什么是在给定的ec2实例上自动挂载这些EBS卷的最佳方法有ebs卷ID和访问ec2 api以获取ebs设备名称吗?

任何可以这样做的程序?

顺便说一句,我不是在谈论附加卷并且有兴趣在实例创建时自动挂载到os文件系统上的已知目录,因为与ec2上的设备名称相比,设备名称从os到os不等,而且它也是首选在/ etc / fstab中使用UUID而不是设备名称。

2 个答案:

答案 0 :(得分:4)

使用文件系统标签:

$ tune2fs -L "disk1" /dev/xvdf
$ tune2fs -L "disk2" /dev/xvdg

在/ etc / fstab中:

LABEL=disk1 /disk1 auto defaults 0 2
LABEL=disk2 /disk2 auto defaults 0 2

在/etc/rc.local中:

# Note: You could store the volume-ids and devices in the ec2 tags of your instance.

INSTANCE_ID=$(curl http://169.254.169.254/latest/meta-data/instance-id)
export AWS_DEFAULT_REGION=$(curl http://169.254.169.254/latest/meta-data/placement/availability-zone | sed 's/[a-z]$//')

aws ec2 attach-volume --volume-id vol-1234abcd --instance-id $INSTANCE_ID --device /dev/xvdf
aws ec2 attach-volume --volume-id vol-1234abcf --instance-id $INSTANCE_ID --device /dev/xvdg

# wait for them to mount
until [ "$(aws ec2 describe-volume-status --volume-id vol-1234abcd --query 'VolumeStatuses[0].VolumeStatus.Status' --output text)" = ok ]; do sleep 5; done

until [ "$(aws ec2 describe-volume-status --volume-id vol-1234abcf --query 'VolumeStatuses[0].VolumeStatus.Status' --output text)" = ok ]; do sleep 5; done

# mount /etc/fstab entries
mount -a

# I also store the EIP as a tag
EIP="$(aws ec2 describe-instances --instance-id $INSTANCE_ID --query 'Reservations[*].Instances[*].[Tags[?Key==`EIP`]|[0].Value]' --output text)"
if [ $? -eq 0 ] && [ "$EIP" != "" ] && [ "$EIP" != "None" ]; then
  aws ec2 associate-address --instance-id $INSTANCE_ID --public-ip "$EIP" --query 'return' --output text
fi

答案 1 :(得分:0)

您可以使用AWS CLI和命令attach-volume对此进行编写脚本。

在AWS CLI示例中,您的命令类似于:

aws ec2 attach-volume --volume-id vol-1234abcd --instance-id i-abcd1234 --device /dev/sdf

我还建议创建一个IAM role并将其附加到您启动的ec2实例,这样您就不必在实例上放置任何IAM用户的凭据。

您提到您可能会在ec2启动时将卷附加到不同的操作系统,在这种情况下,所有操作系统都必须支持他们希望安装的卷上的分区的文件系统类型。