Назад | Перейти на главную страницу

Метаданные AWS: проверить, является ли экземпляр EC2 точным?

Есть Метаданные AWS сервис, который предоставляет некоторую информацию об экземпляре EC2, который отправляет запрос на http://169.254.169.254/. Мне интересно, есть ли способ узнать из этих метаданных, является ли экземпляр «Спот» или «По запросу»?

Информация недоступна в метаданных.

Однако вы можете получить идентификатор экземпляра из метаданных, а затем вызвать ec2-describe-instance, чтобы получить информацию о вашем экземпляре. Внутри описания этого экземпляра находится идентификатор запроса на спотовый экземпляр. Если поле пусто, то это не спотовый экземпляр, в противном случае это спотовый экземпляр.

Я не верю, что у них есть эта информация в метаданных.

Вы можете назначить другой профиль для экземпляров, которые вы запускаете как спотовые экземпляры, и использовать имя профиля, чтобы определить, какой это тип экземпляра. Если это не кажется чистым или жизнеспособным решением, вы всегда можете получить идентификатор экземпляра из метаданных, а затем запустить команду ec2-describe-spot-instance-requests --filter instance-id=<instanceid> если команда возвращает пустое значение, значит, экземпляр не является спотовым, если команда возвращает данные, то это спотовый экземпляр.

Я знаю, что это супер старый, но если кому-то нужен один лайнер:

aws ec2 describe-spot-instance-requests \
  --filters Name=instance-id,Values="$(wget -q -O - http://169.254.169.254/latest/meta-data/instance-id)" \
  --region us-east-1 | \
  jq -r '.SpotInstanceRequests | if length > 0 then "spot" else "normal" end'

Отрегулировать --region соответственно

https://gist.github.com/urjitbhatia/c5af8a3d53661cb3d4e896feae23fc1d

Немного улучшенная версия @urjit:

aws ec2 describe-spot-instance-requests \
  --filters Name=instance-id,Values="$(wget -q -O - http://169.254.169.254/latest/meta-data/instance-id)" \
  --region "$(wget -q -O - http://169.254.169.254/latest/meta-data/placement/availability-zone | sed 's/.$//')" | \
  jq -r '.SpotInstanceRequests | if length > 0 then "Ec2Spot" else "OnDemand" end'