\

PythonとAWS Lambdaを使用してログを作成する方法について説明します。AWS Lambdaは、Lambda関数を自動的にモニタリングし、Amazon CloudWatchにログエントリを送信します。この記事では、そのプロセスを詳しく説明します。

AWS Lambda 関数ログ作成

Lambda関数には、関数のインスタンスごとにCloudWatch Logsロググループとログストリームが用意されています。Lambdaのランタイム環境は、各呼び出しの詳細や、関数のコードからのその他の出力をログストリームに送信します。

関数コードからログを出力するには、組み込みの logging モジュールを使用できます。より詳細なエントリを行うため、 stdout または stderr に書き込みを行う任意のログ記録ライブラリを使用できます。

import os

def lambda_handler(event, context):
    print('## ENVIRONMENT VARIABLES')
    print(os.environ['AWS_LAMBDA_LOG_GROUP_NAME'])
    print(os.environ['AWS_LAMBDA_LOG_STREAM_NAME'])
    print('## EVENT')
    print(event)

上記の例では、Amazon CloudWatch Logsのロググループとストリーム、イベントオブジェクトの値をログに記録します。

ログ出力のフォーマット変更

出力フォーマットを変更したい場合は、以下のようにします。

import logging

logger = logging.getLogger()
formatter = logging.Formatter(
    '[%(levelname)s]\\t%(asctime)s.%(msecs)dZ\\t%(aws_request_id)s\\t%(message)s\\n',
    '%Y-%m-%dT%H:%M:%S'
)

for handler in logger.handlers:
    handler.setFormatter(formatter)

上記の Formatter のパラメータが標準のフォーマットに対応しているので、これを変更します。

ログレベルの動的変更

コードの変更なしにログレベルを変更するには、以下のように、環境変数等の外部からレベル名を取得してロガーに設定するようにします。

import logging
import os

logger = logging.getLogger()
level_name = os.environ.get('LOG_LEVEL')
level = logging.getLevelName(level_name)

if not isinstance(level, int):
    level = logging.INFO  # 未設定/設定ミス時のデフォルト

logger.setLevel(level)

以上がPythonとAWS Lambdaを使用してログを作成する基本的な方法です。これらのテクニックを使用することで、AWS Lambda関数の動作をより詳細に追跡し、問題の診断と解決を容易にすることができます。.

投稿者 admin

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です