3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

SAMで構築したLambdaのエラーをSentryに通知する

Last updated at Posted at 2022-03-05

概要

AWS SAM(AWS Serverless Application ModelにてStepFunctionsを利用したバッチを作成しています。
各Lambdaで発生した例外をSentryへ通知したかったため、調べてやってみました。

共通的にソースコードを変えずに設定する方法が見つからなかったので、
1つ1つのLambda handlerのソースを修正する方法になってしまいました。
※知っている方いたら教えてください。

設定方法

まずはSentryにてプロジェクトを作成しdsnを取得してください。

次に公式にも書いている通り@sentry/serverlessを追加します。
(Lambda Layerを使用することもできます。詳しくは後述)

yarn add @sentry/serverless

or

npm install --save @sentry/serverless

実際のソースコードへSentryへの通知設定を追記します。
設定をまとめたかったので以下のようなファイルを作成しました。

sentrySettings.ts
import * as Sentry from "@sentry/serverless";
Sentry.AWSLambda.init({
  dsn: process.env.SENTRY_DSN,
  environment: process.env.ENVIRONMENT,
  tracesSampleRate: 1.0,
});

export const SentrySettings = Sentry;

各Lambdaのhandlerでは上記をimportして使用します。

import { SentrySettings } from "../settings/sentrySettings";

export const handler = SentrySettings.AWSLambda.wrapHandler(
  async (event: any) => {

   処理

  }
);

template.ymlには環境変数を設定します。
全Lambdaに反映されるようにGlobalsへ記載しました。
※EnvはParametersで渡しています。

template.yml
Globals:
  Function:
    Environment:
      Variables:
        ENVIRONMENT: !Ref Env
        SENTRY_DSN: "Sentryで取得したdsn"

あとはデプロイするだけでエラーがSentryへ通知されるようになりました。

補足 Lambda Layerを使用する

公式ページには@sentry/serverlessを追加する代わりにLambda Layerを用いる方法も載っています。

その場合はGlobalsへLayersを追加します。

template.yml
Globals:
  Function:
    Environment:
      Variables:
        ENVIRONMENT: !Ref Env
        SENTRY_DSN: "Sentryで取得したdsn"
    Layers:
      - "上記公式ページから取得できるLambdaLayerのARN"
3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?