shared-actions/aws-lambda-wait-for-provisioned-concurrency/action.yml
Marcel Frey 4d9b2459a4
All checks were successful
validate-shared-actions / validate-shared-actions (pull_request) Successful in 33s
Aikido Security PR Check / Aikido Security Scan (pull_request) Successful in 50s
feat: add aws-lambda-alias-update and aws-lambda-wait-for-provisioned-concurrency actions
2026-06-25 10:40:28 +00:00

64 lines
2.5 KiB
YAML

name: "AWS Lambda - Wait for Provisioned Concurrency"
description: >
Waits for provisioned concurrency to reach READY status for all Lambda
functions listed in the Terraform lambda_alias_updates output.
inputs:
lambda-alias-updates:
description: >
JSON array of Lambda alias update objects (Terraform output: lambda_alias_updates).
Each element is a JSON-encoded string with alias_name, function_name, and version.
required: true
runs:
using: "composite"
steps:
- name: Install AWS CLI
shell: bash
run: |
if ! command -v aws &> /dev/null; then
curl -fsSL "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o /tmp/awscliv2.zip
unzip -q /tmp/awscliv2.zip -d /tmp
sudo /tmp/aws/install
rm -rf /tmp/awscliv2.zip /tmp/aws
fi
- name: Install jq if missing
shell: bash
run: |
set -euo pipefail
command -v jq >/dev/null 2>&1 || sudo apt-get install -y --no-install-recommends jq
- name: Wait for Lambda Provisioned Concurrency
shell: bash
env:
LAMBDA_ALIAS_UPDATES: ${{ inputs.lambda-alias-updates }}
run: |
echo "$LAMBDA_ALIAS_UPDATES" | jq -c '.[] | fromjson' | while IFS= read -r entry; do
function_name=$(echo "$entry" | jq -r '.function_name')
alias_name=$(echo "$entry" | jq -r '.alias_name')
if aws lambda get-provisioned-concurrency-config \
--no-cli-pager \
--function-name "$function_name" \
--qualifier "$alias_name" >/dev/null 2>&1; then
echo "Provisioned concurrency found, waiting for READY status... ($function_name:$alias_name)"
while true; do
STATUS=$(aws lambda get-provisioned-concurrency-config \
--no-cli-pager \
--function-name "$function_name" \
--qualifier "$alias_name" \
--query 'Status' \
--output text 2>/dev/null || echo "FAILED")
echo "Current status: $STATUS ($function_name:$alias_name)"
if [[ "$STATUS" == "READY" ]]; then
echo "Provisioned Concurrency - Ready ($function_name:$alias_name)"
break
elif [[ "$STATUS" == "FAILED" ]]; then
echo "Provisioned concurrency failed, continuing anyway ($function_name:$alias_name)"
break
fi
done
else
echo "No provisioned concurrency configured, skipping wait ($function_name:$alias_name)"
fi
done