Amazon RDS DB インスタンスに接続する際の問題を解決するにはどうすればよいですか?

最終更新日: 2022 年 6 月 20 日

Amazon Relational Database Service (Amazon RDS) DB インスタンスに接続できません。

簡単な説明

Amazon RDS DB インスタンスに接続できない場合、多くの根本原因が考えられます。最も一般的な理由のいくつかを次に示します。

  • RDS DB インスタンスが利用可能な状態でないため、接続を受け付けない。
  • DB インスタンスへの接続に使用するソースが、セキュリティグループ、ネットワークアクセスコントロールリスト (ACL)、またはローカルファイアウォールの DB インスタンスへのアクセスが許可されているソースにない。
  • DB インスタンスへの接続に誤った DNS 名またはエンドポイントが使用されている。
  • マルチ AZ DB インスタンスがフェイルオーバーされ、セカンダリ DB インスタンスがインバウンド接続を許可しないサブネットまたはルートテーブルを使用している。
  • 次のいずれかの理由により、ユーザー認証が正しくありません。
    • データベースレベルで間違ったユーザー名またはパスワードを使用して、DB クライアントからインスタンスにアクセスしている。
    • インスタンスにアクセスするために必要なデータベース許可がない。
    • データベースバージョンと互換性のないバージョンでクライアントが実行されている。

ヒント: 次のトラブルシューティングのステップに従って、接続の問題の原因を特定できます。または、AWSSupport-TroubleshootConnectivityToRDS AWS Systems Manager Automation ドキュメントを使用して、問題を診断することもできます。このオートメーションドキュメントでは、Amazon Elastic Compute Cloud (Amazon EC2) インスタンスのプライマリ IP アドレスに基づいてネットワーク ACL を診断できますが、一時ポートは検証されません。オートメーションドキュメントでは、EC2 インスタンスのプライマリ IP アドレスに基づいてセキュリティグループも確認されますが、特定のポートはそのオートメーションでは確認されません。詳細については、シンプルな自動化ワークフローを実行するをご参照ください。

解決方法

DB インスタンスが利用可能な状態であることを確認する

DB インスタンスを最近開始または再開した場合は、Amazon RDS コンソールでインスタンスが利用可能の状態であることを確認します。DB インスタンスのサイズによっては、DB インスタンスがネットワーク接続に使用できるようになるまでに、最大 20 分かかることがあります。

DB インスタンスが失敗の状態の場合には、Amazon RDS DB インスタンスが失敗した状態になっているのはなぜですか? をご参照ください。

DB インスタンスで接続が許可されていることを確認する

DB インスタンスに接続するソースからのトラフィックが、次の 1 つまたは複数によってゲートされていないことを確認します。

  • DB インスタンスに関連付けられた Amazon Virtual Private Cloud (Amazon VPC) セキュリティグループ。 必要に応じて、DB インスタンスに出入りするソースに関連するトラフィックを許可する VPC に関連付けられたセキュリティグループにルールを追加します。IP アドレス、IP アドレスの範囲、または別の VPC セキュリティグループを指定できます。VPC および DB インスタンスの一般的な情報については、VPC 内の DB インスタンスにアクセスするためのシナリオをご参照ください。
  • DB インスタンスに関連付けられた任意の DB セキュリティグループ。 DB インスタンスが VPC 内にない場合、そのインスタンスは DB セキュリティグループを使用してトラフィックをゲートしている可能性があります。DB セキュリティグループを更新して、IP アドレス範囲、Amazon EC2 セキュリティグループ、または接続に使用する EC2 Classic インスタンスからのトラフィックを許可します。
  • VPC 外部の接続。 DB インスタンスがパブリックにアクセス可能であり、パブリックサブネットに関連付けられている (例えば、ルートテーブルではインターネットゲートウェイからのアクセスを許可します) ことを確認します。詳細については、「Scenarios for accessing a DB instance in a VPC」(VPC 内の DB インスタンスにアクセスするためのシナリオ) を参照してください。
    DB インスタンスがプライベートサブネットにある場合は、必ず VPC ピアリングまたは AWS Site-to-Site VPN を使用してインスタンスに安全に接続してください。Site-to-Site VPN では、VPC をリモートネットワークに接続できるカスタマーゲートウェイを設定します。VPC ピアリングを使用するには、ソース VPC とインスタンスの VPC の間にピア接続を作成し、VPC の外部からインスタンスにアクセスします。Amazon EC2 インスタンスを踏み台 (ジャンプ) ホストとして使用することもできます。
  • ネットワーク ACL。 ネットワーク ACL は、VPC 内の特定のサブネット内のリソースのファイアウォールとして機能します。VPC で ACL を使用する場合は、DB インスタンスとの間で送受信されるインバウンドおよびアウトバウンドトラフィックを許可するルールがあることを確認してください。
  • ネットワークまたはローカルのファイアウォール。 ネットワーク管理者に問い合わせて、DB インスタンスがインバウンドおよびアウトバウンド通信に使用するポートとの間のトラフィックがネットワークで許可されているかどうかを確認します。
    : Amazon RDS では、ping を含むインターネットコントロールメッセージプロトコル (ICMP) トラフィックは受け入れられません。

