【初心者向け】AWS Lambda関数でPythonのロギング
はじめに
本ページは個人の勉強で使用することを目的に作成しておりますが、記載の誤り等が含まれる場合がございます。
最新の情報についてはAWS公式ドキュメントをご参照ください。
やること
- Lambda関数でPythonのloggingライブラリモジュールを使用し、ログメッセージをCloudWatch Logsに出力する。
- logging確認用のテストイベントを作成して実行する。
1. Lambda関数用のIAMロール作成
- IAMロールを作成します。
- ロール名:
mori-role-lambda-logging_test
- 信頼されたエンティティタイプを選択
- 信頼されたエンティティタイプ:
AWSのサービス
- ユースケース:
Lambda
- 信頼されたエンティティタイプ:
- 許可を追加
- 許可ポリシー:
mori-policy-lambda-logging_test
- 許可ポリシー:
mori-policy-lambda-logging_test
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "logs:CreateLogGroup",
"Resource": "arn:aws:logs:${Region}:${AccountID}:log-group:${LogGroupName}"
},
{
"Effect": "Allow",
"Action": [
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "arn:aws:logs:${Region}:${AccountID}:log-group:${LogGroupName}:*"
}
]
}
ポリシーについて
-
${LogGroupName}
はLambda関数の場合デフォルトで/aws/lambda/★Lambda関数名
となります。
2. Lambda関数の作成
- Lambdaコンソールから関数の作成をクリックします。
- 以下の設定値を選択して関数の作成をクリックします。
- 関数の作成:
一から作成
- 基本的な情報
- 関数名:
mori-lambda-logging_test
- ランタイム:
Python 3.12
- アーキテクチャ:
x86_64
- 関数名:
- デフォルトの実行ロールの変更
- 実行ロール:
mori-role-lambda-logging_test
※手順2で作成したロール
- 実行ロール:
3. ソースコードの作成
- Lambda関数
mori-lambda-logging_test
のコードソースを作成します。
Lambda_function.py
import logging
logger = logging.getLogger()
logger.setLevel("INFO")
def lambda_handler(event, context):
if event['result'] == "normally":
logger.info("処理が終了しました")
else:
logger.warning("エラーが発生しました")
return event
コードについて
- eventで渡した
result
を判別。- normallyの場合はログレベル [INFO] で「処理が終了しました」と返す。
- それ以外の場合はログレベル [WARNING] で「エラーが発生しました」と返す。
4. logger.info()確認用のテストイベント作成
- Lambda関数
mori-lambda-logging_test
の管理画面からテストタブをクリックします。 - 以下の設定値でテストイベントを作成し、保存をクリックします。
- イベントアクションをテスト:
新しいイベントを作成
- イベント名:
normally-event
- イベント共有の設定:
プライベート
- テンプレート - オプション:
hello-world
イベントJSON
{
"result": "normally"
}
5. logger.warning()確認用のテストイベント作成
- Lambda関数
mori-lambda-logging_test
の管理画面からテストタブをクリックする。 - 以下の設定値でテストイベントを作成し、保存をクリックする。
- イベントアクションをテスト:
新しいイベントを作成
- イベント名:
error-event
- イベント共有の設定:
プライベート
- テンプレート - オプション:
hello-world
イベントJSON
{
"result": "error"
}
6. logger.info()確認用のテストイベント実行
-
Lambda関数
mori-lambda-logging_test
の管理画面からコードタブをクリックします。 -
Testから
normally-event
を選択します。
-
Testボタンをクリックします。
-
Execution ResultタブのFunction Logsにlogger.info()によるログメッセージが出力されています。
-
Cloud Watchコンソールから、ロググループ
/aws/lambda/mori-lambda-logging_test
の管理画面に移動します。 -
生成されたログストリームをクリックします。
-
CloudWatchLogs上にlogger.info()によるログメッセージが出力されています。
7. logger.warning()確認用のテストイベント実行
-
Lambda関数
mori-lambda-logging_test
の管理画面からコードタブをクリックします。 -
Testから
error-event
を選択します。 -
Testボタンをクリックします。
-
Execution ResultタブのFunction Logsにlogger.warning()によるログメッセージが出力されています
-
Cloud Watchコンソールから、ロググループ
/aws/lambda/mori-lambda-logging_test
の管理画面に移動します。 -
生成されたログストリームをクリックする
-
CloudWatchLogs上にlogger.warning()によるログメッセージが出力されています。
おわりに
- 2023年11月のアップデート。
- LambdaからCloudWatchへログ出力される際、ロググループ名はデフォルトで/aws/lambda/${functionname}となるが変更できる。
- ログフォーマットを
text/json
で選択できる。 - GUIでログレベルを指定できる。※フォーマットがJSONの場合のみ。
参考
- IAMロールにアタッチする権限
- AWS Lambda の高度なログ制御機能
Discussion