本ブログでは、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で一元管理できるようになります。
- AWSとの統合(Metric Streams)を設定する
- メニューからInfrastractureを選択
- AWSのタブを開き、Add an AWS accountを選択
- 以下の画面で Use metric streams を選択しガイドに従って設定を実施
ガイドの手順を完了することでAWS Metric Streamsを利用したメトリクスデータの送信を開始します。AWS Metric Streamsの設定の詳細はドキュメントを参照ください。
- AWSアカウントをNew Relicにリンクする
- AWSアカウントとNew Relicのリンクには、New Relic Lambda CLIを使用するため、以下のコマンドを実行してインストールします。
pip3 install newrelic-lambda-cli
- 次に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関数のパフォーマンス指標やトレースデータがモニタリングできるようになります。
-
SAMプロジェクトのセットアップ
まず、新しいSAMプロジェクトを作成するか、既存のプロジェクトに移動します。 - 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によって変更が必要です。こちらから確認して適切に設定してください。
- デプロイ
プロジェクトをデプロイすることで、設定が適用されます。デプロイは以下のコマンドで実行できます。
sam deploy --guided
上記の設定方法により、SAMを使ってNew RelicでAWS Lambdaをモニタリングするための設定が完了します。デプロイ後、New RelicでLambda関数のメトリクスやトレースデータを確認できるようになります。
ログデータの統合手順(Lambda Extensionの利用)
サーバーレスアプリケーションのログ管理に焦点を当てます。SAMを用いたLambda拡張を使用してログデータをモニタリングする設定手順を紹介します。CloudWatch Logsを使ったログデータの統合も選択可能です。ログ活用の目的やポリシーに合わせて適切な方法を選択してください。
-
SAMプロジェクトのセットアップ
まず、新しいSAMプロジェクトを作成するか、既存のプロジェクトに移動します。 - 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に設定する必要があります。
- デプロイ
プロジェクトをデプロイすることで、設定が適用されます。デプロイは以下のコマンドで実行できます。
sam deploy --guided
セットアップの確認
設定が正しく行われているか確認するために、以下の手順でNew Relic上のデータを確認します。
- AWS Lambda関数を何らかの形でトリガーし、データがNew Relicに送信されるようにします。例えば、API Gatewayを使用して関数をトリガーすることができます。
- New Relicのアカウントにログインします。
- メニューから「Serverless」を選択し、「Lambda functions」の一覧から対象のアプリケーションをクリックします。メニューに「Serverless」がない場合は「All Capabilities」から「Serverless」を選択してください。
メトリクスデータの確認手順
- 「Monitoring」の「CloudWatch metrics」を選択します。
- メトリクスデータが表示されていることを確認します。
トレースデータの確認手順
- 「Monitoring」の「Distributed Tracing」または「Events」の「Invocations」を選択します。
- トレースデータが表示されていることを確認します。
ログデータの確認手順
- 「Monitoring」の「Logs」を選択します。
- ログデータが表示されていることを確認します。
まとめ
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を活用し、デプロイされた変更とパフォーマンス指標の関連性を容易に把握できます。これにより、デプロイによって生じた問題や改善点を迅速に特定し、迅速な対応が可能となります。
本ブログに掲載されている見解は著者に所属するものであり、必ずしも New Relic 株式会社の公式見解であるわけではありません。また、本ブログには、外部サイトにアクセスするリンクが含まれる場合があります。それらリンク先の内容について、New Relic がいかなる保証も提供することはありません。