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

はじめに

AWS Serverless Application Model(SAM)の概要とNew Relicとの統合の利点

 AWS Serverless Application Model(SAM)は、AWS Lambda、Amazon API Gateway、Amazon DynamoDBなどのAWSサーバーレスサービスを使用してアプリケーションを構築、デプロイ、運用するためのフレームワークです。SAMは、CloudFormationの拡張であり、AWSリソースを簡潔なYAML設定ファイルで定義し、自動的にプロビジョニングされる機能を提供します。これにより、サーバーレスアプリケーションの開発とデプロイメントが簡素化されます。
 SAMを使って、New RelicとLambda関数の統合を簡単かつ効率的に実現できます。Lambda関数にNew RelicのLambdaレイヤーを追加し、環境変数を設定するだけで監視を開始できます。New Relicと統合することで、SAMで構築されたサーバーレスアプリケーションのパフォーマンス指標やトレースデータを一元的に分析し、可視化することができます。これにより、パフォーマンス最適化や障害対応が容易になります。

 このように、SAMを用いてAWS LambdaとNew Relicを統合することで、サーバーレスアプリケーションの開発、デプロイ、運用における効率性と品質が大幅に向上します。

前提条件

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

導入手順

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

 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関数のメトリクスデータを確認できるようになります。

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

 SAMを使ってNew RelicでAWS Lambdaをモニタリングする手順は効率的で容易です。まず、SAMテンプレートファイルにレイヤーと必要な環境変数を設定します。最後に、SAMテンプレートをデプロイし、New Relic上でLambda関数のパフォーマンス指標やトレースデータがモニタリングできるようになります。

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

  2. template.yamlファイルの編集
    プロジェクトのtemplate.yamlファイルを開き、以下の設定を変更・追加します。

 

    Properties:
      CodeUri: hello-world/
      # Lambda layerで関数をラップするためハンドラーを変更
      Handler: newrelic-lambda-wrapper.handler
      Runtime: nodejs18.x
      Environment:
        Variables:
          # 本来使用するハンドラーを設定する
          NEW_RELIC_LAMBDA_HANDLER: app.lambdaHandler
          # New RelicアカウントID
          NEW_RELIC_ACCOUNT_ID: <your-new-relic-account-id>
      Layers:
        # Lambda layerを読み込む
        - !Sub arn:${AWS::Partition}:lambda:${AWS::Region}:451483290750:layer:NewRelicNodeJS18X:21
      Policies:
        # ライセンスキーのシークレットを読み込む
        - AWSSecretsManagerGetSecretValuePolicy:
            SecretArn: !ImportValue NewRelicLicenseKeySecret-NewRelic-LicenseKeySecretARN

<your-new-relic-account-id>を適切な値に置き換えてください。
Lambda layerは言語、Runtimeによって変更が必要です。こちらから確認して適切に設定してください。

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

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

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

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

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

  2. template.yamlファイルの編集
    プロジェクトのtemplate.yamlファイルを開き、以下の設定を変更・追加します。

 

    Properties:
      CodeUri: hello-world/
      # Lambda layerで関数をラップするためハンドラーを変更
      Handler: newrelic-lambda-wrapper.handler
      Runtime: nodejs18.x
      Environment:
        Variables:
          # 本来使用するハンドラーを設定する
          NEW_RELIC_LAMBDA_HANDLER: app.lambdaHandler
          # New RelicアカウントID
          NEW_RELIC_ACCOUNT_ID: <your-new-relic-account-id>
          # Extensionを使用したログの転送を有効化
          NEW_RELIC_EXTENSION_SEND_FUNCTION_LOGS: true
      Layers:
        # Lambda layerを読み込む
        - !Sub arn:${AWS::Partition}:lambda:${AWS::Region}:451483290750:layer:NewRelicNodeJS18X:21
      Policies:
        # ライセンスキーのシークレットを読み込む
        - AWSSecretsManagerGetSecretValuePolicy:
            SecretArn: !ImportValue NewRelicLicenseKeySecret-NewRelic-LicenseKeySecretARN

<your-new-relic-account-id>を適切な値に置き換えてください。
Lambda layerは言語、Runtimeによって変更が必要です。こちらから確認して適切に設定してください。

LambdaのExtension経由でログを送信する場合は、NEW_RELIC_EXTENSION_SEND_FUNCTION_LOGSという環境変数をtrueに設定する必要があります。

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

セットアップの確認

設定が正しく行われているか確認するために、以下の手順で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関数から出力されたログデータを確認する

まとめ

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

 SAMとNew Relicの統合は、サーバーレスアプリケーションの開発・運用を効率化し、CI/CDプロセスの可視化・自動化を強化します。これにより、迅速なデリバリーと高品質なアプリケーションを実現することが可能になります。

次のステップ

 CI/CDパイプラインに組み込むことで、New RelicのCange Trackingを活用し、デプロイされた変更とパフォーマンス指標の関連性を容易に把握できます。これにより、デプロイによって生じた問題や改善点を迅速に特定し、迅速な対応が可能となります。