假设您有一组用于存储数据的EBS卷,并且您经常将这组EBS卷装载到随时间变化的ec2节点(因为每次您不再需要它时将其销毁,并在再次需要它时创建一个新的),但是在每个创建的ec2实例上可能具有不同的病毒类型、操作系统、实例类型等(无论出于何种原因),当您拥有的全部是ebs卷id和访问ec2 api以获取ebs设备名称时,在给定的ec2实例上自动装载这些ebs卷的最佳方法是什么?
有没有程序可以做到这一点?
顺便说一句,我并不是在谈论附加卷和在创建实例时自动挂载到os文件系统上的已知目录,因为当与ec2上的设备名称进行比较时,设备名称在不同的os上是不同的,而且最好在/etc/fstab中使用UUID而不是设备名称。
发布于 2014-10-10 09:11:12
使用文件系统标签:
$ 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发布于 2014-10-08 20:29:58
您可以使用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启动时将卷附加到不同的操作系统,在这种情况下,所有操作系统都必须支持它们希望挂载的卷上分区的文件系统类型。
https://stackoverflow.com/questions/26256213
复制相似问题