name: aws-lambda-update description: Update Lambda function alias to a new version, optionally wait for provisioned concurrency inputs: function-name: description: Lambda function name required: true function-version: description: Lambda version number required: true alias-name: description: Alias name required: true wait-provisioned-concurrency: description: Poll until provisioned concurrency is READY required: false default: "false" aws-role-arn: description: IAM role via OIDC required: true aws-profile: description: AWS CLI profile name required: false default: default region: description: AWS region required: false default: eu-central-1 lambda-alias-updates-json: description: JSON array of {function_name, version, alias_name} objects; when set, applies all entries instead of single alias required: false default: "" runs: using: composite steps: - uses: schmalz/shared-actions/.github/actions/aws-configure@v1 with: role-arn: ${{ inputs.aws-role-arn }} aws-profile: ${{ inputs.aws-profile }} region: ${{ inputs.region }} - run: | AWS_PROFILE="${{ inputs.aws-profile }}" WAIT_PC="${{ inputs.wait-provisioned-concurrency }}" update_alias() { local fn="$1" ver="$2" alias="$3" echo "Updating alias '$alias' on '$fn' to version $ver" aws lambda update-alias \ --function-name "$fn" \ --name "$alias" \ --function-version "$ver" \ --profile "$AWS_PROFILE" } wait_provisioned_concurrency() { local fn="$1" alias="$2" echo "Waiting for provisioned concurrency on '$fn' alias '$alias'..." while true; do STATUS=$(aws lambda get-provisioned-concurrency-config \ --function-name "$fn" \ --qualifier "$alias" \ --profile "$AWS_PROFILE" \ --query 'Status' --output text 2>/dev/null || echo "NOT_FOUND") echo " Status: $STATUS" if [ "$STATUS" = "READY" ]; then break elif [ "$STATUS" = "FAILED" ]; then echo "ERROR: Provisioned concurrency failed for '$fn' alias '$alias'" exit 1 fi sleep 5 done } UPDATES_JSON='${{ inputs.lambda-alias-updates-json }}' if [ -n "$UPDATES_JSON" ]; then echo "$UPDATES_JSON" | jq -c '.[]' | while read -r entry; do FN=$(echo "$entry" | jq -r '.function_name') VER=$(echo "$entry" | jq -r '.version') ALIAS=$(echo "$entry" | jq -r '.alias_name') update_alias "$FN" "$VER" "$ALIAS" if [ "$WAIT_PC" = "true" ]; then wait_provisioned_concurrency "$FN" "$ALIAS" fi done else update_alias "${{ inputs.function-name }}" "${{ inputs.function-version }}" "${{ inputs.alias-name }}" if [ "$WAIT_PC" = "true" ]; then wait_provisioned_concurrency "${{ inputs.function-name }}" "${{ inputs.alias-name }}" fi fi shell: bash