AWS Lambda デプロイシェルスクリプト - CDK関数名を自動検索

問題

CDKでLambdaを作成すると関数名にハッシュが付きます(MyFunction-a1b2c3d4)。毎回コンソールで関数名を確認してからデプロイしなければなりません。

解決方法

#!/bin/bash
set -euo pipefail

FUNCTION_NAME="${1:?Usage: deploy.sh <function-name>}"
REGION="ap-northeast-2"

ACTUAL_FN=$(aws lambda list-functions \
  --region "$REGION" \
  --query "Functions[?starts_with(FunctionName, '${FUNCTION_NAME}')].FunctionName" \
  --output text)

if [ -z "$ACTUAL_FN" ]; then
  echo "Error: No Lambda function found with prefix '$FUNCTION_NAME'"
  exit 1
fi

echo "Found: $ACTUAL_FN"

npm run build
cd dist && zip -r ../deploy.zip . && cd ..

aws lambda update-function-code \
  --function-name "$ACTUAL_FN" \
  --zip-file "fileb://deploy.zip" \
  --region "$REGION"

echo "Deployed to $ACTUAL_FN"
rm deploy.zip

ポイント

  • --queryでJMESPathのstarts_with()を使えば、プレフィックスで関数を検索できます。CDKが付けるハッシュを知らなくても大丈夫です。
  • set -euo pipefailはエラー発生時に即座に中断します。ビルド失敗したのにデプロイまで進んでしまう事故を防ぎます。
  • fileb://はバイナリファイルパスを示すAWS CLIプロトコルです。file://とは異なるため注意。zipファイルは必ずfileb://で渡す必要があります。