Lambda 更新のスクリプトについて適当にまとめておく
階層
階層は以下の通りで sh deploy.sh でデプロイする。
.
├── requirements.txt
├── lambda_function.py
└── deploy.sh
ファイル
requirements.txt
Lambda から slack 通知を送れるようにライブラリを記載しておく。
slackweb==1.0.5
lambda_function.py
Lambda メインの処理でここでは slack の通知を送るだけ。
import json
import slackweb
def execute(execute_from):
start_message = f"""
Lamda の実行を開始しました。
実行環境: {execute_from}
"""
end_message = f"""
Lamda の実行が完了しました。
実行環境: {execute_from}
"""
slack = slackweb.Slack(url="https://hogehoge")
slack.notify(text=start_message)
# ここで何かの処理。。。
slack.notify(text=end_message)
return {
'statusCode': 200,
'body': json.dumps(f'done')
}
def lambda_handler(event, context):
execute("lambda")
if __name__ == '__main__':
execute("local")
deploy.sh
デプロイスクリプトは以下の通り。
最上位の階層にライブラリをインストールすると、散らかりGITでの管理ができないので tmp 配下にインストールして、必要なファイルも tmp 配下にコピーしています。
#!/bin/sh
FUNCTION_NAME="test"
ENV_VARIABLES="{MESSAGE1=hogehoge,MESSAGE2=fugafuga}"
config_updated=false
code_updated=false
mkdir ./tmp
cp -ip ./* ./tmp/
cd ./tmp
pip install -r requirements.txt -t ./
zip -r upload.zip ./
while true; do
aws lambda update-function-configuration --function-name $FUNCTION_NAME --environment Variables="$ENV_VARIABLES"
if [ $? -eq 0 ]; then
echo "Configuration updated successfully"
config_updated=true
break
else
echo "Error occurred. Retrying in 5 seconds..."
sleep 5
fi
done
while true; do
aws lambda update-function-code --function-name $FUNCTION_NAME --zip-file fileb://upload.zip
if [ $? -eq 0 ]; then
echo "Code updated successfully"
code_updated=true
break
else
echo "Error occurred. Retrying in 5 seconds..."
sleep 5
fi
done
while true; do
if $config_updated && $code_updated; then
cd ../
rm -Rf ./tmp
break
else
echo "Operating..."
fi
done
ディスカッション
コメント一覧
まだ、コメントがありません