Redis インスタンスへの接続

このページでは、Compute Engine と Google Kubernetes Engine を使用して Redis インスタンスに接続する方法について説明します。また、Telnet を使用して基本的な Redis コマンドをテストする手順についても説明します。

Memorystore for Redis でサポートされる Google Cloud 環境の一覧については、サポートされる環境をご覧ください。Memorystore でサポートされる一部のサーバーレス環境には、Serverless VPC Access コネクタが必要です。詳細については、サーバーレス VPC アクセス コネクタの要件をご覧ください。

telnet を使用して Compute Engine VM から Redis インスタンスに接続する

Redis インスタンスには、その Redis インスタンスと同じプロジェクト、リージョン、ネットワーク内に配置されている任意の Compute Engine VM インスタンスから接続できます。

  1. Redis インスタンスと同じプロジェクト、リージョン、ネットワークに Compute Engine VM をまだ作成していない場合は、Linux VM の使用に関するクイックスタートの手順に沿って作成し接続します。

  2. apt-get を使用して telnet をインストールします。

    sudo apt-get install telnet
    
  3. ターミナルで次のように入力して、Redis インスタンスの IP アドレスに telnet で接続します。variables は、適切な値に置き換えてください。

    telnet instance-ip-address 6379
    

    コマンドが正常終了した場合は、次の結果が返されます。

    Trying instance-ip-address…
    Connected to instance-ip-address
    
  4. telnet セッションで、次のようにいくつかの Redis コマンドを入力します。

    次のように入力します:

    PING
    

    結果:

    PONG
    

    入力

    SET HELLO WORLD
    

    結果:

    +OK
    

    次のように入力します:

    GET HELLO
    

    結果:

    $5
    WORLD
    

redis-cli を使用して Compute Engine VM から Redis インスタンスに接続する

Redis インスタンスには、Redis インスタンスと同じプロジェクト、リージョン、ネットワーク内に配置されている任意の Compute Engine VM インスタンスから接続できます。

  1. Redis インスタンスと同じプロジェクト、リージョン、ネットワークに Compute Engine VM をまだ作成していない場合は、Linux VM の使用に関するクイックスタートの手順に沿って作成し接続します。

  2. Compute Engine SSH ターミナルから次のコマンドを実行して、redis-cli を Compute Engine VM にインストールします。

    sudo apt-get install redis-server
    
  3. Compute Engine ターミナルで、variables は適切な値に置き換えて、次のコマンドを実行します。

    redis-cli -h redis-instance-ip-address
    

    これで、redis-cli を使用して Redis インスタンスに接続されました。

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

AUTH を使用して Redis インスタンスに接続する

このセクションでは、AUTH 機能が有効になっている Redis インスタンスに接続する方法について説明します。

  1. Redis インスタンスと同じプロジェクト、リージョン、ネットワークに Compute Engine VM をまだ作成していない場合は、Linux VM の使用に関するクイックスタートの手順に沿って作成し接続します。

  2. Compute Engine SSH ターミナルから次のコマンドを実行して、redis-cli を Compute Engine VM にインストールします。

    sudo apt-get install redis-server
    
  3. インスタンスの AUTH 文字列を取得します。

  4. 次のコマンドを実行して redis-cli を使用し、認証を行いインスタンスに接続します。variables は適切な値に置き換えます。

    redis-cli -h instance-ip-address -a auth-string
    

    または

    redis-cli -h instance-ip-address
    AUTH auth-string
    
  5. Redis の SETGET のコマンドを実行して、インスタンスに対する認証済み接続が確立されたことを確認します。

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

stunnel と telnet を使用した Redis インスタンスへの安全な接続

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

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

  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 redis instances describe instance-id --region=region
      

      CA は、最大 3 つ存在する場合があります。

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

    4. 次のコマンドを実行して、stunnel の構成情報を格納する新しいファイルを作成します。

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

      次のテキストをファイルに貼り付けます。redis-instance-ip は Redis インスタンスの 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:6378
      connect=redis-instance-ip:6378
      
    5. 次のコマンドを実行して、Stunnel を再起動します。

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

    telnet localhost 6378
    
  5. Telnet セッションで、Redis インスタンスに ping を送信します。

    次のように入力します:

    PING
    

    結果:

    PONG
    

ポート転送によるローカルマシンからの接続

開発中は、ローカルマシンから Redis インスタンスに接続すると便利です。これを行うには、Redis インスタンスへのポート転送に使用する Compute Engine インスタンスを作成する必要があります。

  1. 次のコマンドを実行して Compute Engine インスタンスを作成します。

    gcloud compute instances create NAME --machine-type=f1-micro --zone=ZONE
    

    ここで

    • NAME は、Compute Engine VM に指定した名前です。
    • ZONE は、VM をプロビジョニングするゾーンであり、Redis インスタンスと同じリージョンにある必要があります。

    このコマンドでは、f1-micro マシンタイプを使用して、コスト効率の高い Compute Engine VM を作成します。必要に応じて、他のマシンタイプを選択することもできます。

  2. ローカルマシンで新しいターミナルを開きます。

  3. Compute Engine VM を介してトラフィックをポート転送するための SSH トンネルを作成するには、次のコマンドを実行します。

    gcloud compute ssh COMPUTE_VM_NAME --zone=ZONE -- -N -L 6379:REDIS_INSTANCE_IP_ADDRESS:6379
    

    ここで

    • COMPUTE_VM_NAME は、Compute Engine VM の名前です。
    • ZONE は、Compute Engine VM が配置されているのと同じゾーンです。
    • REDIS_INSTANCE_IP_ADDRESS は、Redis インスタンスの IP アドレスです。
  4. 接続をテストするには、新しいターミナル ウィンドウを開き、次のコマンドを実行します。

    redis-cli ping
    

    適切に機能していれば、次のような結果が返されます。

    PONG
    

    これで Redis インスタンスに接続されました。この開いている SSH トンネルを使用して Redis インスタンスにコマンドを送信できます。redis-cli をまだインストールしていない場合は、インストールして、このコマンドを実行します。

  5. ターミナル ウィンドウに SSH トンネル接続が表示され機能している限り、SSH トンネルは開いたままになります。

