Cada instância do EC2 pode acessar um ponto de extremidade REST no endereço de link local http://169.254.169.254
que fornece acesso a metadados sobre essa instância.
O mapeamento de dispositivos de bloco do EBS e os volumes de armazenamento de instâncias são uma das várias propriedades disponíveis, e os dados são facilmente acessados a partir do shell e scripts usando uma ferramenta como "curl".
Esta é provavelmente a maneira mais "correta" de descobrir o que você está procurando.
Update: Eu elaborei um one-liner rápido e extremamente sujo para demonstrar essa funcionalidade. Não pretendo sugerir que este seja um código de qualidade de produção, nem particularmente bem documentado, mas funciona definitivamente.
O endpoint acima parece oferecer várias "versões" de sua interface, a maioria das quais usa a data de lançamento da versão, ou você pode usar a versão "mais recente". Para que este código de exemplo continue funcionando mesmo se a interface mudar, eu escolherei a versão "2012-01-12".
Armazenaremos um link na variável shell $ METAURL, recuperaremos a lista de mapeamentos disponíveis com curl
e, em seguida, iteraremos cada mapeamento com um bash
for
/ do
/ done
loop (novamente com curl
) para encontrar o dispositivo de bloco ... então use perl
para torná-lo mais ordenado e reescreva "sdX" como "xvdX" como minha instância particular usa para seus nomes de dispositivos e finalmente sort
para colocar em ordem lexical.
bash$ METAURL="http://169.254.169.254/2012-01-12/meta-data/block-device-mapping/"
bash$for bd in 'curl -s $METAURL'; do curl -s $METAURL$bd | \
perl -pe 'BEGIN { $d = shift } s/^(\/dev\/)?(sd)?(.*)$/\/dev\/xvd$3 is $d\n/' $bd; \
done | sort
Exemplo de saída:
/dev/xvda1 is ami
/dev/xvda1 is root
/dev/xvdb is ephemeral0
/dev/xvdf is ebs2
/dev/xvdg is ebs1
/dev/xvdh is ebs5
Isso foi muito legal e relativamente indolor.
Mas há um pequeno problema com minha resposta.
block-device-mapping/ebsN
The virtual devices associated with Amazon EBS volumes, if any are present. This value is only available in metadata if it is present at launch time.
Esta solução não informará sobre os volumes do EBS montados após o lançamento da instância. Isso pode ser bom, porque as informações de volume efêmeras estão sempre disponíveis, pois os discos efêmeros só podem ser adicionados no momento do lançamento, não mais tarde ... portanto, se um volume for efêmero, você sempre poderá descobri-lo por esse método. Se não está aqui, não é um disco efêmero.
Diante disso, a API do EC2 ou < Um utilitário href="http://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instances.html"> aws cli (que chama a API do EC2) seria o que você preciso usar se você realmente precisa saber tudo o que há para saber sobre o que está anexado à instância. Há mais dados lá, mas seria um pouco mais complicado utilizar em scripts. Troca clássica, suponho.