概要
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への通知設定を追記します。
設定をまとめたかったので以下のようなファイルを作成しました。
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で渡しています。
Globals:
Function:
Environment:
Variables:
ENVIRONMENT: !Ref Env
SENTRY_DSN: "Sentryで取得したdsn"
あとはデプロイするだけでエラーがSentryへ通知されるようになりました。
補足 Lambda Layerを使用する
公式ページには@sentry/serverlessを追加する代わりにLambda Layerを用いる方法も載っています。
その場合はGlobals
へLayersを追加します。
Globals:
Function:
Environment:
Variables:
ENVIRONMENT: !Ref Env
SENTRY_DSN: "Sentryで取得したdsn"
Layers:
- "上記公式ページから取得できるLambdaLayerのARN"