添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
RDS Proxy のトラブルシューティング - Amazon Relational Database Service

RDS Proxy のトラブルシューティング

以下に、いくつかの一般的な RDS Proxy 問題のトラブルシューティングのヒントと、RDS Proxy の CloudWatch ログに関する情報を示します。

RDS Proxy ログでは、各エントリの前に、関連付けられたプロキシエンドポイントの名前が付けられます。この名前には、ユーザー定義のエンドポイントに指定した名前を使えます。または、読み取り/書き込みリクエストを実行するプロキシのデフォルトエンドポイントの特別な名前 default にすることができます。プロキシエンドポイントの詳細については、「 Amazon RDS Proxy エンドポイントの操作 」を参照してください。

プロキシでの接続の検証

以下のコマンドを使用して、接続内のプロキシ、データベース、コンピューティングインスタンスなどのすべてのコンポーネントが相互に通信できることを確認できます。

describe-db-proxies コマンドを使用して、プロキシ自体を調べます。また、 describe-db-proxy-target-groups コマンドを使用して、関連するターゲットグループを確認します。ターゲットの詳細が、プロキシに関連付ける RDS DB インスタンス と一致していることを確認します。以下のようなコマンドを使用します。

aws rds describe-db-proxies --db-proxy-name $DB_PROXY_NAME aws rds describe-db-proxy-target-groups --db-proxy-name $DB_PROXY_NAME

プロキシが基になるデータベースに接続できることを確認するには、describe-db-proxy-targets コマンドを使用して、ターゲットグループで指定されたターゲットを調べます。以下のようなコマンドを使用します。

aws rds describe-db-proxy-targets --db-proxy-name $DB_PROXY_NAME

describe-db-proxy-targets コマンドの出力には、TargetHealth フィールドが含まれます。State 内のフィールド ReasonDescription、および TargetHealth を調べて、プロキシが基になる DB インスタンスと通信できるかどうかを確認できます。

State の値 AVAILABLE は、プロキシが DB インスタンスに接続できることを示します。

State の値 UNAVAILABLE は、一時的または永続的な接続の問題を示します。この場合は、Reason および Description フィールドを調べます。例えば、Reason の値が PENDING_PROXY_CAPACITY の場合は、プロキシがスケーリングオペレーションを完了した後で、接続を再試行します。Reason の値が UNREACHABLECONNECTION_FAILED、または AUTH_FAILURE の場合は、Description フィールドの説明が問題の診断に役立ちます。

State フィールドでは、REGISTERING または AVAILABLE に変わるまでの短い間、値が UNAVAILABLE になる場合があります。

次の Netcat コマンド (nc) が成功した場合は、ログインしている EC2 インスタンスや他のシステムからプロキシエンドポイントにアクセスできます。このコマンドは、プロキシおよび関連付けられたデータベースと同じ VPC 内に存在していない場合、失敗を報告します。同じ VPC に存在していなくても、データベースに直接ログインできる場合があります。ただし、同じ VPC 内に存在していない限り、プロキシにはログインできません。

nc -zx MySQL_proxy_endpoint 3306 nc -zx PostgreSQL_proxy_endpoint 5432

次のコマンドを使用して、EC2 インスタンスに必要なプロパティがあることを確認できます。特に、EC2 インスタンスの VPC は、プロキシが接続する先の の VPC と同じである必要があります。

aws ec2 describe-instances --instance-ids your_ec2_instance_id
aws secretsmanager list-secrets aws secretsmanager get-secret-value --secret-id your_secret_id

get-secret-value によって表示される SecretString フィールドが JSON 文字列としてエンコードされ、username フィールドと password フィールドが含まれていることを確認します。次の例は、SecretString フィールドの形式を示しています。

"ARN": "some_arn", "Name": "some_name", "VersionId": "some_version_id", "SecretString": '{"username":"some_username","password":"some_password"}', "VersionStages": [ "some_stage" ], "CreatedDate": some_timestamp

このセクションでは、RDS Proxy を使用する際の一般的な問題と考えられる解決策について説明します。

aws rds describe-db-proxy-targets CLI コマンドの実行後、TargetHealth の説明に Proxy does not have any registered credentials と記載されている場合は、以下を確認してください。

ユーザーがプロキシにアクセスするための認証情報が登録されています。

プロキシが使用する Secrets Manager シークレットにアクセスする IAM ロールが有効であること。

DB プロキシの作成時や接続時に、次の RDS イベントが発生することがあります。

RDS イベント ID

ユーザーは [Transport Layer Security が必要] オプションを有効にしましたが、PostgreSQL クライアントで sslmode=disable を使用して接続しようとしました。

このエラーを修正するには、以下のいずれかを行います。

プロキシへの接続に使用されている PostgreSQL クライアントが、ストリーミングレプリケーションモードを使用しようとしています。このモードは、現在 RDS Proxy でサポートされていません。

接続に使用されている PostgreSQL クライアントでストリーミングレプリケーションモードをオフにします。

解決策は、具体的なデータベースエラーによって異なります。1 つの例は、Request returned an error: database "your-database-name" does not exist です。これは、指定されたデータベース名がデータベースサーバーに存在しないことになります。または、データベース名として使用されているユーザー名 (データベース名が指定されていない場合) がサーバーに存在しないことになります。