スキップしてコンテンツを表示

ElastiCache Serverless for Valkey クラスターと ElastiCache Serverless for Redis OSS クラスターの接続問題をトラブルシューティングする方法を教えてください。

所要時間4分
0

Amazon ElastiCache Serverless for Redis OSS クラスターまたは Amazon ElastiCache Serverless for Valkey クラスターにアクセスしたいです。同じ Amazon Virtual Private Cloud (Amazon VPC) 内のリソースからクラスターにアクセスすると、接続の問題が発生します。

簡単な説明

ElastiCache Serverless は、書き込み操作にはポート 6379、読み取り操作にはポート 6380 というデュアルエンドポイントアーキテクチャを採用しています。これらのエンドポイントには、ElastiCache クラスターと同じ Amazon VPC 内にあるリソースからのみアクセスできます。

注: 詳細については、「Accessing an ElastiCache Cache when it and the Amazon Elastic Compute Cloud (Amazon EC2) Instance are in Different Amazon VPCs」(ElastiCache キャッシュと Amazon Elastic Compute Cloud (Amazon EC2) インスタンスが異なる Amazon VPC にある場合の ElastiCache キャッシュへのアクセス) を参照してください。

解決策

ElastiCache Serverless クラスターの接続問題をトラブルシューティングするには、次のタスクを実行します。

注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI のエラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。

クラスターのステータスを確認する

クラスターに接続する前に、クラスターのステータスをチェックして、クラスターが完全に機能していることを確認します。クラスターには次のステータスがあります。

  • [作成中] ステータスの場合、クラスターの作成が進行中です。
  • [変更中] ステータスの場合、現在設定の更新が行われています。
  • [使用可能] ステータスの場合、クラスターの構成が完了しています。

接続を試みる前に、クラスターが [使用可能] ステータスになるのを待ってください。[作成中] または [変更中] の状態のクラスターは接続を受け入れません。

クラスターのステータスを確認するには、ElastiCache コンソールを使用します。または、AWS CLI コマンド describe-serverless-caches を実行します。

aws elasticache describe-serverless-caches
--serverless-cache-name your-serverless-cache-name

注: your-serverless-cache-name をキャッシュの名前に置き換えてください。

セキュリティグループの設定を確認する

ポート 6379 (書き込みエンドポイント) とポート 6380 (読み取りエンドポイント) の両方でインバウンドアクセスを許可するように ElastiCache クラスターのセキュリティグループを設定します。両方のポートにアクセスできないと、Connection timed out エラーが発生する可能性があります。接続プロセスの開始時に、Redis クライアントは 6379 ポートと 6380 ポートの両方に接続しようとすることがあります。セキュリティグループがいずれかのポートへのアクセスをブロックすると、接続の確立に遅延が発生します。詳細については、「Troubleshooting high latency in ElastiCache Serverless」(ElastiCache Serverless における高レイテンシーのトラブルシューティング) を参照してください。

セキュリティグループの設定を確認して更新するには、次の手順を実行します。

  1. Amazon VPC コンソールを開きます。
  2. ナビゲーションペインで [セキュリティグループ] をクリックします。
  3. ElastiCache クラスターに関連付けられているセキュリティグループを選択します。
  4. [インバウンドルール] タブで、セキュリティグループの TCP ポート 6379 と 6380 からのインバウンドアクセスを許可していることを確認します。インバウンドアクセスを許可しない場合は、インバウンドルールを編集して両方のポートでネットワークアクセスを許可します。

クライアントとクラスター間のネットワーク接続をテストする

同じ VPC 内の Amazon EC2 インスタンスから telnet または nc コマンドを実行して、クライアントとクラスター間の接続をテストします。

telnet の例:

# Test connection to write endpoint (port 6379)
telnet write-endpoint 6379

# Test connection to read endpoint (port 6380)
telnet read-endpoint 6380

nc の例:

# Test connection to write endpoint (port 6379)
nc -zv write-endpoint 6379

# Test connection to read endpoint (port 6380)
nc -zv read-endpoint 6380

注: write-endpoint と read-endpoint を実際のキャッシュエンドポイントに置き換えてください。

