kakakakakku blog

Weekly Tech Blog: Keep on Learning!

AWS CDK で ログクラス(低頻度アクセス)の Amazon CloudWatch Logs ロググループを追加する

2023年11月にリリースされた Amazon CloudWatch Logs ロググループのログクラス(低頻度アクセス: Infrequent Access)を使うとログの取り込みコストを 50% 削減できる❗️アカウントのコスト削減をするときに必ずと言っても良いほどに話題に上がる Amazon CloudWatch Logs のコストを最適化する選択肢が提供されたのは素晴らしいと思う \( 'ω')/

ポイントはメトリクスフィルタ・Live Tail・EMF (Embedded Metric Format) など,Amazon CloudWatch Logs の便利機能が使えないというところだけど,そもそもログの用途として「低頻度アクセスである」という前提なのでコストとのトレードオフと考えれば良いと思う.ちなみに Amazon CloudWatch Logs Insights は使えるよー👌

aws.amazon.com

aws.amazon.com

ちなみに Amazon S3 のストレージクラス(低頻度アクセス: Infrequent Access)のように追加でデータ取り出しコストが発生するのかと思ったけど,以下のドキュメントを読んだら違いは 取り込みコスト のみと書いてあった📝 よって,Amazon CloudWatch Logs Insights でクエリを実行したら追加コストが発生するようなことはなさそうなのも良かった👌

docs.aws.amazon.com

AWS CDK で試す

AWS CDK では v2.111.0 から Amazon CloudWatch Logs ロググループのログクラスを設定できるようになっていた❗️試してみたサンプルコード (TypeScript) を載せておく.

github.com

docs.aws.amazon.com

👾 sandbox-cdk-aws-stack.ts

logGroupClassaws_logs.LogGroupClass.INFREQUENT_ACCESS を設定した💡

import { Stack, StackProps, aws_logs } from 'aws-cdk-lib';
import { Construct } from 'constructs';

export class SandboxCdkAwsStack extends Stack {
  constructor(scope: Construct, id: string, props?: StackProps) {
    super(scope, id, props);

    new aws_logs.LogGroup(this, 'SandboxCdkLogGroup', {
      logGroupName: 'sandbox-cdk-aws-log-group',
      retention: aws_logs.RetentionDays.ONE_WEEK,
      logGroupClass: aws_logs.LogGroupClass.INFREQUENT_ACCESS,
    });
  }
}

👾 sandbox-cdk-aws.test.ts

テストコードでも LogGroupClass の値を確認している💡

import { App, aws_logs } from 'aws-cdk-lib';
import { Template } from 'aws-cdk-lib/assertions';
import * as SandboxCdkAws from '../lib/sandbox-cdk-aws-stack';

test('Amazon CloudWatch Logs Group with Infrequent Access log class', () => {
    const app = new App();
    const stack = new SandboxCdkAws.SandboxCdkAwsStack(app, 'SandboxCdkAwsStack');
    const template = Template.fromStack(stack);
    template.hasResourceProperties('AWS::Logs::LogGroup', {
        LogGroupClass: aws_logs.LogGroupClass.INFREQUENT_ACCESS
    });
});

結果

期待通りロググループを追加できた❗️メトリクスフィルタなどのタブは選択できないようになっていた💨

ロググループを追加できた