Cloud Run で Memorystore(Redis)を利用してカウントアップする ID を返す API を構築する方法について、手順を簡単にまとめてみました。
Memorystore(Redis)のインスタンスの作成方法
手順
インスタンス画面の行き方
- 「Google Cloud Console」にアクセス
- 「Memorystore」 >「Memorystore for Redis」 に移動
- 「インスタンスを作成」
インスタンスの設定入力
- 名前: インスタンスの名前を入力
- リージョン: Cloud Runのリージョンと一致させます
- ゾーン: 任意のゾーンを指定(「任意のゾーンを使用」でも構いません)
- ネットワーク: VPCネットワーク(後述するCloud Runの設定で使用します)
必要情報を入力後に「作成」ボタンをクリックし、インスタンスの作成を完了します。
Cloud Run と Memorystore の通信設定(ネットワーク設定)
Cloud Run から Memorystore にアクセスするには、同じ VPC ネットワーク内に接続する必要があります。以下がその設定方法です。
手順
VPC ネットワークの設定
Memorystore インスタンスで使用する VPC ネットワークが作成されていることを確認します。
「VPCネットワーク」 >「VPCネットワークのピアリング」から必要な設定を行います。
サーバーレス VPC アクセスの設定
Cloud RunからMemorystoreのあるVPCネットワークにアクセスするために、サーバーレス VPC アクセスのコネクタを作成します。
「VPCネットワーク」 >「サーバーレス VPCアクセス」に移動し、「コネクタを作成」をクリックします。
名前、リージョン(Memorystoreと同じリージョン)、サブネット(CIDRブロック)を設定します。
作成したVPCアクセスコネクタの名前をメモしておきます(Cloud Runで使用します)。
Cloud Run の VPC コネクタ設定
Cloud Run サービスの作成または設定変更画面で、「VPCコネクタ」に先ほど作成した VPC アクセスコネクタを選択します。
トラフィックのルートを「すべてのトラフィック」に設定すると、Cloud Run から VPC ネットワーク経由で Memorystore にアクセスできるようになります。
Cloud Run(Python)
Flask と Redis クライアントを使用して Cloud Run から Memorystore の Redis インスタンスにアクセスし、カウントアップする ID を返すコードを作成します。
パッケージ
Flask と redis のパッケージをインストールします。
$ pip install Flask redis gunicorn
python code
Flask で Redis に接続し、カウントをインクリメントする API を構築します。
from flask import Flask, jsonify import redis import os app = Flask(__name__) # Redis接続設定 REDIS_HOST = os.getenv("REDIS_HOST", "10.25.114.179") # MemoryStoreのIPアドレスを環境変数で設定 REDIS_PORT = int(os.getenv("REDIS_PORT", 6379)) REDIS_COUNTER_KEY = "counter-test"# Redisクライアントの初期化 redis_client = redis.StrictRedis(host=REDIS_HOST, port=REDIS_PORT, decode_responses=True) @app.route('/get_next_id', methods=['GET']) defget_next_id(): try: # Redisのインクリメント機能でカウンターを増加 next_id = redis_client.incr(REDIS_COUNTER_KEY) return jsonify({"next_id": next_id}), 200except redis.RedisError as e: return jsonify({"error": str(e)}), 500if __name__ == '__main__': app.run(host='0.0.0.0', port=8080)
Dockerfile
# Pythonのイメージを使用FROM python:3.12.2 # 作業ディレクトリの設定WORKDIR /app # 依存関係のインストールCOPY requirements.txt . RUN pip install -r requirements.txt # アプリケーションファイルをコピーCOPY . . # 起動コマンドCMD["gunicorn", "-b", "0.0.0.0:8080", "main:app"]
requirements.txt
Flask redis gunicorn