AWS metadata: Check if EC2 instance is spot?
The information is not available inside the metadata.
However, you can get the instance ID from the metadata, then call ec2-describe-instances to get instance information about your instance. Inside that instance description is the spot instance request ID. If blank, then it's not a spot instance, otherwise, it's a spot instance.
I don't believe they have this information in the metadata.
You could assign a different profile for instances you launch as spot instances and use the profile name to determine what type of instance it is. If that doesn't seem like a clean or viable solution you can always grab the instance-id from the meta data then run the command ec2-describe-spot-instance-requests --filter instance-id=<instanceid>
if the command returns empty than the instance is not a spot instance, if the command returns with data then it's a spot instance.
I know this is super old but if anyone wants a one liner:
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'
Adjust --region
accordingly
https://gist.github.com/urjitbhatia/c5af8a3d53661cb3d4e896feae23fc1d