有一個AWS 元資料服務,它提供有關向 發出請求的 EC2 執行個體的一些資訊http://169.254.169.254/
。我想知道是否有辦法從該元資料中了解實例是「現貨」還是「按需」?
答案1
該資訊在元資料中不可用。
但是,您可以從元資料中取得實例 ID,然後呼叫 ec2-describe-instances 來取得有關您的實例的實例資訊。此實例描述中包含現貨實例請求 ID。如果為空,則它不是競價實例,否則,它是競價實例。
答案2
我不相信他們的元數據中有此資訊。
您可以為作為競價實例啟動的實例指派不同的設定文件,並使用設定檔名稱來確定實例的類型。如果這看起來不是一個乾淨或可行的解決方案,您可以隨時從元數據中獲取實例 ID,然後運行該命令(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