Skip to content

Commit 5f52954

Browse files
Merge pull request #33 from DataDog/darcy.rayner/publish_parallel
Add parallel publishing logic
2 parents 4d2ff75 + 81f7070 commit 5f52954

File tree

1 file changed

+45
-15
lines changed

1 file changed

+45
-15
lines changed

scripts/publish_layers.sh

Lines changed: 45 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@
88
# Publish the datadog python lambda layer across regions, using the AWS CLI
99
# Usage: publish_layer.sh [region] [layer]
1010
# Specifying the region and layer arg will publish the specified layer to the specified region
11+
set -e
12+
13+
# Makes sure any subprocesses will be terminated with this process
14+
trap "pkill -P $$; exit 1;" INT
1115

1216
PYTHON_VERSIONS_FOR_AWS_CLI=("python2.7" "python3.6" "python3.7")
1317
LAYER_PATHS=(".layers/datadog_lambda_py2.7.zip" ".layers/datadog_lambda_py3.6.zip" ".layers/datadog_lambda_py3.7.zip")
@@ -55,8 +59,42 @@ else
5559
LAYER_NAMES=($2)
5660
fi
5761

62+
63+
64+
5865
echo "Publishing layers: ${LAYER_NAMES[*]}"
5966

67+
publish_layer() {
68+
region=$1
69+
layer_name=$2
70+
aws_version_key=$3
71+
layer_path=$4
72+
version_nbr=$(aws lambda publish-layer-version --layer-name $layer_name \
73+
--description "Datadog Lambda Layer for Python" \
74+
--zip-file "fileb://$layer_path" \
75+
--region $region \
76+
--compatible-runtimes $aws_version_key \
77+
| jq -r '.Version')
78+
79+
aws lambda add-layer-version-permission --layer-name $layer_name \
80+
--version-number $version_nbr \
81+
--statement-id "release-$version_nbr" \
82+
--action lambda:GetLayerVersion --principal "*" \
83+
--region $region
84+
85+
echo "Published layer for region $region, python version $aws_version_key, layer_name $layer_name, layer_version $version_nbr"
86+
}
87+
88+
BATCH_SIZE=60
89+
PIDS=()
90+
91+
wait_for_processes() {
92+
for pid in "${PIDS[@]}"; do
93+
wait $pid
94+
done
95+
PIDS=()
96+
}
97+
6098
for region in "${REGIONS[@]}"
6199
do
62100
echo "Starting publishing layer for region $region..."
@@ -67,25 +105,17 @@ do
67105
aws_version_key="${PYTHON_VERSIONS_FOR_AWS_CLI[$i]}"
68106
layer_path="${LAYER_PATHS[$i]}"
69107

70-
version_nbr=$(aws lambda publish-layer-version --layer-name $layer_name \
71-
--description "Datadog Lambda Layer for Python" \
72-
--zip-file "fileb://$layer_path" \
73-
--region $region \
74-
--compatible-runtimes $aws_version_key \
75-
| jq -r '.Version')
76-
77-
aws lambda add-layer-version-permission --layer-name $layer_name \
78-
--version-number $version_nbr \
79-
--statement-id "release-$version_nbr" \
80-
--action lambda:GetLayerVersion --principal "*" \
81-
--region $region
82-
83-
echo "Published layer for region $region, python version $aws_version_key, layer_name $layer_name, layer_version $version_nbr"
108+
publish_layer $region $layer_name $aws_version_key $layer_path &
109+
PIDS+=($!)
110+
if [ ${#PIDS[@]} -eq $BATCH_SIZE ]; then
111+
wait_for_processes
112+
fi
84113

85114
i=$(expr $i + 1)
86115

87116
done
88-
89117
done
90118

119+
wait_for_processes
120+
91121
echo "Done !"

0 commit comments

Comments
 (0)