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