data "aws_region" "current" {}
resource "aws_lambda_function" "x-ray_lambda" {
...
runtime = "python3.12"
environment {
variables = {
POWERTOOLS_LOG_LEVEL = "INFO"
POWERTOOLS_SERVICE_NAME = "sample_app"
}
}
logging_config {
log_format = "JSON"
}
tracing_config {
mode = "Active"
}
layers = [
"arn:aws:lambda:${data.aws_region.current.name}:017000801446:layer:AWSLambdaPowertoolsPythonV3-python312-x86_64:2"
]
}
# lambda policy
...
statement {
effect = "Allow"
actions = [
"xray:PutTraceSegments",
"xray:PutTelemetryRecords"
]
resources = ["*"]
}
...
from aws_lambda_powertools import Logger , logger = Logger() で置き換えるだけで色々出るようになる。独自ロガーを自分で実装する必要なんかなかったんや…
{
"timestamp": "2024-10-19T15:17:48Z",
"level": "INFO",
"message": "1/n=0.3333333333333333",
"logger": "sample",
"requestId": "bfcf2cdc-3915-59e4-89f6-7351f6c37c7d"
}
{
"timestamp": "2024-10-19T15:17:48Z",
"level": "ERROR",
"message": "Divid error",
"logger": "sample",
"stackTrace": [
" File \"/var/task/sample.py\", line 33, in handler\n logger.info(f\"{1/n=}\")\n ~^~\n"
],
"errorType": "ZeroDivisionError",
"errorMessage": "division by zero",
"requestId": "bfb3d7f1-bec1-54a2-9d89-887c7117a029",
"location": "/var/task/sample.py:handler:35"
}
from aws_lambda_powertools import Logger
from aws_lambda_powertools.utilities.typing import LambdaContext
import json
logger = Logger()
@logger.inject_lambda_context
def handler(data: dict, context: LambdaContext):
sub(data)
...
from aws_lambda_powertools import Logger
logger = Logger()
def sub(data):
...
{
"level": "INFO",
"location": "handler:35",
"message": "1/n=0.3333333333333333",
"timestamp": "2024-10-19 15:29:41,214+0000",
"service": "service_undefined",
"cold_start": true,
"function_name": "x-ray_sample_function",
"function_memory_size": "128",
"function_arn": "arn:aws:lambda:us-east-1:533266996794:function:x-ray_sample_function",
"function_request_id": "ee386a0f-98da-5e83-b882-35824a43f472",
"xray_trace_id": "1-6713d064-e2a43f0c608d9cfa324553e5"
}
{
"level": "ERROR",
"location": "handler:37",
"message": "Divid error",
"timestamp": "2024-10-19 15:29:41,213+0000",
"service": "service_undefined",
"cold_start": true,
"function_name": "x-ray_sample_function",
"function_memory_size": "128",
"function_arn": "arn:aws:lambda:us-east-1:533266996794:function:x-ray_sample_function",
"function_request_id": "ee386a0f-98da-5e83-b882-35824a43f472",
"exception": "Traceback (most recent call last):\n File \"/var/task/sample.py\", line 35, in handler\n logger.info(f\"{1/n=}\")\n ~^~\nZeroDivisionError: division by zero",
"exception_name": "ZeroDivisionError",
"stack_trace": {
"type": "ZeroDivisionError",
"value": "division by zero",
"module": "builtins",
"frames": [
{
"file": "/var/task/sample.py",
"line": 35,
"function": "handler",
"statement": "logger.info(f\"{1/n=}\")"
}
]
},
"xray_trace_id": "1-6713d064-e2a43f0c608d9cfa324553e5"
}
https://docs.powertools.aws.dev/lambda/python/latest/core/tracer/
from aws_lambda_powertools import Tracer
from aws_lambda_powertools.utilities.typing import LambdaContext
tracer = Tracer()
@tracer.capture_lambda_handler
def handler(data: dict, context: LambdaContext):
....

https://docs.aws.amazon.com/ja_jp/xray/latest/devguide/xray-services-sns.html