Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
A shell script for uploading a React app build to S3 + CloudFront for deployment
#!/bin/bash
S3_BUCKET_NAME=$1
CF_ID=$2
# 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 /
@hades2510

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.

@john-osullivan

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.

@joaoportela

This comment has been minimized.

Copy link

commented Sep 10, 2019

I agree with @john-osullivan there doesn't seem to be a need for cache invalidation.
Still a great script for reference.

@dimkir

This comment has been minimized.

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.