Redis 用 Amazon ElastiCache
Redis 用 ElastiCache ユーザーガイド (API バージョン 2015-02-02)

クラスターまたはレプリケーショングループへのアクセス

Amazon ElastiCache インスタンスは、Amazon EC2 インスタンス経由でアクセスするように設計されています。

ElastiCache インスタンスを Amazon Virtual Private Cloud (Amazon VPC) で起動する場合、ElastiCache インスタンスは同じ Amazon VPC にある Amazon EC2 インスタンスからアクセスできます。または、VPC ピア接続を使用すれば、異なる Amazon VPC にある Amazon EC2 から ElastiCache インスタンスにアクセスできます。

ElastiCache インスタンスを EC2 Classic で起動した場合、そのインスタンスに関連付けられた Amazon EC2 セキュリティグループに、キャッシュセキュリティグループへのアクセスを許可することで、EC2 インスタンスにクラスターへのアクセスを許可することができます。デフォルトでは、クラスターへのアクセスはそのクラスターを起動したアカウントに制限されています。

クラスターのプラットフォームの確認

先に進む前に、EC2-VPC と EC2-Classic のどちらでクラスターを起動したかを確認します。

詳細については、「Detecting Your Supported Platforms and Whether You Have a Default VPC」を参照してください。

ElastiCache コンソールを使用してクラスタープラットフォームを確認する

以下の手順では ElastiCache コンソールを使用して、EC2-VPC または EC2-Classic のどちらでクラスターを起動したかを確認します。

