Search code examples
amazon-web-servicesamazon-cloudfront

Cloudfront limit to specific region


I have an application which will be used only in India. I am using Cloudfront distribution to serve the assets. I already have versioning strategy implemented for changing the names of the assets which are changed for the build.

Given all that I only have to invalidate index.html which takes care of using versioned other assets.

I am using cloudfront invalidation to invalidate index.html . I have observed that invalidating this single file always takes more than 2 minutes. I understand its because its invalidating the file at 42 edge locations. I dont need the file to be placed and invalidated at 42 edge location. If there is any configuration which will keep the file only at the edge locations in India, I guess invalidations will be faster.

Is there any configuration like that to limit copying of file at specific edge locations.


Solution

  • Amazon CloudFront uses a pull model, so files are only cached in locations after they have been requested from a cache location.

    For example:

    • A user on the Internet requests a file from your CloudFront distribution (eg dxxx.cloudfront.net/index.html)
    • The user is directed to the closest edge location (eg Chennai)
    • If the cache does not contain a copy of the file, then CloudFront fetches the file from the Origin (eg Amazon S3, an Amazon EC2 server, or elsewhere)
    • If the cache DOES contain a copy of the file, but it is past the expiration date, CloudFront will query the origin to determine whether the file has been modified since the last retrieval. If it has been modified, the updated file is fetched.
    • The file is then returned to the user.

    It is not possible to instruct CloudFront to only store the file in a single edge location. The closest capability is the use of a Price Class.

    From Amazon CloudFront pricing:

    • Price Class 100: USA, Europe
    • Price Class 200: USA, Europe, Hong Kong, Philippines, S. Korea, Singapore, Taiwan, Japan, India
    • Price Class All: USA, Europe, Hong Kong, Philippines, S. Korea, Singapore, Taiwan, Japan, India, South America, Australia

    These price classes can be used to limit the locations from which Amazon CloudFront serves content, in order to reduce costs (eg South America and Australia have the highest Data Transfer cost per GB).

    However, they cannot be used to instruct CloudFront to only store content in one location, nor to speed the Invalidation process.