Redis Cloud と接続する¶
Redis Cloud は Redis 公式のクラウドサービス。クラウド上で Redis を使える(無料プランなら 30MB の RAM ストレージ)。
FastAPI Cloud のアプリからも使える。
FastAPI Cloud のダッシュボードには Neonと接続する と同じ統合機能も用意されてるけど、2026年7月時点ではエラーで接続できなかったので、このページでは接続情報を環境変数で渡す方法で。
Redis Cloud で無料データベースを作る¶
アカウントは https://cloud.redis.io/ から作る。メールアドレス+パスワードか、Google / GitHub のソーシャルログインが選べる。
GitHub ログインには公開メールが必要
Redis Cloud の GitHub ログインは、GitHub プロフィールの公開メールアドレスを読みに行く。メールを非公開(Keep my email addresses private)にしてると access_denied で失敗するので、非公開のままにしたいならメール登録か Google ログインを使う。
ログインするとプラン選択の画面になる。Essentials と Pro が大きく並んでるけど、その下の Not ready? Try 30 MB for free から無料プランを選ぶ。

設定するのは実質3か所。
Name… データベース名。ここではfastapicloud-cacheにした。Cloud vendor…Amazon Web Services・Google Cloud・Microsoft Azureの中から選ぶ。Region…US East (N. Virginia) us-east-1を選ぶのがいいと思う。FastAPI Cloud は現時点だと選択肢はなくて、us-east-1で動いてるので。レイテンシはアプリとの距離で決まるので、ここを合わせておくのがいいはず。
無料プランの内訳は 1 database・30MB RAM・30 connections・100 ops/sec。学習用途なら十分。Price $0/month になってるのを確認して Create database を押す。
作成できた。

接続情報を環境変数で渡す¶
データベース一覧の Connect ボタンで接続 URL を確認できる。
FastAPI Cloud のアプリから使う前に疎通確認しておくと安心。uv run --with redis なら、プロジェクトに依存を追加せずローカル環境で試せる。
export REDIS_URL='redis://default:<パスワード>@<ホスト>:<ポート>'
uv run --with redis python -c "
import os, redis
print(redis.from_url(os.environ['REDIS_URL']).ping())
"
True が返ってくれば Redis Cloud 側は OK。あとはこの URL を、FastAPI Cloud のアプリの Environment Variables に REDIS_URL として登録する。パスワードを含むので Secret をオンにする。

コードから使う¶
redis-py の asyncio クライアントで、環境変数 REDIS_URL から接続する。
動作確認とレイテンシ測定を兼ねて、まずは PING の往復時間を返すエンドポイントを作ってみる。
import os
import time
import redis.asyncio as redis
from fastapi import FastAPI
redis_client = redis.from_url(os.environ["REDIS_URL"], decode_responses=True)
app = FastAPI()
@app.get("/redis-ping")
async def redis_ping():
ok = await redis_client.ping()
t = time.perf_counter()
for _ in range(10):
await redis_client.ping()
avg_ms = (time.perf_counter() - t) / 10 * 1000
return {"ping": ok, "avg_rtt_ms": round(avg_ms, 2)}
計測ループの前に 1回 ping() してる(ok = await redis_client.ping())のは、TCP 接続の確立と認証をここで済ませておくため。redis-py のコネクションプールは最初のコマンドを打った瞬間に初めて接続を張るので、1発目はその分だけ値がぶれる。先に接続しておけば、後続の 10回は確立済みの接続を使い回した素の往復時間だけを測れる。
fastapi deploy でデプロイして、公開 URL の /redis-ping を開くと結果が JSON で返ってくる。
レイテンシを実測する¶
同じアプリをローカル環境と FastAPI Cloud の両方で動かして、/redis-ping の avg_rtt_ms(PING 10回の平均)を数回ずつ比べてみた。
| 実行場所 | avg RTT |
|---|---|
| ローカル環境 → Redis Cloud(us-east-1) | 182〜189 ms |
| FastAPI Cloud(us-east-1) → Redis Cloud(us-east-1) | 1.3〜1.7 ms |
- FastAPI Cloud からは 2 ms を切る。us-east-1 の Redis Cloud と同一リージョン相当の近さで、DB クエリより1桁速いので、キャッシュとして十分実用的なはず。
- 手元から直結すると約100倍遅い。Redis は 1回のリクエスト処理で小さいコマンドを何度も発行しがちなので、この差はそのまま体感速度に響く。
- なので開発中はローカルに立てた Redis を使って、本番だけ
REDIS_URLを Redis Cloud に向けるのが定石。環境変数で切り替える作りにしておけば、コードは共通のまま。
ダッシュボードからの統合(2026年7月時点はエラー)¶
本来は Neonと接続する と同じように、ダッシュボードから OAuth でつないで REDIS_URL を自動で注入してもらえるはず。
cf. Redis Cloud Integration - FastAPI Cloud
アプリ詳細の Integrations タブを開いて、Connect Integration を押す。

