AWS CDK で作成する Lambda に Lambda Insights を対応させる【TypeScript】
ラブグラフでエンジニアをしています横江( @yokoe24 )です!
ラブグラフでは AWS Lambda を活用していて、
そのコードは AWS CDK を使って管理しております。
その中で Lambda Insights の対応で少し手間取りましたので、ここに方法を残しておきます。
Lambda Insights とは?
『Lambda Insights』 は、
上の画像のように Lambda の実行結果をモニターしてくれる機能です。
メモリ負荷や所要時間を見られますので、
現在のパフォーマンスを見て Lambda の設定や、実行しているコードの改善に役立てられます。
AWSコンソールから GUI で操作する場合は、
「設定」→「モニタリングおよび運用ツール」→「その他の監視ツール」から設定変更が可能です。
AWS CDK で Lambda Insights を有効にする完成例
実際に完成形の例をお見せいたします。
TypeScript で書かれているファイルです。
import * as lambda from 'aws-cdk-lib/aws-lambda';
import { Architecture } from 'aws-cdk-lib/aws-lambda';
import { NodejsFunction } from 'aws-cdk-lib/aws-lambda-nodejs';
import { Construct } from 'constructs';
export default class LambdaResources {
public helloHandler: NodejsFunction;
// Ref: https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/Lambda-Insights-extension-versionsARM.html
private layerArn = arn:aws:lambda:ap-northeast-1:580247275435:layer:LambdaInsightsExtension-Arm64:30';
public initResources(scope: Construct) {
this.helloHandler = new NodejsFunction(scope, 'HelloHandler', {
runtime: lambda.Runtime.NODEJS_20_X,
architecture: Architecture.ARM_64,
entry: 'src/lambda/hello/index.ts',
insightsVersion: lambda.LambdaInsightsVersion.fromInsightVersionArn(this.layerArn),
});
}
}
フォルダ構成は
lib
┗ development
┗ resources
┗ lambda.ts
┗ stack.ts
となっていて、 stack.ts
から
import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
import LambdaResources from './resources/lambda';
export default class extends cdk.Stack {
constructor(scope: Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
const lambdaResources = new LambdaResources();
lambdaResources.initResources(this);
}
}
と呼び出される作りになっています。
AWS CDK で Lambda Insights を有効にする解説
非常に単純で、大事なのは
private layerArn = 'arn:aws:lambda:ap-northeast-1:580247275435:layer:LambdaInsightsExtension-Arm64:30';
// と、 new NodejsFunction 内の
insightsVersion: lambda.LambdaInsightsVersion.fromInsightVersionArn(this.layerArn),
の2つだけです。
(単純なのですが、この記法を紹介している記事がなく、けっこう調べました)
今回は architecture: Architecture.ARM_64
とあるように ARM CPU を使用しているので、
layerArn
には
https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/Lambda-Insights-extension-versionsARM.html に記載されている中から
東京リージョンの最新版を選択していますが、
x86_64 CPU を使用している場合は
https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/Lambda-Insights-extension-versionsx86-64.html に記載されている中からお選びください。
余談ですが、Lambda の料金として現在
ARM CPU を使うほうが x86_64 CPU を使うよりも 20% 安くなっていますので、
乗り換えがまだの方はオススメです!
たいていの Lambda アプリケーションならコードの修正なく変更できるかと思います。
おわりに
以上、かんたんですが
AWS CDK で Lambda Insights を有効化する方法をご説明させていただきました!
途中で AWS CDK のフォルダ構成について書きましたが、あまり自信なく、
サーバーレスに知見のある方々、
オススメがありましたら教えてくださいますと幸いです・・・🙌
Discussion
Contribute経験で見たことがあるのですが、これ実はArnでも自動で認識してくれる実装だったりします。
内部的にはこういう実装になってまして
こんな設定が普通に通ったりします。
ありがとうございます!!
知らなかったです、おもしろいです。
LambdaInsightsVersion、ドキュメントにもありますね。
architecture と region から適切な ARN を自動で拾ってくれるんですねー、
勉強になりました! 大変ありがとうございます!!! 💓