[アップデート] AWS Lambda の CloudWatch Application Signals サポートランタイムに Java と .NET も追加されました
いわさです。
昨年の AWS re:Invent 2024 直前に、AWS Lambda は CloudWatch Application Signals を使った APM 機能をサポートしていました。[1]
この時サポートされていたのは Python と Node.js のみだったのですが、先日のアップデートで Java と .NET もサポートされるようになりました。
公式ドキュメントのサポートランタイムページ[2]にも次のように新しいランタイムおよびバージョンが追記されています。
- Python 3.10
- Python 3.11
- Python 3.12
- Python 3.13
- Node.js 18.x
- Node.js 20.x
- Node.js 22.x
- .NET 8 [New]
- Java 11 [New]
- Java 17 [New]
- Java 21 [New]
本日は SAM CLI 経由でデプロイした .NET 8 アプリケーションを CloudWatch Application Signals に対応させてみましたので手順などを紹介します。非常に簡単でした。
.NET 8 関数の作成
今回は次のように SAM CLI のクイックスタートテンプレートを使って .NET 8 のスタンドアロン Lambda 関数をデプロイします。
なお、デプロイの際に X-Ray や Application Insights などのトレース関係の機能などはオフの状態でデプロイします。
% sam init
You can preselect a particular runtime or package type when using the `sam init` experience.
Call `sam init --help` to learn more.
Which template source would you like to use?
1 - AWS Quick Start Templates
2 - Custom Template Location
Choice: 1
Choose an AWS Quick Start application template
1 - Hello World Example
2 - Data processing
3 - Hello World Example with Powertools for AWS Lambda
4 - Multi-step workflow
5 - Scheduled task
6 - Standalone function
7 - Serverless API
8 - Infrastructure event management
9 - Lambda Response Streaming
10 - Serverless Connector Hello World Example
11 - Multi-step workflow with Connectors
12 - GraphQLApi Hello World Example
13 - Full Stack
14 - Lambda EFS example
15 - DynamoDB Example
16 - Machine Learning
Template: 6
Which runtime would you like to use?
1 - dotnet8
2 - dotnet6
3 - nodejs20.x
4 - nodejs18.x
5 - nodejs16.x
Runtime: 1
:
iwasa.takahito@HL01200 hoge0218dotnetapm % sam deploy --profile hoge
Managed S3 bucket: aws-sam-cli-managed-default-samclisourcebucket-b2ke18r5t3j
A different default S3 bucket can be set in samconfig.toml
Or by specifying --s3-bucket explicitly.
Uploading to d4ef127ae62c6faf6b6b1d7033b2470d 32117 / 32117 (100.00%)
:
Successfully created/updated stack - hoge0218dotnetapm in ap-northeast-1
CloudWatch Application Signals を有効化する
ではここからデプロイ済みの関数を有効化していきます。
いくつか有効化の方法がありまして、CloudWatch コンソールあるいは Lambda コンソールから有効化する方法と、手動で関数に有効化に必要な設定を追加していく方法があります。
今回は CloudWatch コンソールと Lambda コンソールから有効化を行い、手動構成を行う際の設定が自動で追加されていく様子を観察してみます。
なお、公式ドキュメントの有効化手順はこちらです。
CloudWatch コンソールから有効化
CloudWatch の [Application Signals] - [サービス] から「Application Signals を有効にする」を選択します。
対象サービスを検出する機能を使って自動でセットアップすることが出来ます。
プラットフォームに Lamda を選択し、モニタリングする機能として先ほどデプロイした .NET 8 Lambda 関数を選択します。
これで有効化のための操作は終わりです。簡単すぎる。
CloudWatch Application Signals のサービスコンソールにアプリケーション情報が表示されるまで少し(私のときは5分ほど)かかりますが無事表示されました。直近のトレース情報などが取得できていました。
自動で Lambda 関数に設定が追加されている
このコンソールからのセットアップ操作を通して Lambda 関数にいくつか設定が追加されているので見てみましょう。
まず AWS Distro for OpenTelemetry を使うための Lambda レイヤーが追加されています。こちらはリージョン・ランタイムごとに必要なレイヤーが異なってまして、手動で追加する場合は前述の公式ドキュメントセットアップ手順からレイヤー ARN を取得しましょう。
あとはこのレイヤーに必要な環境変数や Lambda 実行ロールが CloudWatch Applications Signals の操作に必要な権限が追加されています。権限については CloudWatchLambdaApplicationSignalsExecutionRolePolicy マネージドポリシーが用意されているので、手動設定する場合はこちらを利用しましょう。
環境変数「AWS_LAMBDA_EXEC_WRAPPER」
Lambda 実行ロールに追加されたポリシー
あとは「モニタリングおよび運用ツール」の設定に CloudWatch Applications Signals 有効設定がありまして、こちらも有効化されています。
Lambda コンソールから
先ほどは CloudWatch コンソールからセットアップしましたが、Lambda コンソールからも同様にワンクリックで有効化できます。こちらでも良いと思います。
方法ですが先程最後に確認した「モニタリングおよび運用ツール」の設定の CloudWatch Applications Signals を有効にして保存するだけです。
そうするとレイヤー、環境変数、マネージドポリシーの追加などが自動で行われ、CloudWatch Application Signals サービスコンソール上に自動で表示されるようになります。こちらも非常に簡単です。
.NET 6 もサポートされていそう
なお、ここで気がついたのですが、今回の機能はどうやら既にサポートが終了している .NET 6 にも導入できるようです。
先ほどの有効化操作をした際、マネジメントコンソール上のサポートされているランタイムに「dotnet6」と表記されていました。
実際に CloudWatch Application Signals のサービス検出画面から確認してみると .NET 6 関数も選択することが出来ました。
一方で、.NET Core 2.1 の関数は選択することは出来ませんでした。
さいごに
本日は AWS Lambda の CloudWatch Application Signals サポートランタイムに Java と .NET も追加されたので、.NET 8 でふたつのオンボーディング手順を試してみました。
どちらも非常に簡単に導入できて良いですね。
.NET や Java の Lambda 関数を運用されている方はぜひ試してみてください。