本ブログではServerless Frameworkを使用して、New RelicとLambda関数を統合する手順について紹介します。New Relicを活用したLambdaモニタリングの概要については、ブログ「AWS Lambda関数のパフォーマンスをモニタリングする方法」を参照ください。

イントロダクション

Serverless Frameworkの概要とNew Relicとの統合の利点

 Serverless Frameworkは、オープンソースのサーバーレスアプリケーション開発フレームワークであり、AWS Lambdaをはじめとする複数のクラウドプロバイダに対応しています。開発者はServerless Frameworkを使用して、サーバーレスアプリケーションの構築、デプロイ、運用を効率化できます。環境構築やリソース管理を抽象化することで、開発者はアプリケーションのロジックに集中することができます。
 New RelicとServerless Frameworkの統合により、アプリケーションのパフォーマンスモニタリングやトラブルシューティングが容易になります。Serverless Frameworkのプラグインを使用して、New RelicとLambda関数を簡単に統合できます。この統合により、New Relicでリアルタイムのメトリクスやログ、トレースデータを一元的にモニタリング・分析できます。

 Lambda統合の方法としては、AWS Serverless Application Model(SAM)、Serverless Frameworkといった手段がありますが、SAMとServerless Frameworkの主な違いは、対応しているクラウドプロバイダの範囲です。SAMはAWSのサービスに特化したフレームワークであり、AWS Lambdaや関連リソースの管理に焦点を当てています。一方、Serverless Frameworkはプロバイダに依存しない設計であり、AWS Lambdaだけでなく、Azure Functions、Google Cloud Functionsなどの他のクラウドプロバイダにも対応しています。
 New RelicとServerless Frameworkの統合により、クラウドプロバイダに関係なく、統一されたパフォーマンスモニタリングとトラブルシューティングが可能になります。これにより、開発者は環境やリソースに関する懸念を軽減し、アプリケーションの品質向上に集中することができます。

前提条件

  • Serverless Frameworkがインストール済み
  • Python 3.3以上がインストール済み
  • AWS CLI をインストールし設定済み
  • New Relic アカウント ID
  • New Relic User key

導入手順

 Serverless Frameworkを使ってAWS LambdaとNew Relicを統合する手順は効率的で容易です。まず、serverless-newrelic-lambda-layersプラグインをインストールし、serverless.ymlに設定を追加します。次に、それぞれのパラメータを設定し、最後にデプロイコマンドを実行して、Lambda関数とNew Relicを連携させます。これで、サーバーレスアプリケーションのモニタリングと管理が効果的に行えるようになります。

メトリクスデータの統合手順

 AWS Metric Streamsを設定することで、AWSからNew Relicへのメトリックデータのリアルタイムストリーミングが可能になります。これにより、AWSリソースのパフォーマンスや使用状況をNew Relicで一元管理できるようになります。
 

  1. AWSとの統合(Metric Streams)を設定する
    1. メニューからInfrastractureを選択
    2. AWSのタブを開き、Add an AWS accountを選択
    3. 以下の画面で Use metric streams を選択しガイドに従って設定を実施
AWSとの統合を設定する際のガイド

ガイドの手順を完了することでAWS Metric Streamsを利用したメトリクスデータの送信を開始します。AWS Metric Streamsの設定の詳細はドキュメントを参照ください。

  1. AWSアカウントをNew Relicにリンクする
    1. AWSアカウントとNew Relicのリンクには、New Relic Lambda CLIを使用するため、以下のコマンドを実行してインストールします。
pip3 install newrelic-lambda-cli
  1. 次にNew Relic Lambda CLIのintegrationsコマンドを実行してIAMロールやシークレットキーの設定等を行います。CLIの詳細はドキュメントを参照ください。
newrelic-lambda integrations install \
    --nr-account-id <new-relic-account-id> \
    --nr-api-key <new-relic-personal-api-key>

<new-relic-account-id>、<new-relic-personal-api-key>には適切な値を設定してください。

上記の設定方法により、New RelicでAWS Lambdaのメトリクスデータをモニタリングするための設定が完了します。New RelicでLambda関数のメトリクスデータを確認できるようになります。

 

トレースデータの統合手順

  1. Serverless Frameworkプロジェクトのセットアップ
    まず、新しいServerless Frameworkプロジェクトを作成するか、既存のプロジェクトに移動します。

  2. プラグインのインストール
    serverless-newrelic-lambda-layersプラグインをインストールします。プロジェクトのルートディレクトリで次のコマンドを実行してください。

npm install --save-dev serverless-newrelic-lambda-layers

もしくは、

yarn add --dev serverless-newrelic-lambda-layers
  1. serverless.ymlファイルの編集
    プロジェクトのserverless.ymlファイルを開き、以下の設定を追加します。
# プラグインの追加
plugins:
  - serverless-newrelic-lambda-layers
