Skip to content

Instantly share code, notes, and snippets.

What would you like to do?
A shell script for uploading a React app build to S3 + CloudFront for deployment
# Sync all files except for service-worker and index
echo "Uploading files to $S3_BUCKET_NAME..."
aws s3 sync build s3://$S3_BUCKET_NAME/ \
--acl public-read \
--exclude service-worker.js \
--exclude index.html
# Upload service-worker.js with directive to not cache it
echo "Uploading service-worker.js"
aws s3 cp build/service-worker.js s3://$S3_BUCKET_NAME/service-worker.js \
--metadata-directive REPLACE \
--cache-control max-age=0,no-cache,no-store,must-revalidate \
--content-type application/javascript \
--acl public-read
# Upload index.html
echo "Uploading index.html"
aws s3 cp build/index.html s3://$S3_BUCKET_NAME/index.html \
--metadata-directive REPLACE \
--cache-control max-age=0,no-cache,no-store,must-revalidate \
--content-type text/html \
--acl public-read
# Purge the cloudfront cache
echo "Purging the cache for CloudFront"
aws cloudfront create-invalidation \
--distribution-id $CF_ID \
--paths /

This comment has been minimized.

Copy link

commented Apr 17, 2019

great script.

you may need to add a --profile param if having multiple aws accounts on the same machine.


This comment has been minimized.

Copy link

commented May 17, 2019

Why do an invalidation if you're going through the effort of setting cache-control on the only files which would end up needing to be invalidated? I'm surprised, avoiding an invalidation was my whole rationale for setting Cache-Control to begin with.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.