🌲

【初心者向け】AWS Lambda関数でPythonのロギング

2024/08/24に公開

はじめに

本ページは個人の勉強で使用することを目的に作成しておりますが、記載の誤り等が含まれる場合がございます。
最新の情報についてはAWS公式ドキュメントをご参照ください。

やること

  • Lambda関数でPythonのloggingライブラリモジュールを使用し、ログメッセージをCloudWatch Logsに出力する。
  • logging確認用のテストイベントを作成して実行する。

1. Lambda関数用のIAMロール作成

  1. 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関数の作成

  1. Lambdaコンソールから関数の作成をクリックします。
  2. 以下の設定値を選択して関数の作成をクリックします。
  • 関数の作成:一から作成
  • 基本的な情報
    • 関数名:mori-lambda-logging_test
    • ランタイム:Python 3.12
    • アーキテクチャ:x86_64
  • デフォルトの実行ロールの変更
    • 実行ロール:mori-role-lambda-logging_test ※手順2で作成したロール

3. ソースコードの作成

  1. 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()確認用のテストイベント作成

  1. Lambda関数mori-lambda-logging_testの管理画面からテストタブをクリックします。
  2. 以下の設定値でテストイベントを作成し、保存をクリックします。
  • イベントアクションをテスト:新しいイベントを作成
  • イベント名:normally-event
  • イベント共有の設定:プライベート
  • テンプレート - オプション:hello-world


イベントJSON

{
  "result": "normally"
}

5. logger.warning()確認用のテストイベント作成

  1. Lambda関数mori-lambda-logging_testの管理画面からテストタブをクリックする。
  2. 以下の設定値でテストイベントを作成し、保存をクリックする。
  • イベントアクションをテスト:新しいイベントを作成
  • イベント名:error-event
  • イベント共有の設定:プライベート
  • テンプレート - オプション:hello-world


イベントJSON

{
  "result": "error"
}

6. logger.info()確認用のテストイベント実行

  1. Lambda関数mori-lambda-logging_testの管理画面からコードタブをクリックします。

  2. Testからnormally-eventを選択します。

  3. Testボタンをクリックします。

  4. Execution ResultタブのFunction Logsにlogger.info()によるログメッセージが出力されています。

  5. Cloud Watchコンソールから、ロググループ/aws/lambda/mori-lambda-logging_testの管理画面に移動します。

  6. 生成されたログストリームをクリックします。

  7. CloudWatchLogs上にlogger.info()によるログメッセージが出力されています。

7. logger.warning()確認用のテストイベント実行

  1. Lambda関数mori-lambda-logging_testの管理画面からコードタブをクリックします。

  2. Testからerror-eventを選択します。

  3. Testボタンをクリックします。

  4. Execution ResultタブのFunction Logsにlogger.warning()によるログメッセージが出力されています

  5. Cloud Watchコンソールから、ロググループ/aws/lambda/mori-lambda-logging_testの管理画面に移動します。

  6. 生成されたログストリームをクリックする

  7. CloudWatchLogs上にlogger.warning()によるログメッセージが出力されています。

おわりに

  • 2023年11月のアップデート。
    • LambdaからCloudWatchへログ出力される際、ロググループ名はデフォルトで/aws/lambda/${functionname}となるが変更できる。
    • ログフォーマットをtext/jsonで選択できる。
    • GUIでログレベルを指定できる。※フォーマットがJSONの場合のみ。

参考

  • IAMロールにアタッチする権限

https://docs.aws.amazon.com/ja_jp/service-authorization/latest/reference/list_amazoncloudwatchlogs.html#amazoncloudwatchlogs-log-group

  • AWS Lambda の高度なログ制御機能

https://aws.amazon.com/jp/blogs/news/introducing-advanced-logging-controls-for-aws-lambda-functions/

Discussion