概要
シェルスクリプトでローカル環境から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}