|
8 | 8 | # Publish the datadog python lambda layer across regions, using the AWS CLI
|
9 | 9 | # Usage: publish_layer.sh [region] [layer]
|
10 | 10 | # 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 |
11 | 15 |
|
12 | 16 | PYTHON_VERSIONS_FOR_AWS_CLI=("python2.7" "python3.6" "python3.7")
|
13 | 17 | LAYER_PATHS=(".layers/datadog_lambda_py2.7.zip" ".layers/datadog_lambda_py3.6.zip" ".layers/datadog_lambda_py3.7.zip")
|
|
55 | 59 | LAYER_NAMES=($2)
|
56 | 60 | fi
|
57 | 61 |
|
| 62 | + |
| 63 | + |
| 64 | + |
58 | 65 | echo "Publishing layers: ${LAYER_NAMES[*]}"
|
59 | 66 |
|
| 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 | + |
60 | 98 | for region in "${REGIONS[@]}"
|
61 | 99 | do
|
62 | 100 | echo "Starting publishing layer for region $region..."
|
|
67 | 105 | aws_version_key="${PYTHON_VERSIONS_FOR_AWS_CLI[$i]}"
|
68 | 106 | layer_path="${LAYER_PATHS[$i]}"
|
69 | 107 |
|
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 |
84 | 113 |
|
85 | 114 | i=$(expr $i + 1)
|
86 | 115 |
|
87 | 116 | done
|
88 |
| - |
89 | 117 | done
|
90 | 118 |
|
| 119 | +wait_for_processes |
| 120 | + |
91 | 121 | echo "Done !"
|
0 commit comments