EC2インスタンスからRDSへの一般的な接続問題のトラブルシューティング
Amazon EC2インスタンスとAmazon Relational Database Service (RDS) インスタンスの接続は、多くのAWSアーキテクチャにおける基本的な操作です。しかし、ネットワーク設定の複雑さが原因で接続に失敗することがよくあります。このガイドでは、コンピューティング層 (EC2) と管理データベース層 (RDS) 間の一般的な接続問題を体系的に診断し、解決する方法を提供します。
EC2とRDSの両方がAWS Virtual Private Cloud (VPC) 環境内に存在することを理解すると、ほとんどの接続問題は、セキュリティグループのルール、サブネットルーティング、またはデータベースパラメータの設定ミスに起因します。これらのコンポーネントを体系的に確認することで、データベースへのアクセスを迅速に復旧できます。
正常な接続のための前提条件
トラブルシューティングに入る前に、以下の基本的な要素が正しく設定されていることを確認してください。
- VPCの一致: 設定が最も簡単なのは、EC2インスタンスとRDSインスタンスが同じVPC内に配置されている場合です。ただし、VPCピアリングを介したVPC間接続も可能です。
- アベイラビリティーゾーン (AZ): アプリケーションインフラストラクチャ (EC2) が、必要に応じてデータベースインフラストラクチャ (RDS) とAZをまたいで通信できることを確認してください。ただし、通常、VPC内ではルーティングがこれを処理します。
- ネットワーク到達可能性: EC2インスタンスが実行されており、アクティブなネットワーク接続があること (例: インターネットや他の内部サービスに到達できること) を確認してください。
ステップ1: セキュリティグループの設定を確認する (最も一般的な原因)
セキュリティグループは、EC2インスタンスとRDSインスタンスの両方に対する仮想ファイアウォールとして機能します。ここの設定ミスは、接続失敗の大多数の原因となります。
A. EC2セキュリティグループの確認
EC2インスタンスには、データベースポートへのトラフィックを許可するアウトバウンドルールが必要です。デフォルトでは、ほとんどのセキュリティグループはすべての発信トラフィック (0.0.0.0/0、すべてのプロトコル/ポート) を許可しますが、これを検証することをお勧めします。
B. RDSセキュリティグループのインバウンドルールを確認する
これは重要なステップです。RDSセキュリティグループは、EC2インスタンスからのインバウンドトラフィックを明示的に許可する必要があります。
確認事項:
- RDSコンソールに移動し、データベースインスタンスを選択します。
- 接続とセキュリティタブに移動し、関連するセキュリティグループを見つけます。
- インバウンドルールを編集します。
- 特定のデータベースポート (例: MySQLの場合は3306、PostgreSQLの場合は5432) へのトラフィックを許可するルールがあることを確認します。
- このルールのソースは、EC2インスタンスのセキュリティグループIDである必要があります。または、セキュリティグループ参照を使用していない場合は、EC2インスタンスの特定のプライベートIP範囲である必要があります。
ベストプラクティス: EC2インスタンスのプライベートIPが変更された場合 (例: スケーリング時や再起動時) でも接続が持続するように、ソースフィールドに特定のIPアドレスを使用するのではなく、常にソースリソース (EC2) のセキュリティグループIDを参照してください。
インバウンドルールの例 (PostgreSQL):
| タイプ | プロトコル | ポート範囲 | ソース |
|---|---|---|---|
| PostgreSQL | TCP | 5432 | sg-012345abcdef67890 (EC2セキュリティグループID) |
ステップ2: RDSのパブリックアクセス可能性とエンドポイントを確認する
EC2インスタンスがプライベートサブネットにない場合、またはパブリックインターネット経由での接続が必要な場合 (本番環境では一般的に推奨されません)、RDSのパブリックアクセス可能性を確認する必要があります。
A. パブリックアクセス可能性の設定
- RDSコンソールで、RDSインスタンスの接続とセキュリティタブを確認します。
- パブリックアクセス可能がいいえに設定されている場合、データベースには同じVPC内のリソース (プライベートサブネットのEC2インスタンスなど) からのみ到達できます。
- パブリックアクセス可能がはいに設定されている場合、EC2インスタンスがプライベートサブネットにある場合は、インターネットゲートウェイまたはNATゲートウェイへの有効なルートを持っていることを確認し、セキュリティグループが必要なパブリックIP範囲からのイングレスを許可していること (または厳格なIPホワイトリスト経由で保護されていること) を確認してください。
B. エンドポイントの検証
EC2インスタンス上のアプリケーションが正しいRDSエンドポイント (DNS名) と正しいポートを使用していることを確認してください。ここでの不一致は、タイムアウトや接続拒否につながります。
RDSエンドポイントとポートへの基本的なTCP到達可能性をテストするために、EC2インスタンスから telnet または nc (netcat) ユーティリティを使用します。
# ポート3306のMySQLの場合
telnet your-rds-endpoint.rds.amazonaws.com 3306
# ポート5432のPostgreSQLの場合
nc -zv your-rds-endpoint.rds.amazonaws.com 5432
接続が成功すると、空白の画面が表示されるか、すぐに接続メッセージが表示されます。失敗 (タイムアウトまたは拒否) は、通常、セキュリティグループまたはサブネットルーティングによるネットワークブロックを示します。
ステップ3: サブネットとルーティング設定の分析
セキュリティグループが正しく見える場合、問題はサブネット間の通信方法にある可能性があります。
A. ネットワークACL (NACL)
ネットワークACLは、サブネットレベルで機能するステートレスファイアウォールです。カスタムNACLを実装している場合、接続を完了するために必要な戻りトラフィックをブロックしている可能性があります。
- EC2サブネットとRDSサブネットの両方のNACLを確認してください。
- インバウンドおよびアウトバウンドの両方のルールが、データベースポートと戻りトラフィック用のエフェメラルポート範囲 (1024-65535) でトラフィックを許可していることを確認してください。
B. VPCエンドポイント (該当する場合)
EC2インスタンスがプライベートサブネットにあり、S3用のVPCゲートウェイエンドポイントまたは他のサービス用のインターフェイスエンドポイントを介してRDSエンドポイントにアクセスしている場合、エンドポイントポリシーがRDSサービスとの通信を許可していることを確認してください。ただし、RDSは通常、標準のVPCルーティングに依存しています。
ステップ4: データベースインスタンスの設定チェック
ネットワーク接続が確認された場合 (ステップ2が成功)、問題はデータベースエンジン自体にあります。
A. データベースの認証情報と認可
EC2インスタンスから接続するアプリケーションが使用しているユーザー名、パスワード、およびデータベース名を確認してください。MySQLやPostgreSQLなどのRDSサービスは、厳格なユーザー認証を適用します。
B. パラメータグループとデータベースの状態
- データベースの状態: RDSインスタンスの状態が利用可能であることを確認してください。変更中、バックアップ中、または再起動中の場合、接続は失敗します。
- パラメータグループ: RDSインスタンスに適用されているカスタムパラメータグループを確認してください。特定の 設定 (一部のMySQL構成の
skip-networkingのような、マネージドRDSではまれですが) が接続を妨げる可能性があります。
C. IAMデータベース認証 (使用している場合)
パスワードの代わりにIAMでデータベース認証を行っている場合は、EC2インスタンスにアタッチされているIAMロール (またはアプリケーションを実行しているユーザープロファイル) が正しい権限 (rds-db:connect) を持っており、接続文字列に必要な認証トークンが正しく含まれていることを確認してください。
トラブルシューティングフローの概要
問題を迅速に解決するために、この優先順位付けされたチェックリストを使用してください。
- Ping/Telnetチェック: EC2は
telnetまたはncを使用してRDSポートに到達できますか? (基本的なネットワークパス/セキュリティグループをテストします)。 - RDSセキュリティグループ: インバウンドルールは、EC2セキュリティグループからRDSポートへのトラフィックを許可していますか?
- NACL: インバウンドおよびアウトバウンドの両方のルールは、必要なポート (データベースポート + エフェメラルポート) で開いていますか?
- エンドポイント/認証情報: 接続文字列は正しいですか、そして認証情報は有効ですか?
- DB状態: RDSインスタンスは利用可能ですか?
これらのレイヤーを、セキュリティ境界からデータベース認証レイヤーまで体系的に確認することで、EC2からRDSへの接続のほとんどの一般的な障害を効率的に特定し、修正できます。