MastraのsourcemapをSentryにアップロードする
はじめに
MastraサーバーでSentryを使ったエラー監視を導入したところ、sourcemapがないことでデバッグが困難でした。本記事では、MastraのsourcemapをSentryにアップロードする方法を解説します。
目次
Mastraでのsourcemap生成
以前はMastraにはmastra buildコマンドでsourcemapを出力するオプションがありませんでした。デバッグに苦労するというイシューが挙げられており(GitHub)、
その後、バージョン0.12.0でsourcemap生成機能がリリースされました:
設定方法
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
こんにちは、Sentry Japanです!
たまたまこの記事を見かけました。
ちょうど我々は日本語記事投稿キャンペーンを行っております。
タイミングよく参加条件をほぼ満たされているようでした。
ご興味があればご参加ください!