2016-12-27 59 views
0

我們使用Ansible來配置ec2實例,在其上部署我們的應用程序,然後基於該實例創建AMI,更新啓動配置,以便自動調節小組總是推出新版本的應用程序。ec2中的元數據/塊設備映射不正確的臨時數據

我們針對不同的應用程序(diff實例大小,家庭等)重新使用了許多ansible的劇本。 這個運行的任務之一是檢查實例元數據以確定是否存在任何臨時設備,如果存在,請將它們掛載並將它們保存在/ etc/fstab和cloud-config中。

我們碰上與實例元數據類似於在此線程3年前描述的問題: https://forums.aws.amazon.com/thread.jspa?messageID=489889

現在我們正在做一些測試與t2.large情況下,如你所知,這種情況下,僅是EBS,但是當我們捲曲的實例元數據,我們得到的是有2個短暫的磁盤禮物: [email protected]:~$ curl http://169.254.169.254/latest/meta-data/block-device-mapping/ ami ebs1 ebs2 ephemeral0 ephemeral1

的事情是,這些短暫的設備並不實際存在,所以,當我們的腳本試圖堅持他們在cloud-config中,cloud-config最終成爲一個破碎的yaml blob ....這是一個重大問題,因爲它會導致我們er_data在實例啓動時失敗。

任何想法的人?

回答

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 
+0

是的,答案我已經從AWS支持團隊得到的是基本上不使用元數據,使用lsblk代替。但總體思路是實例元數據是不可變的,是真相的源泉,爲什麼我們應該使用不同的東西? – sebamontini