はじめに
Oracle Cloud Infrastructure(OCI)は、Free TierやPAYGでとにかくコスパの良いクラウドです。
Compute(Ampere A1など)やDatabase(MySQL HeatWaveなど)を無料で動かせるのは大きな魅力ですが、他クラウドには当たり前にあるマネージドRedisが存在しないという落とし穴があります。
実際、AWSならElastiCache、GCPならMemorystore、AzureならAzure Cache for Redisが用意されており、アプリ側からは簡単に利用できます。しかしOCIの場合、Redisを使いたいなら 自前でVMにインストールするか、外部サービスに頼るしかない のです。
今回は、その穴を埋める形で Upstash Redis (https://upstash.com/) を導入し、実運用してみました。この記事では、無料枠の仕様、PAYGの課金体系、リージョンの選び方、初期設定の簡単さ、そして「実際に使ってみたら月いくらになったか」というリアルなレビューをまとめます。
OCIにはマネージドRedisが無い
OCIはComputeやストレージは充実しているものの、インメモリキャッシュやKVS系のマネージドサービスが存在しません。
選択肢は大きく2つです。
- Computeに自前でRedisを入れる
apt install redis-server
で簡単に立てられる- ただし可用性確保、監視、バックアップ、バージョンアップなどを自分で管理する必要がある
- 外部のマネージドサービスを使う
- Redis Enterprise Cloud や Upstash が候補
- 運用は任せられるが、コストやレイテンシを考える必要がある
私は「低コストで楽したい」という理由から、Upstashを選びました。
Upstashとは?
Upstash は サーバーレスRedis を中心に、いくつかの開発者向けサービスを展開しているクラウドプラットフォームです。
共通する思想は「サーバーレス × 従量課金(PAYG)」。インフラの構築やスケール管理を気にせず、必要なときに必要な分だけ使えるのが特徴です。
提供サービス
- Redis
サーバーレスRedis。必要な分だけ課金で、REST APIにも対応。今回の記事の主役。 - Vector
ベクターデータベース。AI/検索用の埋め込みベクトルを保存・検索でき、RAG(Retrieval-Augmented Generation)のバックエンドとして使いやすい。 - QStash
サーバーレスメッセージキュー / タスク実行サービス。HTTP/REST APIで扱え、従来のKafkaやRabbitMQの軽量代替として使える。 - Workflow
ワークフロー実行基盤。複雑な処理フローをコードレスで定義・実行できる。 - Search
サーバーレス検索エンジン。アプリに検索機能を組み込みたいときに、Elasticsearchを自前で立てなくても済む。
Redisの無料枠(Free Tier)の内容
- Data Size: 256 MB
- Monthly Commands: 500K
- DB数: 1つまで
ちょっとした学習用アプリや検証環境なら十分ですが、本番運用や複数DB利用を考えるとすぐに足りなくなるため、現実的にはPAYGへの移行を視野に入れる必要があります。
初期設定はびっくりするほど簡単
Upstashを触って驚いたのは、初期設定の圧倒的な簡単さです。
- アカウントを作成
- 「Create Database」をクリックしてDBを作成
- リージョン(私は東京を選択)を指定
- ダッシュボードに接続情報(RedisのURLと認証トークン)が即時表示される
これで準備完了。
特筆すべきは、Upstash Redisは 暗号化通信限定 になっている点です。
接続方法は2種類あり、どちらもTLS/SSL必須です。
- Redisクライアントで利用する場合 →
rediss://
形式 - REST API経由で利用する場合 →
https://
形式
つまり「平文でつないでしまう事故」がそもそも起きず、デフォルトで安全に利用できるのがありがたいところです。
OCIやAWSで自前構築する場合に必要な「セキュリティグループの設定」「パスワード管理」「監視設定」なども不要で、「本当にこれだけでいいの?」と思うほど拍子抜けするくらいシンプルでした。
リージョン選択について
Upstashでは Primary Region(書き込み) と Read Regions(読み取り) を別々に選べます。
- Primary Region: 東京(ap-northeast-1)を選択可能
- Read Regions: 東京は選べず、他のリージョン(例:シンガポールなど)を設定する
私は Primary=東京、Read=シンガポール で運用中です。
完全に「東京オンリー」はできませんが、書き込みを東京に置けるだけでも国内利用では十分メリットがあります。
PAYG(Pay As You Go)の料金体系
無料枠を超えて本番で使う場合は、Pay As You Go(以下、PAYG) を選ぶことになります。
- コマンド数: $0.20 / 100K commands
- データサイズ: $0.25 / GB / 日(最大100GB)
- トラフィック量: 月200GBまで含まれる
- Max Cap(課金上限)を設定可能(例:$20など)
特に「Max Cap」は安心感があり、想定外にトラフィックが増えても課金が爆発することはありません。
実際に使ってみたレビュー
私は現在 DBを3つ稼働させています。
月あたりのコマンド数は 約300万。課金単価は $0.20 / 100K commands なので、計算すると:
- 300万コマンド ÷ 100K = 30単位
- 30 × $0.20 = $6程度(日本円で1,000円未満)
データ容量やトラフィックは少なく、200GB/月の無料範囲に収まっているため、課金対象はほぼコマンド数だけ。
結果として、月$6前後で安定運用できています。
コマンド数ベースの料金例
- 100万コマンド/月 → 約 $2
- 300万コマンド/月 → 約 $6(私の利用状況)
- 500万コマンド/月 → 約 $10
- 1,000万コマンド/月 → 約 $20
こうしてみると「中規模までは十分安価」「千万コマンド規模で$20程度」と非常にわかりやすい課金体系だと感じます。
良かった点
- 自前でRedisを立てなくてよい安心感
- OCI Free TierのComputeリソースを圧迫しない
- Max Capを設定できるため予算超過の心配がない
- コストがシンプルで、見積もりしやすい
- 初期設定が本当に数分で終わる
気になった点
- PrimaryとReadを同じリージョンにできない(完全東京完結は不可)
- 超大規模アクセスではコマンド課金が膨らむ
- ベンダーロックインは避けられない
おまけ:Rails / Laravel からの接続例
Upstashで発行された接続URLとトークンを .env
に設定するだけでOKです。
Rails (config/redis.yml
)
production:
url: <%= ENV["REDIS_URL"] %>
password: <%= ENV["REDIS_PASSWORD"] %>
Laravel (config/database.php
)
'redis' => [
'client' => 'predis',
'default' => [
'url' => env('REDIS_URL'),
'password' => env('REDIS_PASSWORD'),
],
],
OCI側の特別な設定は不要で、Upstashの接続情報をそのまま使えます。
まとめ
- OCIにはマネージドRedisが無い → 外部サービス必須
- Upstashの無料枠(256MB / 500K commands / DB1つ)は検証用に最適
- PAYGなら数百万コマンド規模でも月$6前後で運用可能
- 「Max Cap」を設定すれば課金上限も安心
- 東京リージョンをPrimaryにできるので国内利用も実用的
- 初期設定は数分で終わり、接続設定もシンプル
結果として、私のケース(DB3つ / 月300万コマンド程度)では 月$6程度で安定運用できています。
「OCIでRedisが欲しいけどどうすればいい?」と悩んでいる人には、Upstashはコストと手軽さのバランスが取れた現実的な選択肢になると思います。
コメント