How to fail stack when EC2 spot is refused?
You should use TimeoutDurationMinutes in your code while requesting for spot instances via cloudformation.

For more details: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticmapreduce-instancefleetconfig-spotprovisioningspecification.html