# New Relicの設定
custom:
  newRelic:
 # New RelicアカウントID
    accountId: <your-new-relic-account-id>
    # New RelicパーソナルAPIキー
    apiKey: <your-new-relic-personal-api-key>

<your-new-relic-account-id>、<your-new-relic-personal-api-key>を適切な値に置き換えてください。

  1. デプロイ
    プロジェクトをデプロイすることで、設定が適用されます。デプロイは以下のコマンドで実行できます。
serverless deploy

上記の設定方法により、Serverless Frameworkを使ってNew RelicでAWS Lambdaをモニタリングするための設定が完了します。デプロイ後、New RelicでLambda関数のトレースデータを確認できるようになります。

ログデータの統合手順(Lambda Extensionの利用)

 サーバーレスアプリケーションのログ管理に焦点を当てます。Serverless Frameworkを用いたLambda拡張を使用してログデータをモニタリングする設定手順を紹介します。CloudWatch Logsを使ったログデータの統合も選択可能です。ログ活用の目的やポリシーに合わせて適切な方法を選択してください。

  1. serverless-newrelic-lambda-layersプラグインをインストールします(前述の手順で既にインストール済みの場合はスキップしてください)。
npm install --save-dev serverless-newrelic-lambda-layers

もしくは、

yarn add --dev serverless-newrelic-lambda-layers
  1. プロジェクトのserverless.ymlファイルを開き、以下の設定を追加します。
# プラグインの追加
plugins:
  - serverless-newrelic-lambda-layers
# New Relicの設定
custom:
  newRelic:
 # New RelicアカウントID
    accountId: <your-new-relic-account-id>
    # New RelicパーソナルAPIキー
    apiKey: <your-new-relic-personal-api-key>
    #  拡張機能によるログ転送を有効化
    enableFunctionLogs : true

LambdaのExtension経由でログを送信する場合は、enableFunctionLogsという属性をtrueに設定する必要があります。

  1. デプロイ
    プロジェクトをデプロイすることで、設定が適用されます。デプロイは以下のコマンドで実行できます。
serverless deploy

デプロイ後、New RelicでLambda関数のログデータを確認できるようになります。

セットアップの確認

設定が正しく行われているか確認するために、以下の手順でNew Relic上のデータを確認します。

  1. AWS Lambda関数を何らかの形でトリガーし、データがNew Relicに送信されるようにします。例えば、API Gatewayを使用して関数をトリガーすることができます。
  2. New Relicのアカウントにログインします。
  3. メニューから「Serverless」を選択し、「Lambda functions」の一覧から対象のアプリケーションをクリックします。メニューに「Serverless」がない場合は「All Capabilities」から「Serverless」を選択してください。

メトリクスデータの確認手順

  1. Monitoring」の「CloudWatch metrics」を選択します。
  2. メトリクスデータが表示されていることを確認します。
Lambda関数のメトリクス情報の確認

トレースデータの確認手順

  1. 「Monitoring」の「Distributed Tracing」または「Events」の「Invocations」を選択します。
  2. トレースデータが表示されていることを確認します。
分散トレーシングの詳細を確認する
Lambda関数のInvocationsの情報を確認する

ログデータの確認手順

  1. 「Monitoring」の「Logs」を選択します。
  2. ログデータが表示されていることを確認します。
Lambda関数から出力されたログデータを確認する

まとめ

 Serverless Frameworkを使用することで、CI/CDパイプラインに簡単に組み込むことができます。プラグインやテンプレートを活用してアプリケーションのデプロイ時に自動的にNew RelicとLambda関数が統合され、継続的デリバリーを効率的に進めることができます。New Relicを組み込んだCI/CDパイプラインにより、デプロイされるアプリケーションのパフォーマンス指標やログ、トレースデータがリアルタイムで収集・分析されます。これにより、開発チームはデプロイやリリースの品質を向上させ、アプリケーションの問題を迅速に特定できます。

 また、New Relicを利用することで、CI/CDプロセス内でのパフォーマンスの低下やリソース消費の増加などの問題を発見し、適切な対策を講じることができます。これにより、アプリケーションのリリースサイクルが短縮され、迅速なフィードバックと継続的な改善が実現されます。Serverless FrameworkとNew Relicの統合は、サーバーレスアプリケーションの開発・運用を効率化し、CI/CDプロセスの可視化・自動化を強化します。これにより、迅速なデリバリーと高品質なアプリケーションを実現することが可能になります。

次のステップ

 New RelicのChange Trackingはデプロイイベントの情報を連携することでサーバーレスアプリケーションのデプロイイベントとパフォーマンスの関連性を効果的に把握し、運用上の課題や最適化のポイントを特定しやすくなります。これにより、デプロイメントの影響を正確に把握し、問題が発生した場合の原因特定と対応が迅速に行えます。