AWS CDKでLambdaのログフォーマットをJSONにする
AWS LambdaがCloudWatch Logsに出力するログのフォーマットをJSONに変更可能になりました。CDKを使用してlambda.Functionを作成する際にloggingFormatパラメータを追加することで設定できます。Node.jsアプリの場合もaws_lambda_nodejsを使用し、loggingFormatを設定可能です。ログフォーマットをJSONに変更することで、CloudWatch Logsの設定やJSONデータの取り扱いが容易になります。
広告ここから
広告ここまで
目次
AWS LambdaがCloudWatch Logsに出力するログのフォーマットをJSONに変えれるようになりました。CDKでもパラメータ1つ追加するだけで対応できますので、早速試してみました。
loggingFormat
でログフォーマットを変更する
CDKでLambdaを作成する際に使うlambda.Function
には、loggingFormat
パラメータがあります。ここにlambda.LoggingFormat.JSON
を設定すると、ログ出力がJSONに変わります。
import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
import * as lambda from 'aws-cdk-lib/aws-lambda';
export class CdkStack extends cdk.Stack {
constructor(scope: Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
new lambda.Function(this, 'PythonFunction', {
runtime: lambda.Runtime.PYTHON_3_12,
handler: 'lambda_forecast.handler',
code: lambda.Code.fromAsset('lambda'),
loggingFormat: lambda.LoggingFormat.JSON,
})
}
}
NodeのConstructもloggingFormat
をサポートしている
Node.jsアプリをデプロイする場合は、aws_lambda_nodejs
を使います。こちらもloggingFormat
をサポートしていますので、これで設定しましょう。
import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
import { aws_lambda_nodejs, aws_iam } from 'aws-cdk-lib';
import { LoggingFormat } from 'aws-cdk-lib/aws-lambda';
import { join } from 'path'
export class SchoolAppBackendStack extends cdk.Stack {
constructor(scope: Construct, id: string, props?: cdk.StackProps & {
environment: string
}) {
super(scope, id, props);
const lambdaFunction = new aws_lambda_nodejs.NodejsFunction(this, `StripeWebhookForCheckout-${props?.environment}`, {
entry: join(__dirname, '../lambda/stripe-webhook-checkout.ts'),
handler: 'handler',
loggingFormat: LoggingFormat.JSON,
});
}
}
まとめ
ログフォーマットをJSONに変えることで、CloudWatch Logsのメトリクスフィルターやそれを元にしたアラームなどが設定しやすくなります。それ以外にもJSONデータの方が取り扱いしやすいケースが多いかと思いますので、CDKで設定しておきましょう。