ElastiCache コンソールを使用してクラスタープラットフォームを確認するには

  1. AWS マネジメントコンソールにサインインし、ElastiCache コンソール(https://console.aws.amazon.com/elasticache/)を開きます。

  2. Redis エンジンを実行しているクラスターのリストを表示するには、左のナビゲーションペインで、[Redis] を選択します。

  3. クラスターのリストで、クラスター名の左にあるボックスを選択して、アクセスを承認するクラスターを展開します。

  4. [Subnet group:] (サブネットグループ:) を見つけます。

    • 図のように [Subnet group] (サブネットグループ) に名前が入力されている場合は、クラスターが EC2-VPC で起動されています。「EC2-VPC でクラスターを起動した場合」に進んでください。

    • [Subnet group] (サブネットグループ) 名ではなくダッシュ (-) が表示される場合は、クラスターが EC2-Classic で起動されています。「EC2-Classic でクラスターを起動した場合」に進んでください。

詳細については、「Detecting Your Supported Platforms and Whether You Have a Default VPC」を参照してください。

AWS CLI を使用してクラスタープラットフォームを確認する

以下の手順では AWS CLI を使用して、EC2-VPC または EC2-Classic のどちらでクラスターを起動したかを確認します。

AWS CLI を使用してクラスタープラットフォームを確認するには

  1. コマンドウィンドウを開きます。

  2. コマンドプロンプトで、次のコマンドを入力します。

    Linux, macOS, or Unix 用:

    aws elasticache describe-cache-clusters \ --show-cache-cluster-details \ --cache-cluster-id my-cluster

    Windows の場合:

    aws elasticache describe-cache-clusters ^ --show-cache-cluster-details ^ --cache-cluster-id my-cluster

    このコマンドの JSON 出力は次のようになります。スペースを節約するため、出力の一部は省略されています。

    { "CacheClusters": [ { "Engine": "redis", "AuthTokenEnabled": false, "CacheParameterGroup": { "CacheNodeIdsToReboot": [], "CacheParameterGroupName": "default.redis3.2", "ParameterApplyStatus": "in-sync" }, "CacheClusterId": "my-cluster-001", "CacheSecurityGroups": [], "NumCacheNodes": 1, "AtRestEncryptionEnabled": false, "CacheClusterCreateTime": "2018-01-16T20:09:34.449Z", "ReplicationGroupId": "my-cluster", "AutoMinorVersionUpgrade": true, "CacheClusterStatus": "available", "PreferredAvailabilityZone": "us-east-2a", "ClientDownloadLandingPage": "https://console.aws.amazon.com/elasticache/home#client-download:", "SecurityGroups": [ { "Status": "active", "SecurityGroupId": "sg-e8c03081" } ], "TransitEncryptionEnabled": false, "CacheSubnetGroupName": "default", "EngineVersion": "3.2.10", "PendingModifiedValues": {}, "PreferredMaintenanceWindow": "sat:05:30-sat:06:30", "CacheNodeType": "cache.t2.medium" } ] }

クラスターまたはレプリケーショングループへのアクセスの許可

EC2-VPC でクラスターを起動した場合

クラスターを Amazon Virtual Private Cloud (Amazon VPC) で起動した場合、同じ Amazon VPC で実行されている Amazon EC2 インスタンスからのみ ElastiCache クラスターに接続できます。この場合、クラスターに対するネットワーク進入を許可する必要があります。

Amazon VPC セキュリティグループからクラスターへのネットワーク進入を許可するには

  1. AWS マネジメントコンソールにサインインをしたあと、https://console.aws.amazon.com/ec2/ にある Amazon EC2 コンソールを開きます。

  2. ナビゲーションペインで、[Network & Security] の下にある [Security Groups] を選択します。

  3. セキュリティグループのリストから、Amazon VPC のセキュリティグループを選択します。ElastiCache 用のセキュリティグループを作成した場合を除き、このセキュリティグループは、default という名前になります。

  4. [Inbound] タブを選択し、次の操作を行います。

    1. [Edit] を選択します。

    2. [Add rule] を選択します。

    3. [Type] 列で [Custom TCP rule] を選択します。

    4. [Port range] ボックスに、クラスターノードのポート番号を入力します。この番号は、クラスターの起動時に指定した番号と同じ番号である必要があります。。​Redis のデフォルトポートは 6379 です

    5. [Source] ボックスで [Anywhere] を選択します。ポート範囲が 0.0.0.0/0 になるため、Amazon VPC 内で起動したすべての Amazon EC2 インスタンスを ElastiCache ノードに接続できます。

      重要

      ElastiCache クラスターを 0.0.0.0/0 (ステップ 4.e.) に設定した場合、パブリック IP アドレスが割り当てられず VPC 外からアクセスできないため、クラスターはインターネット接続できません。ただし、お客様のアカウントの他の Amazon EC2 インスタンスにデフォルトのセキュリティグループが適用され、そのインスタンスにパブリック IP アドレスが付与される場合があります。それがポート 6379 で実行された場合、意図しなくてもサービスが公開されることがあります。そのため、ElastiCache でのみ使用される VPC のセキュリティグループを作成されることをお勧めします。詳細については、「 カスタムセキュリティグループ」を参照してください。

    6. [Save] を選択します。

Amazon EC2 で Amazon VPC インスタンスを起動する場合、そのインスタンスは ElastiCache クラスターに接続できます。

EC2-Classic でクラスターを起動した場合

クラスターを EC2-Classic で起動した場合、Amazon EC2 インスタンスにクラスターへのアクセスを許可するには、そのインスタンスに関連付けられた Amazon EC2 セキュリティグループに、キャッシュセキュリティグループへのアクセスを許可する必要があります。

Amazon EC2 セキュリティグループにクラスターへのアクセスを許可するには

  1. AWS マネジメントコンソールにサインインし、ElastiCache コンソール(https://console.aws.amazon.com/elasticache/)を開きます。

  2. セキュリティグループのリストを表示するには、左のナビゲーションペインから [Security Groups] を選択します。

    重要

    [Security Groups] (セキュリティグループ) がナビゲーションペインにリストされていない場合は、クラスターが EC2-Classic ではなく EC2-VPC で起動されています。「EC2-VPC でクラスターを起動した場合」の指示に従ってください。

  3. [default] セキュリティグループの左側にあるチェックボックスをオンにします。

  4. 画面の下部のリストから、許可する EC2 セキュリティグループ名を選択します。

  5. アクセスを許可するには、[Add] を選択します。

    これで、セキュリティグループに関連付けられた Amazon EC2 インスタンスを、ElastiCache クラスターに接続できるようになりました。

セキュリティグループのアクセスを取り消すには、許可されたセキュリティグループのリストから該当のセキュリティグループを見つけて [Remove] を選択します。

ElastiCache セキュリティグループの詳細については、「セキュリティグループ: EC2-Classic」を参照してください。

AWS 外部からの ElastiCache リソースへのアクセス

Amazon ElastiCache は、クラウドベースのメモリ内のキー値ストアを提供する AWS サービスです。このサービスは、AWS 内からのみアクセスできるように設計されています。ElastiCache クラスターが VPC 内でホストされている場合は、ネットワークアドレス変換(NAT)インスタンスを使用して外部からアクセスできるようにできます。

要件

AWS 外部から ElastiCache リソースにアクセスするには、以下の要件を満たしている必要があります。

  • クラスターが VPC 内にあり、ネットワークアドレス変換(NAT)インスタンスを介してアクセスできる必要があります。これは必須の要件であり、例外はありません。

  • NAT インスタンスがクラスターと同じ VPC 内で起動されている必要があります。

  • NAT インスタンスがクラスターとは別のパブリックサブネットで起動されている必要があります。

  • Elastic IP (EIP) アドレスが NAT インスタンスに関連付けられている必要があります。NAT インスタンスのポートは、iptables のポート転送機能を使用して VPC 内のキャッシュノードポートに転送されます。

考慮事項

ElastiCache 外部から ElastiCache リソースにアクセスする際には、以下の点を考慮してください。

  • クライアントは EIP に接続し、NAT インスタンスのポートをキャッシュします。NAT インスタンスでポート転送すると、トラフィックは適切なキャッシュクラスターノードに転送されます。

  • クラスターノードが追加または交換されたら、この変更が反映されるように iptables ルールが更新される必要があります。

制約事項

このアプローチは、テストおよび開発の目的にしか使用できません。以下の制限があるため、本稼働で使用することは推奨されません。

  • NAT インスタンスは、クライアントと複数のクラスターの間のプロキシとして機能します。プロキシを追加すると、キャッシュクラスターのパフォーマンスに影響が及びます。この影響は、NAT インスタンスを介してアクセスするキャッシュクラスターの数に応じて増大します。

  • クライアントから NAT インスタンスへのトラフィックは暗号化されません。したがって、NAT インスタンスを介して機密データを送信することは回避してください。

  • NAT インスタンスは、別のインスタンスを維持するためのオーバーヘッドを増加させます。

  • NAT インスタンスは単一障害点として機能します。VPC で高可用性 NAT をセットアップする方法については、「Amazon VPC NAT インスタンスの高可用性: 例」を参照してください。

AWS 外部から ElastiCache リソースにアクセスする方法

次の手順は、NAT インスタンスを使用して ElastiCache リソースに接続する方法を示しています。

これらのステップは、以下を前提としています。

  • 以下を使って、Redis クラスターにアクセスします。

    • IP アドレス – 10.0.1.230

    • デフォルトの Redis ポート – 6379

    • セキュリティグループ – sg-bd56b7da

  • 信頼済みクライアントの IP アドレスが 198.51.100.27 である。

  • NAT インスタンスの Elastic IP アドレスが 203.0.113.73 である。

  • NAT インスタンスのセキュリティグループが sg-ce56b7a9 である。

NAT インスタンスを使用して ElastiCache リソースに接続するには

  1. キャッシュクラスターと同じ VPC 内のパブリックサブネット内に NAT インスタンスを作成します。

    デフォルトでは、VPC ウィザードが cache.m1.small ノードタイプを起動します。必要に応じてノードサイズを選択する必要があります。

    NAT インスタンスの作成については、『AWS VPC User Guide』の「NAT インスタンス」を参照してください。

  2. キャッシュクラスターと NAT インスタンスのセキュリティグループルールを作成します。

    NAT インスタンスのセキュリティグループには以下のルールが必要です。

    • 2 つのインバウンドルール

      • 信頼済みクライアントから、NAT インスタンスから転送された各キャッシュポート (6379 - 6381) への TCP 接続を許可するルール。

      • 信頼済みクライアントへの SSH アクセスを許可するルール。

      NAT インスタンスのセキュリティグループ - インバウンドルール

      タイプ プロトコル ポート範囲 送信元
      カスタム TCP ルール TCP 6379-6380 198.51.100.27/32
      SSH TCP 22 203.0.113.73/32
    • キャッシュポート(6379)への TCP 接続を許可するアウトバウンドルール。

      NAT インスタンスのセキュリティグループ - アウトバウンドルール

      タイプ プロトコル ポート範囲 送信元
      カスタム TCP ルール TCP 6379 sg-ce56b7a9 (NAT インスタンスの セキュリティ グループ)
    • NAT インスタンスからキャッシュポート(6379)への TCP 接続を許可するクラスターのセキュリティグループのインバウンドルール。

      クラスターインスタンスのセキュリティグループ - インバウンドルール

      タイプ プロトコル ポート範囲 送信元
      カスタム TCP ルール TCP 6379 sg-bd56b7da (クラスターのセキュリティグループ)  
  3. ルールを検証します。

    • 信頼済みクライアントが NAT インスタンスに SSH 接続できることを確認します。

    • 信頼済みクライアントが NAT インスタンスからクラスターに接続できることを確認します。

  4. NAT インスタンスに iptables ルールを追加します。

    NAT インスタンスからのキャッシュポートをクラスターノードに転送するには、iptables ルールをクラスターのノードごとに NAT テーブルに追加する必要があります。以下に例を示します。

    iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 6379 -j DNAT --to 10.0.1.230:6379

    ポート番号は、クラスターのノードごとに一意である必要があります。たとえば、ポート 11211 ~ 11213 を使用する 3 つのノードで構成される Redis クラスターを使用している場合、ルールは次のようになります。

    iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 6379 -j DNAT --to 10.0.1.230:6379 iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 6380 -j DNAT --to 10.0.1.231:6379 iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 6381 -j DNAT --to 10.0.1.232:6379
  5. 信頼済みクライアントがクラスターに接続できることを確認します。

    信頼済みクライアントは、NAT インスタンスに関連付けられている EIP と、適切なクラスターノードに対応するクラスターポートに接続できる必要があります。たとえば、PHP の接続文字列は次のようになります。

    redis->connect( '203.0.113.73', 6379 ); redis->connect( '203.0.113.73', 6380 ); redis->connect( '203.0.113.73', 6381 );

    telnet クライアントを使用して接続を検証することもできます。(例:

    telnet 203.0.113.73 6379 telnet 203.0.113.73 6380 telnet 203.0.113.73 6381
  6. iptables 設定を保存します。

    ルールをテストし、検証してから保存します。Red Hat ベースの Linux ディストリビューション (Amazon Linux など) を使用している場合は、次のコマンドを実行します。

    service iptables save

関連トピック

以下のトピックも役に立つ場合があります。