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
内のフィールドReason
、Description
、およびTargetHealth
を調べて、プロキシが基になる DB インスタンスと通信できるかどうかを確認できます。
State
の値AVAILABLE
は、プロキシが DB インスタンスに接続できることを示します。
State
の値UNAVAILABLE
は、一時的または永続的な接続の問題を示します。この場合は、Reason
およびDescription
フィールドを調べます。例えば、Reason
の値がPENDING_PROXY_CAPACITY
の場合は、プロキシがスケーリングオペレーションを完了した後で、接続を再試行します。Reason
の値がUNREACHABLE
、CONNECTION_FAILED
、またはAUTH_FAILURE
の場合は、Description
フィールドの説明が問題の診断に役立ちます。
State
フィールドでは、REGISTERING
またはAVAILABLE
に変わるまでの短い間、値がUNAVAILABLE
になる場合があります。次の Netcat コマンド (
nc
) が成功した場合は、ログインしている EC2 インスタンスや他のシステムからプロキシエンドポイントにアクセスできます。このコマンドは、プロキシおよび関連付けられたデータベースと同じ VPC 内に存在していない場合、失敗を報告します。同じ VPC に存在していなくても、データベースに直接ログインできる場合があります。ただし、同じ VPC 内に存在していない限り、プロキシにはログインできません。nc -zx
MySQL_proxy_endpoint
3306 nc -zxPostgreSQL_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
"ARN": "
get-secret-value
によって表示されるSecretString
フィールドが JSON 文字列としてエンコードされ、username
フィールドとpassword
フィールドが含まれていることを確認します。次の例は、SecretString
フィールドの形式を示しています。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
です。これは、指定されたデータベース名がデータベースサーバーに存在しないことになります。または、データベース名として使用されているユーザー名 (データベース名が指定されていない場合) がサーバーに存在しないことになります。