🛠️
Severless Frameworkで構築するLambda関数にエラー監視ツールSentryを導入する
Severless Frameworkで構築するLambda関数にSentryを導入する方法について記載します。
Lambda関数はPythonを使用しています。
導入したソースコードはgithubに載せています。
Sentryとは
Sentryとは、フロントからバックエンドまで、アプリケーションで発生したエラーを監視できるツールです。
事前準備
- Sentryアカウントを作成します
- プロジェクトを作成します
サインアップしてログインすると、初めにこのような画面が表示されました。
- 今回はServerlessのLambda(Python)を選択し、Create Projectを行います
- manual setupを選択すると、セットアップ用のコードが表示されます。
- DSNが記載されていますので、控えます
Sentryでは、アプリケーションからSentryサーバーにエラーや例外を送信するために、DSN (Data Source Name) と呼ばれる識別子を使用します。
この画面以外では作成されたProjectの設定画面から[Client Keys]タブを表示することで、dsnを確認することができます。
プロジェクト配下の.envファイルにSENTRY_DSNとして記載し、保存します。
Lambda関数に仕込みます
以下のコマンドでsentry-sdkをインストールすることができます。
pip install --upgrade sentry-sdk
Lambda関数のコードに以下を追記します。
import sentry_sdk
from sentry_sdk import set_user
from sentry_sdk.integrations.aws_lambda import AwsLambdaIntegration
SENTRY_DSN = os.getenv("SENTRY_DSN")
sentry_sdk.init(
dsn=SENTRY_DSN,
integrations=[AwsLambdaIntegration(timeout_warning=True)],
traces_sample_rate=1.0,
)
-
from sentry_sdk import set_user
はリクエストしたUserをフィルタするための値をセットできます
sentry_sdk.init()
は、Sentry のクライアントライブラリの初期化を行うメソッドです。
これにより、アプリケーションから Sentry サーバーにエラーや例外を送信するための準備が整います。
このメソッドにはほかにもrelease
やenvironment
などの値を設定することで、環境やリリースによってエラーをわけてトラッキングすることができます。 - SENTRY_DSNを環境変数から取得する形としています。
-
integrations=[AwsLambdaIntegration(timeout_warning=True)]
はLambda関数のタイムアウトが発生した際に、Sentryに警告イベントを送信する指定です。 - DockerでLambda関数を動かすため、pipでインストールが必要なパッケージrequirements.txtにまとめている場合に、
sentry-sdk
を追記します。
set_userは以下のように使用することができます。
def coffee_note_handler(event, context):
# TODO implement
try:
print(event)
user_id = event["requestContext"]["authorizer"]["principalId"]
set_user({"id": user_id})
これにより、トラッキングしたデータにuser_idの値を持たせることができ、エラーが起こった際にどのユーザーによるリクエストで起こったのか等フィルターすることができます。
emailなど、任意の値を辞書型で記述することで設定することができます。
serverless.yamlの編集
環境変数を使用する場合、以下を追記します。
useDotenv: true
provider:
environment:
SENTRY_DSN: ${env:SENTRY_DSN}
デプロイし、導入は完了となります。
Discussion