How to pre-warm CloudFront edge servers' cache?
https://github.com/chrismay/warmfront looks like a suitable solution. Resolving the CloudFront distribution over multiple DNS servers around the world and sending requests to the resolved IP addresses.
Here is a post from an Amazon employee from a few years ago regarding pre-warming:
The issue is, if everyone pre-cached objects to a edge location all of the edge locations would run out of space because they would be flooded with objects that may or may not be being accessed. Right now the edge location only caches objects that are being accessed by users and will dump objects that have no been accessed recently if there is no more room on the server. I am not sure how a pre-cached scenario would work if it were a service.
Unless you know that you're going to be getting a steady flow of traffic over an extended period of time then pre-warming simply may not be effective. CloudFront may very well expire your objects to make room for other customers objects if they're getting more (or more recent) traffic than your own. Once that happens you've completely lost the advantage of any pre-warming you're able to perform.
We distribute our app downloads via CloudFront and I need to pre-warm two downloads on the website. We use Pingdom for that. They ping the url I provided from random locations across the globe and thus pre-warm the cloudfront cache for us.