来自ec2中的元数据/块设备映射的不正确的短暂数据

时间:2016-12-27 14:04:19

标签: amazon-web-services amazon-ec2 ansible ec2-ami

我们使用Ansible来配置ec2实例,在它们上部署我们的应用程序,然后基于该实例创建AMI,更新启动配置,以便自动缩放组始终启动应用程序的新版本。

我们将大部分ansible的剧本重用于不同的应用程序(差异实例大小,家庭等)。 其中一个任务是检查实例元数据以确定是否存在任何临时设备,如果存在,则挂载它们并将它们保存在/ etc / fstab和cloud-config中。

我们遇到了与3年前在此主题中所描述的类似的实例元数据的问题: https://forums.aws.amazon.com/thread.jspa?messageID=489889

现在我们正在使用t2.large实例进行一些测试,如你所知,这个实例只是ebs,但是当我们卷曲实例元数据时,我们得到了2个临时磁盘: ubuntu@ip-xxx-xxx-xxx-xxx:~$ curl http://169.254.169.254/latest/meta-data/block-device-mapping/ ami ebs1 ebs2 ephemeral0 ephemeral1

事实是那些短暂的设备实际上并不存在,所以当我们的脚本试图将它们保存在cloud-config中时,cloud-config最终会成为一个破碎的yaml blob ....这是一个主要问题,因为它会导致user_data在实例启动时失败。

任何想法?

1 个答案:

答案 0 :(得分:0)

如果这是亚马逊团队无法解决的已知问题,您可以解决它。

检查实际存在的快速脚本:

#!/bin/bash

for MAPID in $(curl -s http://169.254.169.254/latest/meta-data/block-device-mapping/); do
  BLKDEV=$(curl -s http://169.254.169.254/latest/meta-data/block-device-mapping/$MAPID/ | sed 's#^/dev/##' | sed 's/^sd/xvd/')
  if blkid | grep -q $BLKDEV; then
    echo $BLKDEV present
  else
    echo $BLKDEV not present
  fi
done

使用c1.mediumt2.medium进行检查。 t2输出:

$ curl -s http://169.254.169.254/latest/meta-data/block-device-mapping/
ami
ebs1
ephemeral0
ephemeral1
root

$ ./test.sh
xvda1 present
xvdd present
xvdb not present
xvdc not present
xvda1 present