How do you invalidate cache of index.html for a static site hosted on S3 with cloudfront?
Although the accepted answer is correct if you are using s3cmd, I was using the AWS CLI, so what I did was the following 2 commands:
First, to actually deploy the code:
aws s3 sync ./ s3://bucket-name-here/ --delete
Then, to create an invalidation on CloudFront:
aws cloudfront create-invalidation --distribution-id <distribution-id> --paths /index.html
Answering my own question. I deploy my site to S3 using s3cmd
tool and there is an option you could provide to invalidate CloudFront cache of all the files changed (diff between your dist
folder and S3 bucket). This invalidates cache of all the files changed including index file. It usually takes around 15-20 mins to reflect the new changes on production.
Here is the command
s3cmd sync --acl-public --reduced-redundancy --delete-removed --cf-invalidate [your-distribution-folder]/* s3://[your-s3-bucket]
Note: On macOS, you can install this tool via: brew install s3cmd
.
Hope this helps.
You can automate a process using Lambda. It allows you to create a function that will perform certain actions (Object invalidation in your case) in response to certain events (new file in S3).
More information here: https://aws.amazon.com/documentation/lambda/