64 lines
2.5 KiB
YAML
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
|