2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【エラー対応】QStash「not found in this region (eu-central-1)」の原因と解決方法

2
Last updated at Posted at 2026-09-26

はじめに

Upstash QStashで予約を登録しようとしたところ、次のエラーが出ました。

Error [QstashError]: {"error":"user (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx) not found in this region (eu-central-1). Check that you are using the correct endpoint. Learn more: https://upstash.com/docs/qstash/howto/multi-region"}

トークンは正しくコピーしたはずなのに、「ユーザーが見つからない」と言われてしまいます。
この記事では、エラーの原因と解決方法をまとめます。

問題

Vercel Cronが毎日決まった時刻に呼び出すAPIの中で、QStashに通知の予約を登録していました。

src/app/api/cron/schedule/route.ts(修正前)
import { Client } from "@upstash/qstash";
// QStashのクライアントを作る(トークンだけを渡している)
const qstash = new Client({ token: process.env.QSTASH_TOKEN! });
// 指定した時刻にAPIを呼ぶ予約を登録する
await qstash.publishJSON({
  url: notificationUrl,
  body: {},
  notBefore,
});

このAPIを呼ぶと、publishJSON のところで冒頭のエラーが出て、予約を登録できませんでした。

最初に試したこと

エラーに「user not found」と書かれていたので、トークンが間違っていると考えました。Upstash Consoleからトークンをコピーし直し、Vercelの環境変数を貼り直して再デプロイしましたが、同じエラーのままでした。

エラーの意味

エラーメッセージを落ち着いて読むと、次のように書かれています。

user not found in this region (eu-central-1) (このリージョン(eu-central-1)にはユーザーがいません)

トークンが間違っているのではなく、接続先のリージョンにアカウントが存在しないという意味でした。

解決方法

原因:接続先のリージョンが違っていた

QStashは、ヨーロッパやアメリカなど、複数のリージョン(サーバーが置かれている地域)で動いています。アカウントのQStashがどのリージョンにあるかによって、接続するURL(エンドポイント)が変わります。

筆者の環境では、Client に接続先のURLを指定していなかったため、eu-central-1(ヨーロッパ)のエンドポイントに接続していました。しかし、筆者のQStashは別のリージョンにあったため、「このリージョンにはユーザーがいない」と言われていました。

対応:QSTASH_URL で接続先を指定する

Upstash ConsoleのQStashの画面には、QSTASH_TOKEN と一緒に QSTASH_URL も表示されています。これが、自分のアカウントに合った接続先のURLです。

1. 環境変数を追加する

QSTASH_URL をコピーして、.env.local とVercelの環境変数に追加します。

.env.local
# Upstash QStash(Upstash ConsoleのQStashの画面からコピー)
QSTASH_URL=
QSTASH_TOKEN=

2. Client に baseUrl を渡す

Client を作るときに、baseUrl として QSTASH_URL を渡します。

src/app/api/cron/schedule/route.ts(修正後)
import { Client } from "@upstash/qstash";
const qstash = new Client({
  token: process.env.QSTASH_TOKEN!,
  // 自分のアカウントのリージョンに合った接続先を指定する
  baseUrl: process.env.QSTASH_URL,
});

これで予約を登録できるようになりました。

Vercelの環境変数を追加・変更したあとは、再デプロイしないと反映されません。 環境変数を直したのにエラーが変わらないときは、再デプロイしたかを確認してください。

まとめ

  • QStashを使うときは、QSTASH_TOKEN と QSTASH_URL の両方を設定する
  • エラーメッセージの not found in this region は、トークンの間違いではなく接続先のリージョンの違いを表している

おわりに

「user not found」という言葉だけを見て、トークンの間違いだと思い込んでいました。エラーメッセージを最後まで読めば、リージョンの問題だと書いてあったので、メッセージを読むことの大切さを改めて感じました。

参考

2
0
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
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?