EC2 インスタンスからの接続は成功するが、クライアントからは接続に失敗した場合、ネットワークには以下のいずれかの問題があります。

  • セキュリティグループのクライアントリソースの設定に誤りがある。クライアントリソースのセキュリティグループを更新して、ポート 6379 と 6380 の両方でクラスター IP へのアウトバウンド接続を許可します。
  • クライアントのサブネットで、ネットワークアクセスコントロールリスト (ネットワーク ACL) の設定に誤りがある。クライアントのサブネットでネットワーク ACL を更新して、ポート 6379 と 6380 でのアウトバウンド接続を許可します。
  • クライアントリソースのルーティングテーブルが正しく設定されていない。クライアントのサブネットのルーティングテーブルを更新して、ElastiCache クラスターへのルートが存在することを確認します。

詳細については、「Access patterns for accessing an ElastiCache cache in an Amazon VPC」(Amazon VPC の ElastiCache キャッシュにアクセスするためのアクセスパターン) を参照してください。

クラスター接続の送信中の暗号化を確認する

デフォルトでは、ElastiCache Serverless はすべてのクラスター接続に送信中の暗号化を必須として適用します。ElastiCache Serverless クラスターに接続するには、クライアントアプリケーションに TLS/SSL サポートを設定します。ElastiCache Serverless クラスター接続の TLS 暗号化を確認するには、OpenSSL の s_client コマンドを実行します。または、redis-cli コマンドを実行します。

OpenSSL の場合:

OpenSSL s_client ユーティリティは、TLS/SSL 接続をテストする診断ツールです。ElastiCache クラスターへの安全な接続を検証するには、クラスターから次のコマンドを実行します。

openssl s_client -connect your-cluster-endpoint:6379
openssl s_client -connect your-cluster-endpoint:6380

注: your-cluster-endpoint を実際のキャッシュエンドポイントに置き換えてください。

出力には、成功した TLS/SSL ハンドシェイク、適切な証明書チェーン、および有効なプロトコルバージョンが表示されます。

出力例:

# Verify TLS connection for write endpoint
openssl s_client -connect my-cluster-endpoint:6379
Example output:
CONNECTED(00000003)
depth=2 C = US, O = Amazon, CN = Amazon Root CA 1
verify return:1
depth=1 C = US, O = Amazon, CN = Amazon RSA 2048 M02
verify return:1
depth=0 CN = *.serverless.use1.cache.amazonaws.com
verify return:1
---
Certificate chain
.
.
---
SSL handshake has read 5566 bytes and written 414 bytes
Verification: OK
---
New, TLSv1.3, Cipher is TLS_AES_128_GCM_SHA256
.
---

# Verify TLS connection for read endpoint
 openssl s_client -connect my-cluster-endpoint:6380

または、

redis-cli の場合:

TLS をサポートしている redis-cli を使用してクラスターへの接続を確立するには、次のコマンドを実行します。

redis-cli -h your-cluster-endpoint --tls -c

注: your-cluster-endpoint を実際のキャッシュエンドポイントに置き換えてください。

接続に成功すると、出力は次の出力例のようになります。

your-cluster-endpoint:6379>

redis-cli が TLS をサポートしていない場合、次のエラーメッセージが表示されます。

Unrecognized option or bad number of args for: '--tls'

この問題を解決するには、TLS サポートを含む redis-cli バージョンをインストールします。詳細については、「Connecting to ElastiCache (Valkey) or Amazon ElastiCache for Redis OSS with in-transit encryption using valkey-cli」(valkey-cli による送信中の暗号化を使用して ElastiCache (Valkey) または Amazon ElastiCache for Redis OSS に接続する) を参照してください。

注: OpenSSL または redis-cli のテストが成功すると、ネットワークレベルで TLS がサポートされていることが確認されます。TLS を使用するように Redis クライアントを設定してください。

TLS 接続を確認したのに ElastiCache Serverless クラスターに接続できない場合は、アプリケーション設定に次のような潜在的な問題がないか確認してください。

  • ElastiCache Serverless では転送中の暗号化が適用されるため、ElastiCache Serverless に接続するには、アプリケーションが TLS/SSL をサポートしている必要があります。
  • TLS/SSL 設定が正しくない場合は、ElastiCache Serverless クラスターの設定フラグまたは信頼できる認証機関を設定します。
  • ElastiCache Serverless エンドポイントに接続するときに TLS/SSL 暗号化を使用するには、アプリケーションの Redis クライアントライブラリを設定していることを確認します。

