Я запустил эту команду, чтобы получить экземпляр-экземпляр из экземпляра EC2, как обрабатывается запрос и как служба знает, какие данные нужно отправить обратно?
wget -q -O - http://169.254.169.254/latest/meta-data/instance-id
благодаря
Я запустил эту команду, чтобы получить экземпляр-экземпляр из экземпляра EC2, как обрабатывается запрос и как служба знает, какие данные нужно отправить обратно?
wget -q -O - http://169.254.169.254/latest/meta-data/instance-id
благодаря
На высоком уровне wget
- это команда, которая инициирует HTTP-запрос HTTP (притворяясь браузером), и эти параметры говорят, что он выплескивает полученный ответ на stdout (что вы видите).
Поскольку хост EC2 dom0 управляет сетевым стеком, как видно из вашего экземпляра, работающего на виртуальной машине, EC2 может обрабатывать сетевой трафик до 169.254.169.254 любым способом, который он хочет.
В этом случае EC2 знает, какой экземпляр выполняет запрос (независимо от того, основан ли он на вашем внутреннем IP-адресе, контролируемом EC2, или на основании того факта, что хост dom0 может обрабатывать запрос, прежде чем он даже будет отправлен по сети).
Таким образом, EC2 знает, какой экземпляр выполняет запрос, а EC2 знает всю информацию обо всех экземплярах, поэтому EC2 может возвращать запрошенные метаданные, включая идентификатор экземпляра.
Amazon не опубликовала точно, как они реализовали эту функцию, но они гарантируют, что она вернет правильные данные для запрашивающего экземпляра без каких-либо шансов на вмешательство кого-либо другого.
Подробнее о доступных метаданных EC2 вы можете узнать здесь:
http://docs.amazonwebservices.com/AWSEC2/latest/UserGuide/index.html?AESDG-chapter-instancedata.html
Магический IP-адрес 169.254.169.254 и соответствующие URL-адреса метаданных не будут работать за пределами экземпляра EC2, если только вы не работаете в системе, которая пытается эмулировать EC2.
Вы можете использовать ec2metadata
ec2metadata --instance-id