DNS 名またはエンドポイントの問題のトラブルシューティング

DB インスタンスに接続するときは、Amazon RDS コンソールが提供する DNS 名 (エンドポイント) を使用します。正しいエンドポイントを使用し、DB インスタンスへの接続に使用するクライアントに正しい形式でエンドポイントを設定していることを確認してください。DB エンジン接続チュートリアルのリストには、さまざまなクライアントアプリケーションでエンドポイントを検索して適切に使用する手順が含まれています。Amazon RDS の使用開始をご参照ください。

例えば、VPC 内の Amazon EC2 インスタンスから DB インスタンスエンドポイントに nslookup を使用します。

nslookup myexampledb.xxxx.us-east-1.rds.amazonaws.com 
Server: xx.xx.xx.xx 
Address: xx.xx.xx.xx#53

権限のない回答の次の例を参照してください。

Name: myexampledb.xxxx.us-east-1.rds.amazonaws.com 
Address: 172.31.xx.x

データベースレベルの問題をトラブルシューティングする

  • DB クライアントからインスタンスにアクセスするには、正しいユーザー名とパスワードを使用していることを確認してください。
  • DB インスタンスに接続するためのデータベース許可がユーザーに付与されていることを確認してください。
  • CPU やメモリの競合など、RDS のリソーススロットリングがないか確認します。この競合により、インスタンスへの新しい接続を確立する際に問題が発生する可能性があります。
  • インスタンスが max_connections の制限に達していないことを確認してください。

インスタンスに関連付けられているルートテーブルを確認します。

マルチ AZ 配置を作成する場合、アプリケーションの耐障害性を向上させるために、異なるアベイラビリティーゾーンで複数のレプリカ DB インスタンスを起動してください。各 DB インスタンスに関連付けられているサブネットが、同じまたは類似のルートテーブルに関連付けられていることを確認します。プライマリ DB インスタンスがスタンバイレプリカにフェイルオーバーし、スタンバイレプリカが別のルートテーブルに関連付けられているとき、以前に DB インスタンスにルーティングされていたトラフィックが正しくルーティングされなくなる可能性があります。

ルートテーブルの設定方法の詳細については、「Configure route tables」(ルートテーブルの設定) を参照してください。マルチ AZ 配置の詳細については、「Multi-AZ deployments for high availability」(高可用性のためのマルチ AZ 配置) を参照してください。

注: DB インスタンスに接続できるが、認証エラーが発生する場合は、「Amazon RDS DB インスタンスのマスターユーザーパスワードをリセットするにはどうすればよいですか?」を参照してください。

接続を確認する

次のいずれかのコマンドを実行して、接続を確認します。

telnet <RDS endpoint> <port number>
nc -zv <RDS endpoint> <port number>

telnet コマンドまたは nc コマンドのいずれかが成功した場合、ネットワーク接続は確立されています。これは、ユーザー名やパスワードなど、データベースへのユーザー認証が原因である可能性が高いことを意味します。