Quantcast
Channel: プログラミング
Viewing all articles
Browse latest Browse all 8051

【Memorystore】カウントアップする ID を返す API 作成 - ものづくりのブログ

$
0
0

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

Viewing all articles
Browse latest Browse all 8051