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関数の動作をより詳細に追跡し、問題の診断と解決を容易にすることができます。.