シェルスクリプトでLambdaとLayer登録する方法


概要

シェルスクリプトでローカル環境からLambdaとLayerを登録した時の方法について記載します。
環境ごとにLambdaの登録先を変えられるようにしました。
Lambda関数はrubyで作成しています。

対応フロー

  • シェルを実行する前に、LambdaとLayerを作成する
  • AWSのアクセスキーとシークレットキーを取得する。
  • ローカル環境に取得したキーを設定する
  • Lambda登録のAWSコマンドを実行
  • Layer登録のAWSコマンドを実行
  • Layerの最新バージョンを登録したLambdaに紐つける
  • LambdaとLayerでファイルを分けて、シェルスクリプトの引数で環境を変えられるようにする

キーの設定

以下のコマンドを実行してアクセスキー、シークレットキー、region、output formatを指定する

aws configure --profile environment_name

Lambda登録用スクリプト

if [ "$1" == "environment_1" ]; then
  function_name="environment_1のLambda関数名"
elif [ "$1" == "environment_2" ]; then
  function_name="environment_2のLambda関数名"
else
  exit
fi
# 環境切り替え
export AWS_PROFILE=$1
# zipファイルは事前に作成しておく
# Lambda登録
aws lambda update-function-code --function-name ${function_name} --zip-file fileb://lambda.zip

Layer登録用スクリプト

if [ "$1" == "environment_1" ]; then
  layer_name="environment_1のLayer名"
  function_name="environment_1のLayer関数名"
elif [ "$1" == "environment_2" ]; then
  layer_name="environment_2のLayer名"
  function_name="environment_2のLayer関数名"
else
  exit
fi
# 環境切り替え
export AWS_PROFILE=$1
# zipファイルは事前に作成しておく
# Layer登録
aws lambda publish-layer-version --layer-name ${layer_name} --zip-file fileb://layer.zip --compatible-runtimes ruby2.7
# Layerの最新バージョンのARNを取得
import_layer_info=`aws lambda list-layer-versions --layer-name ${layer_name}`
latest_import_layer_arn=$(echo $import_layer_info | jq -r '.LayerVersions[0].LayerVersionArn')
# 最新のLayerをLambdaに紐つける
aws lambda update-function-configuration --function-name ${function_name} --layers ${latest_import_layer_arn}