-
Notifications
You must be signed in to change notification settings - Fork 45
/
Copy pathadd_new_region.sh
executable file
·111 lines (94 loc) · 3.03 KB
/
add_new_region.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
#!/bin/bash
# Unless explicitly stated otherwise all files in this repository are licensed
# under the Apache License Version 2.0.
# This product includes software developed at Datadog (https://www.datadoghq.com/).
# Copyright 2019 Datadog, Inc.
# Copy layers from us-east-1 to new region
# args: [new-region]
set -e
OLD_REGION='us-east-1'
LAYER_NAMES=(
"Datadog-Python38"
"Datadog-Python38-ARM"
"Datadog-Python39"
"Datadog-Python39-ARM"
"Datadog-Python310"
"Datadog-Python310-ARM"
"Datadog-Python311"
"Datadog-Python311-ARM"
"Datadog-Python312"
"Datadog-Python312-ARM"
"Datadog-Python313"
"Datadog-Python313-ARM"
)
PYTHON_VERSIONS_FOR_AWS_CLI=(
"python3.8"
"python3.8"
"python3.9"
"python3.9"
"python3.10"
"python3.10"
"python3.11"
"python3.11"
"python3.12"
"python3.12"
"python3.13"
"python3.13"
)
NEW_REGION=$1
publish_layer() {
region=$1
layer_name=$2
aws_version_key=$3
layer_path=$4
version_nbr=$(aws lambda publish-layer-version --layer-name $layer_name \
--description "Datadog Lambda Layer for Python" \
--zip-file "fileb://$layer_path" \
--region $region \
--compatible-runtimes $aws_version_key \
| jq -r '.Version')
aws lambda add-layer-version-permission --layer-name $layer_name \
--version-number $version_nbr \
--statement-id "release-$version_nbr" \
--action lambda:GetLayerVersion --principal "*" \
--region $region
echo "Published layer for region $region, version $aws_version_key, layer_name $layer_name, layer_version $version_nbr"
}
get_max_version() {
layer_name=$1
region=$2
last_layer_version=$(aws lambda list-layer-versions --layer-name $layer_name --region $region | jq -r ".LayerVersions | .[0] | .Version")
if [ "$last_layer_version" == "null" ]; then
echo 0
else
echo $last_layer_version
fi
}
if [ -z "$1" ]; then
echo "Region parameter not specified, exiting"
exit 1
fi
j=0
for layer_name in "${LAYER_NAMES[@]}"; do
# get latest version
last_layer_version=$(get_max_version $layer_name $OLD_REGION)
starting_version=$(get_max_version $layer_name $NEW_REGION)
starting_version=$(expr $starting_version + 1)
# exit if region is already all caught up
if [ $starting_version -gt $last_layer_version ]; then
echo "INFO: $NEW_REGION is already up to date for $layer_name"
continue
fi
# run for each version of layer
for i in $(seq 1 $last_layer_version); do
layer_path=$layer_name"_"$i.zip
aws_version_key="${PYTHON_VERSIONS_FOR_AWS_CLI[$j]}"
# download layer versions
URL=$(AWS_REGION=$OLD_REGION aws lambda get-layer-version --layer-name $layer_name --version-number $i --query Content.Location --output text)
curl $URL -o $layer_path
# publish layer to new region
publish_layer $NEW_REGION $layer_name $aws_version_key $layer_path
rm $layer_path
done
j=$(expr $j + 1)
done