クライアントがクラスター対応であることを確認する

クラスターモードが有効になっている ElastiCache Serveless for Redis OSS クラスターに接続すると、次のエラーメッセージが表示される場合があります。

MOVED <slot> <IP>:<port>

Redis はこれらのエラーメッセージを送信して、リシャーディングまたはフェイルオーバーイベント中に ElastiCache がハッシュスロットを別のノードに再配置したことを示します。最新の Redis クライアントのほとんどはクラスターに対応しており、内部スロットマッピングを自動的に更新し、適切なノードでリクエストを再試行してこれらのエラーを処理します。クラスターに対応していないクラスターの場合、これらのクライアントはエラーを処理できず、持続的な接続の問題が発生します。

これらのエラーを解決するには、クラスターモードをサポートし、クラスター対応の Redis クライアントライブラリまたはパッケージを使用してください。クラスター対応クライアントの例は次のとおりです。

  • Java Jedis
  • Python redis-py-cluster
  • Node.js ioredis (バージョン 4.0.0 以降)

DNS 設定を確認する

Name or service not known または NXDOMAIN エラーが表示される場合は、DNS 設定に問題がある可能性があります。これらの問題を解決するには、次の手順を実行します。

  • お使いの Redis クラスターを見つけて、クラスターの詳細を確認します。次に、ElastiCache コンソールでエンドポイントを更新し、[エンドポイント] の値がアプリケーションまたはクライアントコードで使用している値と同じであることを確認します。
    注: エンドポイントは次の例のようになります: [CLUSTER_NAME]-[CLUSTER_ID].serverless.[REGION].cache.amazonaws.com
  • Amazon VPC クライアントリソースの DNS 属性を更新します。

認証接続パラメータを確認する

認証が有効になっている ElastiCache クラスターに接続しようとすると、NOAUTH Authentication required または AUTH Failed というエラーメッセージが表示されることがあります。

valkey-cli を使用してクラスターに接続する場合、ElastiCache Serverless には --tls と --askpass (または -a) の両方のパラメータが必要です。これらのパラメータがないか、正しくない認証情報を使用すると、前述のエラーメッセージのいずれかが表示されます。

この問題を解決するには、クラスターに接続するときに正しいパラメータを指定してください。

例:

src/redis-cli -h your-cluster-endpoint --tls -c --user your-user -a your-password # Using redis-cli with direct password
src/redis-cli -h your-cluster-endpoint --tls -c --user your-user --askpass # Using redis-cli with password prompt (more secure)
src/redis-cli -h your-cluster-endpoint --tls -c > AUTH your-user your-password # If already connected without auth, use AUTH command

重要: セキュリティコンプライアンスのため、コマンドラインには認証情報を含めないでください。認証を管理するには、環境変数またはパスワードファイルを使用します。

読み取り操作と書き込み操作を分ける

ElastiCache Serverless の場合、1 リクエストあたりの引数の上限は 3,999 個です。この制限を超えると、Redis クライアントで Connection reset by peer エラーが表示されます。

この問題を解決するには、異なるポート間で読み取り操作と書き込み操作を分けます。読み取り操作にはポート 6380 を使用し、書き込み操作にはポート 6379 を使用するようにクライアントを設定します。

クラスターの状態を確認する

クラスターの状態を確認するには、以下のソースを確認してください。

関連情報

Accessing your ElastiCache cluster or replication group (ElastiCache クラスターまたはレプリケーショングループへのアクセス)

Redis クライアントの読み取りリクエストが、ElastiCache for Redis のレプリカノードではなくシャードのプライマリノードにリダイレクトされる問題を解決する方法を教えてください。

Authenticating with the Valkey and Redis OSS AUTH command (Valkey および Redis OSS AUTH コマンドによる認証)

Valkey and Redis OSS configuration and limits (Valkey および Redis OSS の設定と制限)

AWS公式更新しました 1年前
コメントはありません

関連するコンテンツ