ЕстьМетаданные AWSслужба, которая предоставляет некоторую информацию об экземпляре EC2, который отправляет запрос на http://169.254.169.254/
. Мне интересно, есть ли способ узнать из этих метаданных, является ли экземпляр «Spot» или «On Demand»?
решение1
Информация недоступна внутри метаданных.
Однако вы можете получить идентификатор экземпляра из метаданных, а затем вызвать ec2-describe-instances, чтобы получить информацию об экземпляре. Внутри этого описания экземпляра находится идентификатор запроса экземпляра spot. Если пусто, то это не экземпляр spot, в противном случае это экземпляр spot.
решение2
Я не думаю, что в метаданных есть такая информация.
Вы можете назначить другой профиль для экземпляров, которые вы запускаете как точечные экземпляры, и использовать имя профиля, чтобы определить, какой это тип экземпляра. Если это не кажется вам чистым или жизнеспособным решением, вы всегда можете получить идентификатор экземпляра из метаданных, а затем выполнить команду, ec2-describe-spot-instance-requests --filter instance-id=<instanceid>
если команда возвращает пустое значение, то экземпляр не является точечным экземпляром, если команда возвращает данные, то это точечный экземпляр.
решение3
Я знаю, что это очень старо, но если кто-то хочет узнать вкратце:
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
решение4
Похоже, с годами все изменилось, так что теперь это работает.
# a spot instance
$ curl -s --fail http://169.254.169.254/latest/meta-data/instance-life-cycle
spot
# a normal instance
$ curl -s --fail http://169.254.169.254/latest/meta-data/instance-life-cycle
on-demand