Pathee engineering blog

世界をしなやかに変えるエンジニアたちのブログ

Serverlessで管理しているAWS LambdaにSentryを導入してエラーを検知する

エンジニアのkeisei1092です。

Serverlessで管理しているAWS LambdaにSentryを導入して、エラーを検知したいと思いましたが、日本語の記事があまりなかったので残しておきたいと思います。

この記事では、 Netflix-Skunkworks / raven-python-lambda を使っていきたいと思います。Sentry公式では sentry_sdk がインストールできますが、以下の理由で前者を選択しました。

  • エラーのスタックトレースを出力してくれるため
  • メモリに関する警告を出力してくれるため
  • タイムアウトに関する警告を出力してくれるため
  • catchされなかった例外を出力してくれるため

(これらは sentry-sdk でも可能ですが、設定が必要です)

導入

raven-python-lambda をインストール

プロジェクトの Pipfile に以下のように追記します。

raven-python-lambda = "*"

pipenvを更新します。

pipenv install

serverless.yml環境変数を指定していきます。

provider:
  environment:
    SENTRY_ENVIRONMENT: ${opt:stage, self:provider.stage}
    SENTRY_DSN: <あなたのSentryプロジェクトのSENTRY_DSN>

各lambdaの run 関数を、 @RavenLambdaWrapper() でくくります。

from raven import Client
from raven_python_lambda import RavenLambdaWrapper

@RavenLambdaWrapper()
def run(event, context):
  # 試しにエラーなどを出力してみる
    logging.debug('DEBUG レベルのログ')
    logging.info('INFO レベルのログ')
    logging.warning('WARN レベルのログ')
    logging.error('ERROR レベルのログ')
    raise Exception('this is exception.')

(SentryからSlackの通知は、別の記事をご参考ください)

f:id:pathee:20200308101755p:plain

これで、エラーが通知されました。

お手軽にエラー監視環境が作成できるので、皆さんもぜひ試してみてください。