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://で渡す必要があります。