Add Integration のダイアログで Redis Cloud を選ぶ。

認証方法は Google か GitHub のソーシャルログインだけ。メール+パスワードで作った Redis Cloud アカウントのままでは、このフローには乗れない。

けれど、Google でログインしても Unable to load subscriptions from Redis Cloud. Please try again. になって、そこから先に進めなかった。

試したこと(いずれも効果なし):
- 連携の切断と再接続
- シークレットウィンドウでのやり直し
- Redis Cloud 側で REST API の有効化。
Team & APIのAPI KeysタブにEnable APIボタンがある(有効化は無料)。サブスクリプション一覧の取得は REST API 経由のはずなので試したけど、変わらず。

ブラウザの開発者ツールで見ると、api.fastapicloud.com のサブスクリプション取得エンドポイントが HTTP 500 を返してた。URL に入ってる ID は統合ごとに発行されるもので、接続をやり直すたびに変わる。
GET https://api.fastapicloud.com/api/v1/integrations/redis/12345678-abcd-abcd-abcd-123456789abc/subscriptions
HTTP/2 500
date: Tue, 14 Jul 2026 02:09:34 GMT
content-type: application/json
content-length: 77
access-control-allow-credentials: true
access-control-allow-origin: https://dashboard.fastapicloud.com
server: cloudflare
vary: Origin
x-envoy-upstream-service-time: 5102
cf-cache-status: DYNAMIC
cf-ray: a1acfc4a7ea2d3fa-KIX
X-Firefox-Spdy: h2
x-envoy-upstream-service-time: 5102、つまりバックエンドが 5 秒かかった末の失敗なので、FastAPI Cloud から Redis Cloud への呼び出しがタイムアウトかエラーになってそう。
一方、データベース自体はどこからでも正常につながるし、Redis Cloud の REST API を自分の API キー(Team & API の API Keys で発行するアカウントキーとユーザーキー)で直接叩いても、サブスクリプションは正常に返ってくる。
curl -s -H "x-api-key: <アカウントキー>" -H "x-api-secret-key: <ユーザーキー>" \
https://api.redislabs.com/v1/fixed/subscriptions
{
"accountId" : 1234567,
"subscriptions" : [ {
"id" : 7654321,
"name" : "fastapicloud-cache",
"status" : "active",
"planName" : "30MB",
"provider" : "AWS",
"region" : "us-east-1",
"price" : 0,
"maximumDatabases" : 1,
"databaseStatus" : "active"
} ]
}
Pro 用の GET /v1/subscriptions のほうは空リストが返る(エラーにはならない)。
つまり Redis Cloud の API はこのアカウントに対して完全に正常で、失敗してるのはベータ版の FastAPI Cloud 側っぽい。Pro と Essentials で一覧のエンドポイントが分かれてるから、統合が Pro 側しか見てない可能性もありそう。統合が直れば、環境変数の手動登録は統合の自動注入に置き換えられるはず。