AKIBA.SaaS ONLINE #1で「サーバーレスウェブアプリケーションにおける監視」というタイトルで話しました! #AKIBASaaS

こんにちは、インターン生のみなみです。 2022年3月9日に行われたAKIBA.SaaSで「サーバーレスウェブアプリケーションにおける監視」というテーマでセッションをしたのでそのまとめと資料公開記事になります。
2022.03.23

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

お久しぶりです!インターン生のみなみです。 アライアンス統括部でのインターンの一環としてAKIBA.SaaS ONLINEで登壇させていただきました!

セッション概要

今回のセッションではサーバーレスウェブアプリケーションの監視をNew Relicを使ってどんなことができるか?どのように導入するのか?と言う観点で発表しました。

ちなみに「サーバーレスウェブアプリケーション」とはLambdaやFargateがバックエンドであるSPAを例として挙げております。

登壇資料

本セッションの補足説明と関連ブログ

AWS Integrationsの導入

New Relicの基本でもあるAWS Integrationsの導入は2021年に利用可能となったCloudWatch Metric Streamsのお陰で「ストリーミング化」、「コスト削減」が出来るようになりました。 New Relicのコンソール画面も親切で分かりやすいですが、以下ブログではCloudWatch Metric Streamsを使ったAWS Integrationsの導入、よりコスト削減をする為のフィルタリングの設定まで説明されていますので、おすすめです。

Fargate構成の場合の導入方法

以下のブログではステップ1から4まで、そしてフロントエンド監視で本セッションでも説明したNew Relic Browserの導入をサンプルアプリケーションを用いて説明しています。

Lambda構成の場合の導入方法

2020年の秋にLambda Extensionsで利用可能になったことで、LambdaにおけるAPM導入方法が大きく変わりました。

以前まではLambda実行環境に常駐プログラム(Agent)をインストールすることができなかった為、コードを改変しLambdaの実行中にメトリクスデータをNew Relicのエンドポイントに送信するような仕組みが必要でした。しかし、Lambda Extensionsを利用することでNew Relicが用意したLambda Layerを追加するだけでコードの改変なしで利用可能となります!

Lambda Extensionsについては以下の記事、

Lambda Extentionsを使ってNew RelicのLambda Layerを追加する方法に関してはAWSのワークショップを参考にするといいと思います。

Lambda関数の監視を行う際に二つの方法として

  • Iacを使用して設定する方法
  • newrelic-lambda CLIのlayersコマンドを利用して設定する方法

があると説明しました。 コマンドを利用する際は

newrelic-lambda layers install --nr-account-id [New RelicのアカウントID] --function [関数名] --upgrade

を実行するだけで有効化することが出来ますが、関数ごとに設定してあげる必要があるため実用的ではありません。実際にはIaCを使ってまとめて有効化することが考えられます。

CloudFormation、SAMの場合は以下のテンプレートを参考に有効化してください。

AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: And example of a simple instrumented NodeJS Lambda

Resources:
NewRelicExample:
Type: AWS::Serverless::Function
Properties:
# In this example, we're using the SAM CLI to package and deploy our lambda. SAM will transform this value during the publish step.
CodeUri: newrelic-example-node/
# The handler for your function needs to be the one provided by the instrumentation layer, below.
Handler: newrelic-lambda-wrapper.handler
Runtime: nodejs12.x
Environment:
Variables:
# For the instrumentation handler to invoke your real handler, we need this value
NEW_RELIC_LAMBDA_HANDLER: app.lambdaHandler
# Distributed tracing needs your account ID, and your trusted account ID
NEW_RELIC_ACCOUNT_ID: YOUR_ACCOUNT_ID_HERE
# If your New Relic account has a parent account, this value should be that account ID. Otherwise, just
# your account id.
NEW_RELIC_TRUSTED_ACCOUNT_KEY: YOUR_PARENT_ACCOUNT_ID_HERE
Layers:
# This layer includes the New Relic Lambda Extension, a sidecar process that sends telemetry,
# as well as the New Relic Agent for Node.js, and a handler wrapper that makes integration easy.
- !Sub arn:${AWS::Partition}:lambda:${AWS::Region}:451483290750:layer:NewRelicNodeJS12X:34
Policies:
# This policy allows the lambda to know the value of the New Relic licence key. We need this so
# that we can send telemetry back to New Relic
- AWSSecretsManagerGetSecretValuePolicy:
SecretArn: !ImportValue NewRelicLicenseKeySecret-NewRelic-LicenseKeySecretARN

詳細に関しては公式リファレンスを参照ください。

まとめ

社内の先輩方に話を聞く限り、多くのケースにおいてマネジメントコンソールでの運用が多いと聞きました。 AWS側も〇〇Insight系のサービスも続々とリリースされており使いやすくなっていますが、痒いところに手が届かなかった経験がある方もいらっしゃるんじゃないでしょうか?

料金体系も変わったことで、今回のセッションで紹介したほとんどの機能を無料で体験することが出来ますので、趣味開発されている方などはぜひ一度触って見てください!