Amazon CloudWatch Logs の IA ログクラス使用時に Lambda Insights を利用できるのか確認してみた

Amazon CloudWatch Logs の IA ログクラス使用時に Lambda Insights を利用できるのか確認してみた

結論: ロググループ 「/aws/lambda-insights」さえ標準ログクラスであれば Lambda Insights は利用可能です。
2026.01.31

こんにちは、製造ビジネステクノロジー部の若槻です。

Amazon CloudWatch Logs のロググループには、「標準 (Standard) ログクラス」に加えて、2023年12月に新たに追加された「低頻度アクセス (Infrequent Access (IA)) ログクラス」があります。

https://aws.amazon.com/jp/blogs/news/new-amazon-cloudwatch-log-class-for-infrequent-access-logs-at-a-reduced-price/

IA ログクラスでは、標準ログクラスが提供するサブスクリプションフィルターやメトリクスフィルターなどの機能が利用できない代わりに、取り込みコストが半額であるという特徴があります。

さてここで気になったのが、ログクラスごとのサポート機能一覧では Lambda Insights はサポート非対象となっています。

https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CloudWatch_Logs_Log_Classes.html#Log_Class_Features

しかし上記ドキュメントの記述では、以下のいずれのロググループのログクラスを IA に設定した場合を指しているのかが不明瞭です。

  1. Lambda 関数本体のロググループ
  2. Lambda Insights 用ロググループ (/aws/lambda-insights)

そこで今回は、各ロググループをどのように IA ログクラスにした場合に Lambda Insights が利用可能であるのか、確認してみました。

確認してみた

確認に必要な AWS リソースは AWS CDK を使って構築します。

いずれも IA ログクラスの場合

まずは、Lambda 関数本体と Lambda Insights 用ロググループのいずれも IA ログクラスに設定した場合です。

lib/sample-stack.ts
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 用ロググループは標準ログクラスに設定した場合です。

lib/sample-stack.ts
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 でのモニタリングを継続する、という運用は検討できそうです。

以上

この記事をシェアする

FacebookHatena blogX

関連記事