|
| 1 | +#!/usr/bin/env bash |
| 2 | +set -euo pipefail |
| 3 | + |
| 4 | +# |
| 5 | +# Publishes the created artifacts from GoReleaser to AWS as AWS Lambda Layers in every region. |
| 6 | +# Finalized by generating an ARN table which will be used in the release notes. |
| 7 | +# |
| 8 | + |
| 9 | +export AWS_FOLDER=${AWS_FOLDER:-.aws} |
| 10 | +export SUFFIX_ARN_FILE=${SUFFIX_ARN_FILE:-arn-file.md} |
| 11 | + |
| 12 | +GOOS=${GOOS:?Please provide GOOS environment variable.} |
| 13 | +GOARCH=${GOARCH:?Please provide GOARCH environment variable.} |
| 14 | +ELASTIC_LAYER_NAME=${ELASTIC_LAYER_NAME:?Please provide ELASTIC_LAYER_NAME environment variable.} |
| 15 | +ARCHITECTURE=${ARCHITECTURE:?Please provide ARCHITECTURE environment variable.} |
| 16 | +VERSION=${VERSION:?Please provide VERSION environment variable. e.g. current git tag} |
| 17 | + |
| 18 | +FULL_LAYER_NAME="${ELASTIC_LAYER_NAME}-${ARCHITECTURE}" |
| 19 | + |
| 20 | +ALL_AWS_REGIONS=$(aws ec2 describe-regions --output json --no-cli-pager | jq -r '.Regions[].RegionName') |
| 21 | + |
| 22 | +rm -rf "${AWS_FOLDER}" |
| 23 | + |
| 24 | +# Delete previous layers |
| 25 | +for region in $ALL_AWS_REGIONS; do |
| 26 | + layer_versions=$(aws lambda list-layer-versions --region="${region}" --layer-name="${FULL_LAYER_NAME}" | jq '.LayerVersions[].Version') |
| 27 | + echo "Found layer versions for ${FULL_LAYER_NAME} in ${region}: ${layer_versions:-none}" |
| 28 | + for version_number in $layer_versions; do |
| 29 | + echo "- Deleting ${FULL_LAYER_NAME}:${version_number} in ${region}" |
| 30 | + aws lambda delete-layer-version \ |
| 31 | + --region="${region}" \ |
| 32 | + --layer-name="${FULL_LAYER_NAME}" \ |
| 33 | + --version-number="${version_number}" |
| 34 | + done |
| 35 | +done |
| 36 | + |
| 37 | +mkdir -p "${AWS_FOLDER}" |
| 38 | + |
| 39 | +zip_file="./dist/${VERSION}-${GOOS}-${GOARCH}.zip" |
| 40 | + |
| 41 | +for region in $ALL_AWS_REGIONS; do |
| 42 | + echo "Publish ${FULL_LAYER_NAME} in ${region}" |
| 43 | + publish_output=$(aws lambda \ |
| 44 | + --output json \ |
| 45 | + publish-layer-version \ |
| 46 | + --region="${region}" \ |
| 47 | + --layer-name="${FULL_LAYER_NAME}" \ |
| 48 | + --compatible-architectures="${ARCHITECTURE}" \ |
| 49 | + --description="AWS Lambda Extension Layer for Elastic APM ${ARCHITECTURE}" \ |
| 50 | + --license="Apache-2.0" \ |
| 51 | + --zip-file="fileb://${zip_file}") |
| 52 | + echo "${publish_output}" > "${AWS_FOLDER}/${region}" |
| 53 | + layer_version=$(echo "${publish_output}" | jq '.Version') |
| 54 | + echo "Grant public layer access ${FULL_LAYER_NAME}:${layer_version} in ${region}" |
| 55 | + grant_access_output=$(aws lambda \ |
| 56 | + --output json \ |
| 57 | + add-layer-version-permission \ |
| 58 | + --region="${region}" \ |
| 59 | + --layer-name="${FULL_LAYER_NAME}" \ |
| 60 | + --action="lambda:GetLayerVersion" \ |
| 61 | + --principal='*' \ |
| 62 | + --statement-id="${FULL_LAYER_NAME}" \ |
| 63 | + --version-number="${layer_version}") |
| 64 | + echo "${grant_access_output}" > "${AWS_FOLDER}/.${region}-public" |
| 65 | +done |
| 66 | + |
| 67 | +sh -c "./.ci/create-arn-table.sh" |
0 commit comments