Amazon CloudWatch Logs の IA ログクラス使用時に Lambda Insights を利用できるのか確認してみた
こんにちは、製造ビジネステクノロジー部の若槻です。
Amazon CloudWatch Logs のロググループには、「標準 (Standard) ログクラス」に加えて、2023年12月に新たに追加された「低頻度アクセス (Infrequent Access (IA)) ログクラス」があります。
IA ログクラスでは、標準ログクラスが提供するサブスクリプションフィルターやメトリクスフィルターなどの機能が利用できない代わりに、取り込みコストが半額であるという特徴があります。
さてここで気になったのが、ログクラスごとのサポート機能一覧では Lambda Insights はサポート非対象となっています。
しかし上記ドキュメントの記述では、以下のいずれのロググループのログクラスを IA に設定した場合を指しているのかが不明瞭です。
- Lambda 関数本体のロググループ
- Lambda Insights 用ロググループ (
/aws/lambda-insights)
そこで今回は、各ロググループをどのように IA ログクラスにした場合に Lambda Insights が利用可能であるのか、確認してみました。
確認してみた
確認に必要な AWS リソースは AWS CDK を使って構築します。
いずれも IA ログクラスの場合
まずは、Lambda 関数本体と Lambda Insights 用ロググループのいずれも IA ログクラスに設定した場合です。
import * as cdk from "aws-cdk-lib";
import * as lambda from "aws-cdk-lib/aws-lambda";
import * as lambda_nodejs from "aws-cdk-lib/aws-lambda-nodejs";
import * as logs from "aws-cdk-lib/aws-logs";
import { LogGroupClass } from "aws-cdk-lib/aws-logs";
import { Construct } from "constructs";
export class SampleStack extends cdk.Stack {
constructor(scope: Construct, id: string) {
super(scope, id);
/**
* Lambda Insights 用のロググループ
* @see https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/monitoring-insights.html#monitoring-insights-how
*/
new logs.LogGroup(this, "LambdaInsightsLogGroup", {
logGroupName: `/aws/lambda-insights`,
removalPolicy: cdk.RemovalPolicy.DESTROY,
logGroupClass: LogGroupClass.INFREQUENT_ACCESS, // IA ログクラスを指定
});
/**
* Lambda 関数本体のロググループ
*/
const sampleFunctionLogGroup = new logs.LogGroup(
this,
"SampleFunctionLogGroup",
{
removalPolicy: cdk.RemovalPolicy.DESTROY,
logGroupClass: LogGroupClass.INFREQUENT_ACCESS, // IA ログクラスを指定
},
);
/**
* Lambda 関数
*/
new lambda_nodejs.NodejsFunction(this, "SampleFunction", {
entry: "src/handler.ts",
logGroup: sampleFunctionLogGroup,
tracing: lambda.Tracing.ACTIVE,
insightsVersion: lambda.LambdaInsightsVersion.VERSION_1_0_404_0, // Lambda Insights を有効化
});
}
}
上記をデプロイし、Lambda 関数を実行した結果が以下です。
関数本体のロググループにはイベントログが出力されています。

ちなみに IA ログクラスの制限によりイベントログを開くことはできません。

Lambda Insights のロググループにもイベントログが出力されています。

Lambda Insights のコンソール画面では、メトリクスも実行も確認できません。

参考までに、X-Ray トレース上ではサービスマップもログも確認できました。

関数本体用のみ IA ログクラス
続いて、Lambda 関数本体用ロググループのみ IA ログクラスに設定し、Lambda Insights 用ロググループは標準ログクラスに設定した場合です。
import * as cdk from "aws-cdk-lib";
import * as lambda from "aws-cdk-lib/aws-lambda";
import * as lambda_nodejs from "aws-cdk-lib/aws-lambda-nodejs";
import * as logs from "aws-cdk-lib/aws-logs";
import { LogGroupClass } from "aws-cdk-lib/aws-logs";
import { Construct } from "constructs";
export class SampleStack extends cdk.Stack {
constructor(scope: Construct, id: string) {
super(scope, id);
/**
* Lambda Insights 用のロググループ
* @see https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/monitoring-insights.html#monitoring-insights-how
*/
new logs.LogGroup(this, "LambdaInsightsLogGroup", {
logGroupName: `/aws/lambda-insights`,
removalPolicy: cdk.RemovalPolicy.DESTROY,
logGroupClass: LogGroupClass.STANDARD, // 標準ログクラスを指定
});
/**
* Lambda 関数本体のロググループ
*/
const sampleFunctionLogGroup = new logs.LogGroup(
this,
"SampleFunctionLogGroup",
{
removalPolicy: cdk.RemovalPolicy.DESTROY,
logGroupClass: LogGroupClass.INFREQUENT_ACCESS, // IA ログクラスを指定
},
);
/**
* Lambda 関数
*/
new lambda_nodejs.NodejsFunction(this, "SampleFunction", {
entry: "src/handler.ts",
logGroup: sampleFunctionLogGroup,
tracing: lambda.Tracing.ACTIVE, // コールドスタート発生状況を X-Ray で確認できるようにするため有効化
insightsVersion: lambda.LambdaInsightsVersion.VERSION_1_0_404_0, // Lambda Insights を有効化
});
}
}
上記をデプロイし、Lambda 関数を実行した結果が以下です。
当然ならが、いずれのロググループにもイベントログは出力されています。


そして Lambda Insights のコンソール画面では、実行もメトリクスも確認できました。

Lambda Insights の関数横断のページでも同様にメトリクスおよび関数ごとのサマリーが確認できました。

Lambda Insights 用のロググループが IA ログクラスでない場合は、Lambda Insights が正常に動作することが分かりました。
おわりに
Amazon CloudWatch Logs の IA ログクラス使用時に Lambda Insights を利用できるのか確認してみました。
結論として、Lambda 関数本体用ロググループが IA ログクラスであっても、Lambda Insights 用ロググループが標準ログクラスであれば、Lambda Insights は正常に動作することが分かりました。
CloudWatch Logs のログ取り込み料金は存外に高額になることもあるため、クリティカルでない Lambda の関数本体用ロググループを IA ログクラスに設定しつつ、Lambda Insights でのモニタリングを継続する、という運用は検討できそうです。
以上






