|
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