New Relic Lambda LayerでNode.js 18を計測する

# 結論:exclamation:
1. New Relic公式ドキュメント、及びnewrelic-lambdaコマンドではNode.js18のサポートされていない。(現時点2023/04)
2. しかし、Node.18へのLambda Layerを手動追加できるので、その手順を示します。

# 対象者:family_mmb:
AWS LambdaでNode.js 18を利用しており、New Relic Lambda Layerを使って計測したい方を対象としています。
New Relicを知っていることを前提に、Lambda Layerから解説します。

## 目次:point_left:
1. New Relic Lambda Layerとは
2. newrelic-lambdaコマンドの実装と言語のサポート状況
3. Node.js 18のLambda Layer手動設定方法の解説
4. 動作確認


##  1. New Relic Lambda Layerとは
New Relic Lambda Layerは、AWS Lambdaに可観測性を実装するための手段です。

通常、AWS Lambdaでモニタリングをする場合はCloud Watch Metricsを使って実行回数(invocations)や実行時間(duration)などを把握します。これらに加えてNew Relic Lambda Layerは詳細な持続時間、コールドスタート、例外、トレースバックなどのパフォーマンスデータ計測し、サーバーレスの実態をより理解することができます。

## 2.newrelic-lambdaコマンドの実装と言語のサポート状況

通常、AWS LambdaへNew Relic Lambda Layer実装するときは、専用のCLIコマンドである[newrelic-lambda](https://docs.newrelic.com/jp/docs/serverless-function-monitoring/aws-lambda-monitoring/enable-lambda-monitoring/instrument-your-own/)コマンドを用いて簡単に導入できます。
現時点(2023/04)で[サポートされている言語のランタイム](https://docs.newrelic.com/jp/docs/serverless-function-monitoring/aws-lambda-monitoring/get-started/compatibility-requirements-aws-lambda-monitoring/)は下記の通りです。

![スクリーンショット 2023-04-28 1.02.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2820651/e1b71f15-2c0b-0364-5eb8-867ae837d64b.png)
サポートされているランタイムであれば、すぐにでも導入が可能です。


しかし、本記事の主題であるNodejs18.xなどはドキュメント上サポートされておらず、またnewrelic-lambdaコマンドでもサポートされていないためかインストールできませんでした。その時の結果は下記の通りでした。。

![スクリーンショット 2023-04-28 1.24.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2820651/b0fe2c5b-40ce-7ec8-4aa9-37c1875e3756.png)



「そうか、そうだよな。公式ドキュメントにサポートとして記載のないNode.js18は対応してないよな。」とあきらめかけていたそのとき、

![スクリーンショット 2023-04-28 1.12.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2820651/755df7aa-1811-9f59-c400-34fbd06c6501.png)
[※https://layers.newrelic-external.com/](https://layers.newrelic-external.com/)

 **「いや、いや、いや！　あるやんけっ！！！」**

もしや手動で実装したら動くのでは..?と思い、試してみました。

## 3.Node.js 18のLambda Layer手動設定方法の解説

### 0 Roleの設定（secretsmanager:GetSecretValue）
New Relic Lamnda Layerはsecret managerへアクセスするようなので、権限を付与しておきます。

正確に絞っても良いかもしれませんが、今回はサクッとやりたいので、用意されている「SecretsManagerReadWrite」を付与します。
![スクリーンショット 2023-04-28 1.58.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2820651/425b0295-a1e1-810c-8f84-870f3607f71b.png)



### 1 Lambda Layerのarnをコピーする
先ほどのサイトからNode.js 18用のARNをコピーします。
[https://layers.newrelic-external.com/](https://layers.newrelic-external.com/)

※東京リージョンのご指定を忘れずに！
![スクリーンショット 2023-04-28 1.35.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2820651/6b882108-81a6-ba40-dbb7-ed01edc4b36b.png)

「Copy to clipboard」でコピーします。
今回は「arn:aws:lambda:ap-northeast-1:451483290750:layer:NewRelicNodeJS18X:23」を使います。

![スクリーンショット 2023-04-28 1.36.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2820651/44d28101-9cf0-53a5-31fb-df37d44fcb93.png)

### 2 手動でLambda Layerを追加する
「レイヤーの追加」から追加できます。
![スクリーンショット 2023-04-28 1.34.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2820651/6119c461-28cb-1189-5273-672583b4cd73.png)

「ARNを指定」に先ほどのARNをペーストし「検証」をクリック。その後「追加」ボタンで追加しましょう。
![スクリーンショット 2023-04-28 1.40.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2820651/88726b42-d20a-9448-c5bb-d61e431c2090.png)

### 3 ハンドラー設定の変更
「ランタイム設定」から「編集」で変更します。
![スクリーンショット 2023-04-28 1.42.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2820651/c0848ad8-743f-9ca3-146b-8c4d7d2bb5db.png)

デフォルトのハンドラーは「index.handler」と設定されていますが、「newrelic-lambda-wrapper.handler」へ変更し「保存」します。

![スクリーンショット 2023-04-28 1.43.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2820651/c4532f8e-3ebf-bf1f-8ef6-1d9e59ae870d.png)

### 4 環境変数の設定

今回は下記のような値を設定していきます。
![スクリーンショット 2023-04-28 1.46.03 1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2820651/48ef01b8-0c6c-5fee-38ee-0f944c2d82ee.png)

`NEW_RELIC_ACCOUNT_ID`  
`NEW_RELIC_LAMBDA_HANDLER`
`NEW_RELIC_LAMBDA_EXTENSION_ENABLED`
`NEW_RELIC_EXTENSION_SEND_FUNCTION_LOGS`
`NEW_RELIC_DISTRIBUTED_TRACING_ENABLED`

### 5 Lambdaを実行し、New Relic上で確認する

「invocations」から実行時のトレースデータを参照できます。

![スクリーンショット 2023-04-28 2.00.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2820651/3f685227-1eab-773a-6a01-837ca683fda7.png)


と、このような流れで、newrelic-lambdaコマンドではなく、手動でインストールし動作を確認してみました。再掲になりますが、公式ドキュメントにNode.js18の要件の記載が無い以上、サポート問い合わせはできなさそうなので、いつかサポートされることをお待ちしております。