1
+ #! /bin/bash
2
+
3
+ # Unless explicitly stated otherwise all files in this repository are licensed
4
+ # under the Apache License Version 2.0.
5
+ # This product includes software developed at Datadog (https://www.datadoghq.com/).
6
+ # Copyright 2019 Datadog, Inc.
7
+
8
+ # Copy layers from us-east-1 to new region
9
+ # args: [new-region]
10
+
11
+ set -e
12
+
13
+ OLD_REGION=' us-east-1'
14
+
15
+ PYTHON_VERSIONS_FOR_AWS_CLI=(" python2.7" " python3.6" " python3.7" " python3.8" )
16
+ LAYER_NAMES=(" Datadog-Python27" " Datadog-Python36" " Datadog-Python37" " Datadog-Python38" )
17
+ NEW_REGION=$1
18
+
19
+ publish_layer () {
20
+ region=$1
21
+ layer_name=$2
22
+ aws_version_key=$3
23
+ layer_path=$4
24
+
25
+ version_nbr=$( aws lambda publish-layer-version --layer-name $layer_name \
26
+ --description " Datadog Lambda Layer for Python" \
27
+ --zip-file " fileb://$layer_path " \
28
+ --region $region \
29
+ --compatible-runtimes $aws_version_key \
30
+ | jq -r ' .Version' )
31
+
32
+ aws lambda add-layer-version-permission --layer-name $layer_name \
33
+ --version-number $version_nbr \
34
+ --statement-id " release-$version_nbr " \
35
+ --action lambda:GetLayerVersion --principal " *" \
36
+ --region $region
37
+
38
+ echo " Published layer for region $region , version $aws_version_key , layer_name $layer_name , layer_version $version_nbr "
39
+ }
40
+
41
+ get_max_version () {
42
+ layer_name=$1
43
+ region=$2
44
+ last_layer_version=$( aws lambda list-layer-versions --layer-name $layer_name --region $region | jq -r " .LayerVersions | .[0] | .Version" )
45
+ if [ " $last_layer_version " == " null" ]; then
46
+ echo 0
47
+ else
48
+ echo $last_layer_version
49
+ fi
50
+ }
51
+
52
+ if [ -z " $1 " ]; then
53
+ echo " Region parameter not specified, exiting"
54
+ exit 1
55
+ fi
56
+
57
+ j=0
58
+ for layer_name in " ${LAYER_NAMES[@]} " ; do
59
+ # get latest version
60
+ last_layer_version=$( get_max_version $layer_name $OLD_REGION )
61
+ starting_version=$( get_max_version $layer_name $NEW_REGION )
62
+ starting_version=$( expr $starting_version + 1)
63
+
64
+ # exit if region is already all caught up
65
+ if [ $starting_version -gt $last_layer_version ]; then
66
+ echo " INFO: $NEW_REGION is already up to date for $layer_name "
67
+ continue
68
+ fi
69
+
70
+ # run for each version of layer
71
+ for i in $( seq 1 $last_layer_version ) ; do
72
+ layer_path=$layer_name " _" $i .zip
73
+ aws_version_key=" ${PYTHON_VERSIONS_FOR_AWS_CLI[$j]} "
74
+
75
+ # download layer versions
76
+ URL=$( AWS_REGION=$OLD_REGION aws lambda get-layer-version --layer-name $layer_name --version-number $i --query Content.Location --output text)
77
+ curl $URL -o $layer_path
78
+
79
+ # publish layer to new region
80
+ publish_layer $NEW_REGION $layer_name $aws_version_key $layer_path
81
+ rm $layer_path
82
+ done
83
+
84
+ j=$( expr $j + 1)
85
+ done
0 commit comments