@@ -52,16 +52,51 @@ parse_url() {
52
52
done
53
53
}
54
54
55
+ s3_bucket_region () {
56
+ local bucket=" $1 "
57
+
58
+ local guess_region=" ${AWS_DEFAULT_REGION:- } "
59
+ if [ -z " ${guess_region} " ]
60
+ then
61
+ # This plug-in may not be executing in an AWS VPC or have access to the IDMS
62
+ # Fail fast with the --connect-timeout flag
63
+ local token=$( curl -X PUT -H " X-aws-ec2-metadata-token-ttl-seconds: 60" --fail --silent --show-error --location --connect-timeout 5 http://169.254.169.254/latest/api/token)
64
+ if [ -n " ${token} " ]
65
+ then
66
+ guess_region=$( curl -H " X-aws-ec2-metadata-token: $token " --fail --silent --show-error --location http://169.254.169.254/latest/meta-data/placement/region)
67
+ fi
68
+ fi
69
+ if [ -z " ${guess_region} " ]
70
+ then
71
+ guess_region=" us-east-1"
72
+ fi
73
+
74
+ # Buckets in us-east-1 have a LocationConstraint of null
75
+ # https://docs.aws.amazon.com/cli/latest/reference/s3api/get-bucket-location.html
76
+ local bucket_region=" $( aws s3api get-bucket-location --bucket " ${bucket} " --region " ${guess_region} " --output text --query " LocationConstraint || 'us-east-1'" ) "
77
+
78
+ echo " ${bucket_region} "
79
+ }
80
+
55
81
s3_download () {
56
82
local bucket=" $1 "
57
83
local key=" $2 "
58
- local aws_s3_args=(" --quiet" " --region=$AWS_DEFAULT_REGION " )
84
+
85
+ local bucket_region=" $( s3_bucket_region " ${bucket} " ) "
86
+ if [ -z " ${bucket_region} " ]
87
+ then
88
+ echo " Could not determine the bucket region for ${bucket} " >&2
89
+ exit 2
90
+ fi
91
+
92
+ local aws_s3_args=(" --quiet" " --region=${bucket_region} " )
59
93
60
94
if [[ " ${BUILDKITE_USE_KMS:- true} " =~ ^(true| 1)$ ]] ; then
61
95
aws_s3_args+=(" --sse" " aws:kms" )
62
96
fi
63
97
64
- if ! aws s3 cp " ${aws_s3_args[@]} " " s3://$1 /$2 " - ; then
98
+ local s3_uri=" s3://${bucket} /${key} "
99
+ if ! aws s3 cp " ${aws_s3_args[@]} " " ${s3_uri} " - ; then
65
100
echo " Failed to download s3://$bucket /$key " >&2
66
101
exit 1
67
102
fi
0 commit comments