🦔

MastraのsourcemapをSentryにアップロードする

に公開1

はじめに

MastraサーバーでSentryを使ったエラー監視を導入したところ、sourcemapがないことでデバッグが困難でした。本記事では、MastraのsourcemapをSentryにアップロードする方法を解説します。

目次

  1. Mastraでのsourcemap生成
  2. Sentryへのアップロード
  3. CI/CDへの組み込み

Mastraでのsourcemap生成

以前はMastraにはmastra buildコマンドでsourcemapを出力するオプションがありませんでした。デバッグに苦労するというイシューが挙げられており(GitHub)、

その後、バージョン0.12.0でsourcemap生成機能がリリースされました:
https://github.com/mastra-ai/mastra/releases/tag/%40mastra%2Fcore%400.12.0

設定方法

Mastraインスタンスのconfigurationに以下の設定を追加するだけでsourcemapが生成されるようになります:

// mastra/index.ts

export const mastra = new Mastra({
	// ... 他の設定
  bundler: {
    sourcemap: true,
  },
})

この設定により、mastra build実行時に.mastra/outputディレクトリにsourcemapファイルが生成されます。

Sentryへのsourcemapアップロード設定

初期設定

SentryでのSourcemapアップロード方法についてのドキュメントによると、CLIを通してレポジトリでの設定が簡単に行えるとのこと

まず、Sentry CLIの設定を行います:

# ローカルで以下コマンドを実行し、指示に従います
npx @sentry/wizard@latest -i sourcemaps

# アウトプットディレクトリは ./.mastra/output を指定

認証トークンの設定

設定途中で認証APIキーが発行されますが、既に持っている場合はSentryダッシュボードの Settings > Organization Tokens を開いて既存のキーを利用できます。

package.jsonの設定

先ほどのコマンドに従っていた結果,最終的に以下のようにbuildコマンドが修正されました:

{
  "scripts": {
    "build": "mastra build && npm run sentry:sourcemaps",
    "sentry:sourcemaps": "sentry-cli sourcemaps inject --org handson-ai --project ho-agent ./.mastra/output && sentry-cli sourcemaps upload --org handson-ai --project ho-agent ./.mastra/output"
  }
}

CI/CDへの組み込み

現在の環境はGCPクラウドで、CIのビルドワークフローはGCP CloudBuildを使用しているため、以下のような変更を加えます。

Secret Managerにトークンを登録

まず、Sentryの認証トークンをGCP Secret Managerに保存します:

  • Secret名: SENTRY_AUTH_TOKEN
  • : 先ほど発行した,あるいはSentryダッシュボードで取得したOrganization Token

CloudBuildでの設定

cloudbuild.yamlの修正

パイプラインでシークレットを取得し、Dockerコマンドに渡すように設定します:

availableSecrets:
    secretManager:
        - versionName: projects/$PROJECT_ID/secrets/SENTRY_AUTH_TOKEN/versions/latest
          env: 'SENTRY_AUTH_TOKEN'

steps:
    # ... 他のステップ
    
    - name: 'gcr.io/cloud-builders/docker'
      entrypoint: 'bash'
      secretEnv: ['SENTRY_AUTH_TOKEN']
      args:
          - '-c'
          - |
              docker build \
                # ... 他のビルド引数
                --build-arg SENTRY_AUTH_TOKEN="$$SENTRY_AUTH_TOKEN" \
                .

Dockerfileでの環境変数設定

Dockerfile中で環境変数としてセットし、ビルド時にsourcemapアップロードを実行します:

# ... 他の設定

# Sentry認証トークンをビルド引数として受け取る
ARG SENTRY_AUTH_TOKEN

# ... 他のRUNコマンド

# ビルド実行(sourcemap生成とSentryアップロードを含む)
RUN npm run build

以上でSentryのIssue Reportに元ファイルの該当箇所がわかるようになりました!

Happy Coding! 🎉

Discussion