There's a AWS metadata service which provides some information about the EC2 instance that issues a request to
http://169.254.169.254/. I'm wondering if there's a way to know from that metadata if the instance is "Spot" or "On Demand"?
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