Memorystore for Redis クラスタ インスタンスに接続する

このページでは、Memorystore for Redis Cluster インスタンスに接続する方法について説明します。

クライアントのサポート

Memorystore for Redis Cluster は独自のクライアント ライブラリを備えていませんが、Redis プロトコルをサポートする既存のサードパーティ クライアント ライブラリをサポートします。クライアントのリストの例は、Redis クライアント ページで確認できます。

Redis-py クライアントのベスト プラクティス

redis-py Python クライアントを使用して Memorystore for Redis クラスタ インスタンスに接続するには、Redis クラスタを宣言する際に skip_full_coverage_check=True を追加する必要があります。

from rediscluster import RedisCluster
endpoints = [{"host": "IPADDRESS", "port": "6379"}]

rdb = RedisCluster(
    startup_nodes=endpoints,
    skip_full_coverage_check=True, # Required for Memorystore
    decode_responses = True)

print(rdb.set('PYTHON', 'CLUSTER'))
print(rdb.get('PYTHON'))
print(rdb.unlink('PYTHON'))

リージョン間アクセス

Memorystore for Redis クラスタ インスタンスには、Memorystore インスタンスが配置されているのとは異なるリージョンにあるクライアントからアクセスできます。

クラスタの検出エンドポイントを表示する

Memorystore クラスタのディスカバリ エンドポイントを表示するには、次の手順を使用します。

コンソール

  1. Google Cloud コンソールで [Memorystore for Redis Cluster] ページに移動します。

    Memorystore for Redis Cluster

  2. クラスタ ID をクリックします。

  3. [このインスタンスに接続] セクションで、[内部 IP アドレス] と [接続ポート] の値をメモします。これら 2 つの値は、クラスタ ディスカバリ エンドポイントになります。

gcloud

クラスタの検出エンドポイントを表示するには、インスタンスの詳細を表示セクションの説明に従って describe gcloud CLI を実行します。

出力例を以下に示します。

createTime: '2023-05-30T19:47:37.850985390Z'
discoveryEndpoints:
- address: 10.142.0.10
  port: 6379
  pscConfig:
     network: projects/my-project-364018/global/networks/default
     projectId: my-project-364018
name: projects/my-project-364018/locations/us-east1/clusters/my-cluster-1
replicaCount: 0
shardCount: 3
sizeGb: 39
state: ACTIVE
transitEncryptionMode: TRANSIT_ENCRYPTION_MODE_DISABLED
uid: 87b47146-217d-472e-96e5-13962c0e8706

discovery_endpoints: セクションに表示されているエンドポイントのアドレスとポート番号をメモしておきます。これら 2 つの値は、クラスタの検出エンドポイントです。

redis-cli を使用して Compute Engine VM から接続する

Memorystore インスタンスの承認済みネットワークを使用する任意の Compute Engine VM から Memorystore for Redis Cluster インスタンスに接続できます。

インスタンスに接続するには:

  1. Memorystore for Redis Cluster インスタンスの承認済みネットワークを使用する Compute Engine VM がまだない場合は、Linux VM の作成に関するクイックスタートの手順に沿って作成し、接続します。

  2. Compute Engine VM に redis-cli をインストールします。Linux Debian ベースの VM を作成した場合は、Compute Engine SSH ターミナルから次のコマンドを実行できます。

    sudo apt-get update
    sudo apt-get install redis
    
  3. クラスタのディスカバリ エンドポイントを表示し、メモしておきます。

  4. Memorystore for Redis Cluster ターミナルで次のコマンドを実行します。変数は適切な値に置き換えます。

    redis-cli -h DISCOVERY_ENDPOINT_ADDRESS -p PORT_NUMBER -c
    

    ここで

    • DISCOVERY_ENDPOINT_ADDRESSPORT_NUMBER は、前のステップでメモした値です。
  5. 接続したら、次のようにいくつかの Redis コマンドを入力します。

    次のように入力します。

    PING
    

    結果:

    PONG
    

    入力

    SET HELLO WORLD
    

    結果:

    OK
    

    次のように入力します。

    GET HELLO
    

    結果:

    "WORLD"
    
  6. Redis インスタンスへの接続をテストしたら、Redis インスタンスへの接続に使用した Compute Engine VM を削除することを検討してください。そうすることで、Cloud 請求先アカウントへの課金を回避できます。

stunnel と telnet を使用した Memorystore クラスタへの安全な接続

このセクションでは、stunnel を使用して転送中の暗号化が有効になっている Memorystore for Redis Cluster インスタンスに接続する方法の一例を示します。

  1. 転送中の暗号化が有効になっている Memorystore クラスタがまだない場合は、転送中の暗号化を使用したインスタンスの作成に沿って作成します。

  2. 前のステップの Redis インスタンスと同じ承認済みネットワークを使用する Compute Engine VM がまだない場合は、これを作成してから、Linux VM を使用したクイックスタートに従って接続します。

    1. このガイドに必要なツールをインストールします。

      sudo apt-get install stunnel4
      
      sudo apt-get install telnet
      
  3. stunnel で使用する Compute Engine VM を構成します。

    1. 次のコマンドを実行して、認証局(CA)を格納する新しいファイルを作成します。

      sudo vim /tmp/server_ca.pem
      
    2. Compute Engine ターミナルではなく、Google Cloud リソースの管理に使用する標準ターミナルで次のコマンドを実行して、Redis インスタンスの認証局を表示します。

      gcloud alpha redis clusters get-cluster-certificate-authority  --cluster-id=CLUSTER_ID
      
    3. -----BEGIN CERTIFICATE----------END CERTIFICATE----- の行に表示されているすべての認証局をコピーして、前に作成した server_ca.pem ファイルに貼り付けて、保存します。

    4. stunnel の構成情報を格納する新しいファイルを作成します。

      sudo vim /etc/stunnel/redis-client.conf
      
    5. 次のテキストをファイルに貼り付けます。DISCOVERY_ENDPOINT_ADDRESS はクラスタの Private Service Connect エンドポイントの IP アドレスに置き換えられます。

      output=/tmp/stunnel.log
      CAfile=/tmp/server_ca.pem
      client=yes
      pid=/var/run/stunnel.pid
      verifyChain=yes
      sslVersion=TLSv1.2
      [redis]
      accept=127.0.0.1:6379
      connect=DISCOVERY_ENDPOINT_ADDRESS:PORT_NUMBER
      

      stunnel を起動します。

      sudo stunnel /etc/stunnel/redis-client.conf
      

      stunnel が実行中であることを確認します。

      ps aux | grep stunnel
      
    6. stunnel を再起動します。

      sudo systemctl restart stunnel4
      
  4. Redis-CLI を使用して Redis インスタンスに接続するには、次のコマンドを実行します。

    redis-cli -h DISCOVERY_ENDPOINT_ADDRESS -p PORT_NUMBER -c
    
  5. 接続したら、次のようにいくつかの Redis コマンドを入力します。

    次のように入力します。

    PING
    

    結果:

    PONG