New RelicのAWS Lambda 統合をLambda関数に導入することで、関数のパフォーマンスや、トレースを監視し、パフォーマンス劣化やエラーの原因を迅速に特定できるようになります。本記事で導入手順を紹介します!
New Relic Lambda 統合 とは
New RelicのAWS Lambdaの統合は、Lambda レイヤーでエージェントが提供されており、関数のコードを変更することなく、関数の内部動作を詳細に可視化します。 関数にレイヤーでNew Relicのエージェントを追加すると、関数が呼び出されるたびにDuration、スループット、トレースなどの主要なパフォーマンス メトリックを取得できます。
レイヤーを使わない計装方法やコンテナ化されたLambda関数への計装方法もありますので、手順の詳細は以下公式ドキュメントをご確認ください。
また、対応しているLambdaのランタイムは以下になります。
- Node.js
- Python
- .NET
- Ruby
- Java
サンプルのLambda関数をデプロイする
今回はAWSが提供しているNode.jsのサンプル Lambda関数をデプロイして、そこにNew Relic Lambda レイヤーを計装してみます。セットアップ手順をご確認の上、セットアップしてください。
New RelicのLambda レイヤーをインストールする
New Relicの管理画面の「+ Integrations & Agents」→「Monitor your Lambda functions」を選択します。
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F3485441%2F84324a94-51e6-48e0-e475-4e7bddebdb5d.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=5fadaf153a8aecc79f9cd3696394885b)
今回のサンプルはNode.jsなので「Node.js Lambda」を選択します。Python、Javaなど他の言語のLambda関数やコンテナの場合もサポートしていますので、実装にあった選択をしてください。
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F3485441%2Fef745496-7826-980f-ad5c-99448fcf9d02.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=44eb6d3a92cd46d3d17db2671cd724d1)
Lambda関数からNew Relicにデータを送るために使用するUser Keyを作成します。
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F3485441%2F4bb552f6-0d4f-7b11-d000-e2e70480dae2.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=fd2bd6012c4f1261a7bfc7a14a1f41ce)
今回はNew Relicが提供するCLIでセットアップするため、Serverless Frameworkの箇所はNoを選択、Lambda Extensionを選択します。
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F3485441%2F28dfd9bd-5f9e-47cb-b5d0-a9cfff2f426d.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=2272b409cbe1393c617019dd0fa02a12)
ガイドに従ってNew RelicのCLIのインストール、New RelicとAWSアカウントの連携設定を行います。AWSアカウントの連携が既に入っている場合は④のコマンドの実行は不要です。なお、AWSアカウントの連携設定については以下の記事が参考になります。
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F3485441%2Ff1e2c50d-29fb-bcbb-8e53-959de6c2e3bc.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=e806b2674f9f1cc68d05125e6fb5df20)
実行例を以下に記載します。
pip3 install --upgrade newrelic-lambda-cli
export AWS_DEFAULT_REGION=ap-northeast-1
newrelic-lambda integrations install --nr-account-id ****** \
--nr-api-key NRAK-62*******************
次のステップでLambda関数にレイヤーをインストールします。
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F3485441%2Fdb5b623b-20d3-5d74-c6ae-e9bee4372d02.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=4b0d413c15bdcc69f96b4fc25716c0a9)
レイヤーをインストールする関数名を以下コマンドで確認します。
newrelic-lambda functions list
上記コマンドで確認した関数名を「Lambda function's name」の箇所に入力します。
③のコマンドは--nr-regionの引数が足りず実行に失敗するため、「--nr-region us」を追記して実行します。
newrelic-lambda layers install \
-f nodejs-apig-function-k0wXBMA75z3w \
--nr-account-id ****** --nr-region us
Install Completeが返ってくることを確認します。
✨ Install Complete ✨
セットアップはこれだけで完了です。
データを確認しよう
AWSコンソールでLambda関数にレイヤーがインストールされたことを確認できました。
Node.jsのLambda関数がES モジュールを使用している場合は、Lambdaの環境変数 NEW_RELIC_USE_ESMをtrueに設定します。今回のサンプルアプリケーションはESモジュールを使用しているため環境変数を設定します。
AWSのサンプルアプリのフォルダ配下にあるスクリプトを実行して、API Gatewayに継続的にリクエストを送って、Lambda関数を実行します。
nodejs-apig % ./3-invoke.sh
New Relicの管理画面に戻って、「Test connection」をクリックします。
StatusがSuccessfulに変わることを確認します。
データが取れていることを確認します。
分散トレーシングも取得できています。今回のサンプルアプリではLambdaのトレースだけ確認できますが、このLambdaが他のアプリを呼んでたり、他のアプリから呼ばれている場合には分散トレースでつながるのでLambdaの他を含めた全体を追えるようになります。
とても簡単なセットアップ手順でLambda関数にレイヤーを計装して、Lambda関数のパフォーマンスやトレースのデータを取得できることを紹介しました。本記事ではNode.jsの関数で試していますが他ランタイムでも同じ手順で簡単にセットアップできますよ。ぜひ、お試しください!
その他
New Relicでは、新しい機能やその活用方法について、QiitaやXで発信しています!
無料でアカウント作成も可能なのでぜひお試しください!
New Relic株式会社のX(旧Twitter) や Qiita OrganizationOrganizationでは、
新機能を含む活用方法を公開していますので、ぜひフォローをお願いします。
無料のアカウントで試してみよう!
New Relic フリープランで始めるオブザーバビリティ!