-
Notifications
You must be signed in to change notification settings - Fork 570
/
s3-set-cache-control-max-age.sh
executable file
·111 lines (92 loc) · 2.74 KB
/
s3-set-cache-control-max-age.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
#!/usr/bin/env bash
# Set Cache-Control public with max-age value on AWS S3 bucket website assets for all filetypes
# https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control
BUCKET="YOUR-S3-BUCKET-NAME"
MAXAGE="SET-SECONDS-VALUE-HERE"
# Functions
function check_command {
type -P $1 &>/dev/null || fail "Unable to find $1, please install it and run this script again."
}
function completed(){
echo
horizontalRule
tput setaf 2; echo "Completed!" && tput sgr0
horizontalRule
echo
}
function fail(){
tput setaf 1; echo "Failure: $*" && tput sgr0
exit 1
}
function horizontalRule(){
echo "====================================================="
}
function message(){
echo
horizontalRule
echo "$*"
horizontalRule
echo
}
function pause(){
read -n 1 -s -p "Press any key to continue..."
echo
}
# Verify AWS CLI Credentials are setup
# http://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html
if ! grep -q aws_access_key_id ~/.aws/credentials; then
if ! grep -q aws_access_key_id ~/.aws/config; then
fail "AWS config not found or CLI not installed. Please run \"aws configure\"."
fi
fi
check_command "aws"
# Check for AWS CLI profile argument passed into the script
# http://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html#cli-multiple-profiles
if [ $# -eq 0 ]; then
scriptname=`basename "$0"`
echo "Usage: ./$scriptname profile"
echo "Where profile is the AWS CLI profile name"
echo "Using default profile"
profile=default
else
profile=$1
fi
message "This script will set Cache-Control public with max-age value on AWS S3 bucket website assets."
echo
# pause
# Ensure Variables are set
if [ "$BUCKET" = "YOUR-S3-BUCKET-NAME" ]; then
read -r -p "Enter the S3 bucket name: " BUCKET
if [ -z "$BUCKET" ]; then
fail "Failed to set variables!"
fi
fi
if [ "$MAXAGE" = "SET-SECONDS-VALUE-HERE" ]; then
read -r -p "Enter the new Cache-Control Max-Age value in seconds: " MAXAGE
if [ -z "$MAXAGE" ]; then
fail "Failed to set variables!"
fi
fi
# Validate max-age range 0-31536000
if ! [ "$MAXAGE" -ge "0" ] || ! [ "$MAXAGE" -le "31536000" ]; then
fail "Invalid Cache-Control Max-Age value: $MAXAGE"
fi
# Determine the bucket region
REGION=$(aws s3api get-bucket-location --bucket $BUCKET --output text --profile $profile 2>&1)
if [ ! $? -eq 0 ]; then
fail "$REGION"
fi
if echo $REGION | grep -q "None"; then
REGION="us-east-1"
fi
message "Setting Cache-Control Max-Age $MAXAGE for all assets in S3 Bucket $BUCKET"
set=$(aws s3 cp --recursive --profile $profile --region $REGION s3://$BUCKET/ s3://$BUCKET/ --cache-control "public, max-age=$MAXAGE" --metadata-directive "REPLACE" 2>&1)
if [ ! $? -eq 0 ]; then
fail "$set"
fi
if echo $set | egrep -iq "error"; then
fail "$set"
else
echo "$set"
fi
completed