New Relic Lambdaレイヤーを追加することで、 Lambda関数を計装できます。 これにより、New Relic エージェントが統合され、関数が呼び出されるたびに自動監視が可能になります。

ヒント
New Relic 、 AWSインテグレーションを使用してAWSアカウントをNew Relicに統合し、 Lambda関数を自動的に検出して監視することをお勧めします。 これにより、サーバーレス機能に New Relic APM の全機能を活用できるようになります。
インストゥルメンテーション方法
New Relic包括的な監視のためにAWS Lambda 関数をプランニングするためのいくつかの方法を提供しています。
- コマンドラインインターフェース (CLI) : AWS CLI を使用して、 New Relicレイヤーを Lambda 関数にすばやく追加します。
- サーバーレス フレームワーク: New Relicインストゥルメンテーションをサーバーレス エンタープライズにシームレスに統合します。
- CloudFormation/SAM : インフラストラクチャ コード テンプレートにNew Relicレイヤーを含めます。
- AWS CDK : 他のインフラストラクチャリソースとともに、CDK コードに New Relic Lambda レイヤーを追加します。
- Terraform : New Relicインストゥルメンテーションを他のインフラストラクチャ リソースと一緒に簡単に管理します。
- 手動インストゥルメント : よりきめ細かな制御を行うには、 コンソールからNew Relic AWS Lambdaレイヤーを直接追加します。
選択した方法に関係なく、New Relic レイヤーは関数に New Relic エージェントを追加します。 このエージェントは、呼び出し時に関数を自動的にインストゥルメントし、ペイロード NR_LAMBDA_MONITORING を生成して、 New Relic Lambda 拡張機能を介してNew Relicに送信します。
ニーズに応じて、拡張機能をバイパスして CloudWatch でテレメトリーのみを表示するか、CloudWatch をバイパスするか、CloudWatch をフォールバックとして使用するかを選択できます。 このドキュメントの最後にあるCloudWatchセクションで、各オプションについて説明します。
newrelic-lambda CLI クイックスタートを使用して Lambda 関数を計算できます。
New Relicインストゥルメンテーション レイヤーをインストールまたはアップグレードするには、次のコマンドを実行します。
$newrelic-lambda layers install --nr-account-id YOUR_NR_ACCOUNT_ID --function my-function --upgrade --apm
このコマンドは、Lambdaのリージョンとランタイムに合わせて、利用可能な最新のレイヤーを自動的に見つけます。
このコマンドは、 New Relicインストゥルメントを迅速に開始する方法を提供し、 CI/CDパイプラインに簡単に統合できます。 ただし、既存の Lambda 関数リソースが変更されるため、更新されたコードを再デプロイすると、インストゥルメンテーションが誤って削除される可能性があります。 継続的な監視を確実に行うには、各インストーラの後にコマンドを再実行するか、可能であれば、 New Relicレイヤーと設定をインストーラ プロセスに直接組み込みます。
CLIはバッチで多くの関数を操作できることに注意してください。 --function all 、 --function installed 、または--function not-installedを使用して、リージョン内のすべての関数を操作するか、既存のNewRelicインストルメンテーションの有無にかかわらず関数のみを操作します。
AWSのサーバーレスアプリケーションモデル(SAM)は、CloudFormationテンプレートの一種であり、機能を依存するリソースに関連づけたり、アプリケーション全体のライフサイクルを管理したりすることを容易にします。私たちはLambdaのサンプル関数のほとんどにSAMとCloudFormationを使用しており、他の多くのツールはCloudFormationテンプレートの上に構築され、抽象化の追加レイヤーを提供しています。
CloudFormation は、 AWSリソースのプロビジョニングと管理を簡素化するAWSサービスです。 YAML または JSON テンプレートでリソースの望ましい状態を定義することにより、CloudFormation は基盤となるAPIコールを自動的に処理し、必要に応じてリソースを作成、更新、または削除します。 この宣言型アプローチにより、インフラストラクチャ管理が自動化され、一貫性と再現性が確保されます。
New RelicでLambda関数を監視するには:
New Relic Lambda レイヤーをインストールします。以下は、 Node.js Lambda関数の単純な CloudFormation テンプレートの例です。
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: And example of a simple instrumented Node.js Lambda
Type: AWS::Serverless::Function
CodeUri: newrelic-example-node/
Handler: newrelic-lambda-wrapper.handler
NEW_RELIC_LAMBDA_HANDLER: YOUR_PATH_TO_INITIAL_LAMBDA_HANDLER
NEW_RELIC_ACCOUNT_ID: YOUR_ACCOUNT_ID_HERE
NEW_RELIC_TRUSTED_ACCOUNT_KEY: YOUR_PARENT_ACCOUNT_ID_HERE
NEW_RELIC_APM_LAMBDA_MODE: 'true'
- !Sub arn:${AWS::Partition}:lambda:${AWS::Region}:451483290750:layer:NewRelicNodeJS16X:103
- AWSSecretsManagerGetSecretValuePolicy:
SecretArn: !ImportValue NewRelicLicenseKeySecret-NewRelic-LicenseKeySecretARN
通常、関数とそのリソースを記述するtemplate.yamlという名前のファイルがあります。
必要な環境変数を設定します。
更新された設定を使用してLambda関数をデプロイします。
Serverless フレームワークは、サーバーレス アプリケーション向けの人気のある開発およびデプロイメント ツールです。 これは AWS 向けに Node.js で記述されており、主に CloudFormation テンプレート上の高レベルの抽象化として機能します。 Node、Python、Ruby、Java、.NET 関数に適しています。
New RelicサーバーServerlessワーク アプリケーションの計装を簡素化するServerlessフレームワーク プラグインを提供します。
前提条件:
npmを使用する場合は、次のコマンドを実行します。
$npm install --save-dev serverless-newrelic-lambda-layers
または、 yarnを使用する場合は、次のコマンドを実行します。
$yarn add --dev serverless-newrelic-lambda-layers
serverless.yamlファイルを開き、次の設定を追加します。
serverless-newrelic-lambda-layers pluginsリストに追加します。
カスタム セクションに次のNew Relic設定を追加します。
- serverless-newrelic-lambda-layers
accountId: your-new-relic-account-id-here
apiKey: your-new-relic-personal-api-key-here
linkedAccount: your-new-relic-integration-account-name-here
プロバイダー セクションに次のNR.Apm.Lambda.Mode: trueタグを追加します。
必要な環境変数を設定します。
更新された設定を使用してLambda関数をデプロイします。
AWSクラウド開発キット ( AWS CDK) は、クラウド リソースをコードで定義し、 AWS CloudFormation を通じてプロビジョニングするためのフレームワークです。
AWS CDK で New Relic を使用するには、次の手順に従います。
New Relic Lambda レイヤーをインストールします。以下は、 New Relicインストゥルメントと言われたNode.js Lambda関数をデプロイする基本的な CDK アプリの例です。
import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
import * as lambda from 'aws-cdk-lib/aws-lambda';
export class NewRelicExampleCdkStack extends cdk.Stack {
constructor(scope: Construct, id: string, props?: cdk.StackProps) {
const NewReliclayerArn = 'arn:aws:lambda:us-east-1:451483290750:layer:NewRelicNodeJS22X:38';
const myFunction = new lambda.Function(this, "NewRelicExampleLambda", {
runtime: lambda.Runtime.NODEJS_20_X,
handler: "newrelic-lambda-wrapper.handler",
code: lambda.Code.fromAsset('lib/lambda-runtime-code'),
layers: [lambda.LayerVersion.fromLayerVersionArn(this, 'NewRelicLayer', NewReliclayerArn)],
NEW_RELIC_LAMBDA_HANDLER: 'index.handler',
NEW_RELIC_APM_LAMBDA_MODE: 'true'
cdk.Tags.of(myFunction).add('NR.Apm.Lambda.Mode', 'true');
必要な環境変数を設定します。
更新された設定を使用してLambda関数をデプロイします。
Terraform は、コード ツールとしての一般的なインフラストラクチャとして人気の高いツールです。 AWS リソースの管理に使用できます。 Terraform スクリプトを使用して インストゥルメントされた Lambda 関数のデプロイの 例をいくつか 紹介します。New Relic
New Relic Terraform プロバイダーを使用して、 AWSインテグレーションをセットアップできます。 プロバイダーをセットアップしたら、必要な環境変数を設定し、 Lambda関数にNR.Apm.Lambda.Mode: trueタグを追加します。
上記の方法よりもエラーが発生しやすく、手間がかかりますが、AWS LambdaコンソールからNew Relicを使用するようにLambda関数の設定を手動で変更することができます。Node.jsの場合、 Python、Ruby、Java。
New Relicランタイムに LambdaRuby を実装する方法の例を次に示します。
AWS ウェブコンソールのLambdaサービスセクションに移動します。 そこから、 New Relicに接続する Lambda関数 を見つけます。
デフォルトのCode [コード]タブで、 Layers [レイヤー]セクションまで下にスクロールし、 Add a layer [レイヤーの追加]ボタンをクリックします。
Create layer [レイヤーの作成]ボタンをクリックします。
Choose a layer [レイヤーの選択]に移動し、 Specify an ARN [ARN の指定]オプションを選択します。
New Relicのレイヤーリストに移動し、ドロップダウンリストを使用して、Lambda 関数がホストされているAWSリージョンを選択します。 そこから、Lambda 関数のRubyバージョンとアーキテクチャに一致する ARN を見つけます。 オプションは X86 と ARM64 の 2 つあります。 Copy to clipboard [クリップボードにコピー]ボタンを使用するか、ARN 文字列を手動でコピーします。
AWS コンソールフォームのSpecify an ARN [ARN の指定]セクションで、New Relic Lambda レイヤーの ARN を貼り付けます。
AWSコンソールフォームで、 Add [追加]ボタンをクリックして、Lambda 関数にレイヤーを追加します。
Lambda関数のページで、デフォルトのCode [コード]タブを選択した状態で、Runtime settings [ランタイム設定]セクションまで下にスクロールし、Edit [編集]ボタンをクリックします。
既存のHandler [ハンドラー]値の安全なコピーを作成します。 後の手順で必要になります。
Handler[ハンドラー]の値をnewrelic_lambda_wrapper.handlerに変更し、 Save [保存]をクリックします。
Lambda関数のページのConfiguration [設定]タブに切り替えます。
Environment variables [環境変数] サブタブを選択し、要件に基づいてEnvironment variables [環境変数]を定義します。
実行ロールを変更して、 New Relicシークレットにアクセスできるようにします。
AWSマネジメント コンソールの Configuration [設定] タブで、 Lambda関数にNR.Apm.Lambda.Mode: trueタグを追加します。
更新された設定を使用してLambda関数をデプロイします。
Java、Python、Node.js、および .Net ランタイムは、 Rubyと同じインストゥルメンテーション フローに従いますが、ハンドラーがいくつか異なります。 関数のコンソールで新しくアタッチされたレイヤーを指すように関数のハンドラーを更新する方法は次のとおりです。
Javaです。
RequestHandler 実装: com.newrelic.java.HandlerWrapper::handleRequest 。RequestStreamHandlerWrapper 実装: com.newrelic.java.HandlerWrapper::handleStreamsRequest 。
Python: newrelic_lambda_wrapper.handler (アンダースコア)。
ノードです。
- CommonJS:
newrelic-lambda-wrapper.handler (ハイフン)。 - ESM:
/opt/nodejs/node_modules/newrelic-esm-lambda-wrapper/index.handler (ハイフン)。
.Net の場合、ハンドラーを設定する必要はありません。
Go の場合、Lambda関数を計装するにはソースコードを変更する必要があることに注意してください。 設定変更だけでは十分ではありません。
データを見つけて使用する
AWS Lambda 関数をセットアップしたら、 New Relic APMインターフェースでデータを検索して使用できるようになります。 データはいくつかの主要な領域に編成されており、それぞれがLambda関数のパフォーマンスと状態に異なるインサイトを提供します。
APMインターフェイスでは、ディストリビューティッド(分散)トレーシング、サービス マップ、トランザクション、エラー分析など、 Lambda関数のさまざまな側面を探索できます。 これらの各エリアでは、 Lambda関数のパフォーマンス、レイテンシ、エラー率に関する詳細なインサイトが提供され、問題を迅速に特定して解決できるようになります。
ヒント
呼び出しエクスペリエンスは、 APM対話トレースと統合されました。 これにより、特定のAWS RequestIdを使用してAPMマッカーサー トレースにドリルダウンし、特定のLambda実行に関する詳細情報を得ることができます。
New Relic APMインターフェースでLambda関数を表示するには:
https://one.newrelic.com > APM & Servicesに移動します。
検索条件をisLambdaFunction = trueに設定します。
表示されたリストから、 Lambda関数を選択してデータを表示します。