Google Kubernetes Engine クラスタから Redis インスタンスへの接続

Redis インスタンスには、そのインスタンスと同じリージョンに配置され、同じネットワークを使用する Google Kubernetes Engine クラスタから接続できます。

bash シェルを実行しているポッドから接続する

  1. Cloud Console の [GKE] ページに移動します。
    GKE
  2. 接続元とする GKE クラスタをクリックします。クラスタをまだ作成していない場合は、Redis インスタンスと同じゾーンおよびリージョンに IP エイリアスを有効にしてクラスタを作成します。IP エイリアスを有効にしてクラスタを作成する方法については、VPC ネイティブ クラスタの作成をご覧ください。
  3. クラスタ名の右側にある [接続] ボタンをクリックし、表示されるウィンドウで [Cloud Shell で実行] ボタンをクリックします。
  4. 次のコマンドを実行して、kubectl コマンドライン アクセスを構成します。
    gcloud container clusters get-credentials CLUSTER_NAME --zone=CLUSTER_ZONE --project=PROJECT_ID
    • CLUSTER_NAME はクラスタの名前です。
    • CLUSTER_ZONE は、クラスタが配置されているゾーンです。Redis インスタンスが配置されているゾーンでもある必要があります。
    • PROJECT_ID は、クラスタと Redis インスタンスが存在するプロジェクトです。
    kubeconfig generated for CLUSTER_NAME」という成功メッセージが表示されます。
  5. クラスタのバージョンが 1.8 以上かつ IP エイリアスが有効になっている場合は、この手順をスキップします。クラスタのバージョンが 1.7 以下の場合、またはバージョン 1.8 以上で IP エイリアスが有効になっていない場合は、次の回避策の手順を行ってからインスタンスに接続してください。 この設定を有効にしてクラスタを作成する方法など、IP エイリアスの詳細については、VPC ネイティブ クラスタの作成をご覧ください。
  6. 次のコマンドを使用して、bash シェルに接続します。
    kubectl run -i --tty busybox --image=busybox -- sh
  7. ホストアドレスとポート番号を使用して、Redis インスタンスに telnet で接続します。
    telnet HOST-IP PORT
  8. 基本的な Redis コマンドを入力して、接続を確認します。
    PING
    +PONG
  9. telnet 接続を閉じるには、Ctrl+C キー(Mac では Command+C キー)を押します。ポッド内で bash シェルを終了するには、「return」と入力します。操作が完了して Redis に接続する必要がなくなった場合は、/k8s-custom-iptables/ ディレクトリから次のコマンドを実行します。
    ./uninstall.sh

Google Kubernetes Engine ポッドから Redis インスタンスに接続する

事前に GKE クラスタを準備しておく必要があります。クラスタをまだ作成していない場合は、Redis インスタンスと同じゾーンおよびリージョンに IP エイリアスを有効にしてクラスタを作成します。IP エイリアスを有効にしてクラスタを作成する方法については、VPC ネイティブ クラスタの作成をご覧ください。

  1. コンソールの右上隅にある [Cloud Shell をアクティブにする] ボタン Cloud Shell をアクティブにする をクリックします。
  2. 次のコマンドを実行して、kubectl コマンドライン アクセスを構成します。
    gcloud container clusters get-credentials CLUSTER_NAME --zone CLUSTER_ZONE --project PROJECT_ID
    • CLUSTER_NAME はクラスタの名前です。
    • CLUSTER_ZONE は、クラスタが配置されているゾーンです。Redis インスタンスが配置されているゾーンでもある必要があります。
    • PROJECT_ID は、クラスタと Redis インスタンスが存在するプロジェクトです。
    kubeconfig generated for CLUSTER_NAME」という成功メッセージが表示されます。
  3. クラスタのバージョンが 1.8 以上かつ IP エイリアスが有効になっている場合は、この手順をスキップします。クラスタのバージョンが 1.7 以下の場合、またはバージョン 1.8 以上で IP エイリアスが有効になっていない場合は、次の回避策の手順を行ってからインスタンスに接続してください。 この設定を有効にしてクラスタを作成する方法など、IP エイリアスの詳細については、VPC ネイティブ クラスタの作成をご覧ください。
  4. 次のコマンドを使用して、redis-cli を実行する Redis ポッドを起動します。
    kubectl run -i --tty redisbox --image=gcr.io/google_containers/redis:v1 -- sh
  5. HOST-IP を Redis インスタンスのホスト IP アドレスに置き換えて、redis-cli コマンドを実行します。
    redis-cli -h HOST-IP info
  6. オプションで Redis ベンチマーク コマンドを実行します。ここでも HOST-IP の部分は、実際の Redis インスタンスのホスト IP アドレスに置き換えてください。
    redis-benchmark -c 100 -n 100000 -d 1024 -r 100000 -t PING,SET,GET,INCR,LPUSH,RPUSH,LPOP,RPOP,SADD,SPOP,MSET -h HOST-IP -q
  7. Redis ポッドを終了するには、「return」と入力します。操作が完了して Redis に接続する必要がなくなった場合は、/k8s-custom-iptables/ ディレクトリから次のコマンドを実行します。
    ./uninstall.sh

次のステップ

次の環境で動作するサンプル アプリケーションを使用して、Redis インスタンスに接続します。