Amazon EC2 の起動タイプの Amazon ECS タスクと Amazon RDS データベースとの間の接続に関する問題のトラブルシューティング方法を教えてください。

最終更新日: 2020 年 10 月 15 日

私のアプリケーションは、Amazon Elastic Compute Cloud (Amazon EC2) インスタンスで Amazon Elastic Container Service (Amazon ECS) によって起動された一連のタスクとして実行されています。アプリケーションが Amazon Relational Database Service (Amazon RDS) データベースと通信できません。

解決方法

ネットワーク設定を確認する

コンテナインスタンスがデータベースへの接続を確立できるかどうかを確認するには、Linux ベースまたは Windows ベースのコンテナインスタンスのいずれかで次の手順を実行します。

Linux ベースのコンテナインスタンスの場合:

1.    SSH を使用して、タスクが配置されているコンテナインスタンスに接続します。

2.    RDS データベースに接続するには、次のコマンドを実行します。

$ telnet test.ab12cde3fg4.us-east-1.rds.amazonaws.com 3306

注: test.ab12cde3fg4.us-east-1.rds.amazonaws.com をデータベースエンドポイントに置き換えます。3306 をデータベースポートに置き換えます。

出力は次のようになります。

> Trying 172.31.122.28
 > Connected to test.ab12cde3fg4.us-east-1.rds.amazonaws.com
 > Escape character is '^]'.

重要: Telnet は、Amazon ECS に最適化された Amazon マシンイメージ (AMI) にはプレインストールされていません。Telnet をインストールするには、sudo yum install telnet -y コマンドを実行します。

Windows ベースのコンテナインスタンスの場合:

1.    リモートデスクトッププロトコル (RDP) を使用して、タスクが配置されているコンテナインスタンスに接続します。

2.    RDS データベースに接続するには、Windows コマンドプロンプトまたは Windows PowerShell を使用して次のコマンドを実行します。

$ telnet test.ab12cde3fg4.us-east-1.rds.amazonaws.com 3306

注: test.ab12cde3fg4.us-east-1.rds.amazonaws.com をデータベースエンドポイントに置き換えます。3306 をデータベースポートに置き換えます。

重要: Telnet は、Amazon ECS に最適化された Windows AMI にはプレインストールされていません。Telnet をインストールするには、管理者として PowerShell を使用し、Install-WindowsFeature -Name Telnet-Client コマンドを実行します。

接続が確立されると、空白のページが表示されます。

接続が確立されず、「Connection Timed Out (接続がタイムアウトしました)」または「Connect failed (接続に失敗しました)」というエラーが表示される場合は、次の手順を実行してください。

1.    アタッチされたセキュリティグループが RDS データベースへのアクセスを許可しているかどうかを確認します。DescribeInstances API 呼び出し、または Amazon EC2 コンソールで選択したインスタンス ID の [Description] (説明) タブを使用できます。

注: bridge および host ネットワークモードでは、コンテナインスタンスに関連付けられているセキュリティグループがデータベースへのアクセスを管理します。awsvpc ネットワークモードでは、サービスまたはタスクの起動中に関連付けられたセキュリティグループがアクセスを管理します。

ヒント: ベストプラクティスとして、データベースポートからの着信トラフィックを許可するセキュリティグループを作成します。次に、セキュリティグループをデータベースおよびコンテナインスタンスにアタッチするか、セキュリティグループを awsvpc に基づくタスクに関連付けます。

2.    サブネットに関連付けられているネットワークアクセスコントロールリスト (ネットワーク ACL) およびルートテーブルでデータベースへのアクセスが許可されているかどうかを確認します。

データベース接続パラメータを確認する

1.    コンテナ定義の環境セクションで、環境変数を安全に渡します。それらを安全に渡すには、AWS Systems Manager の Parameter Store または AWS Secrets Manager から環境変数を参照します

注: アプリケーションは、パラメータ (データベースエンドポイント、データベースポート、データベースアクセス認証情報など) を使用して、データベースとの接続を確立します。これらのパラメータは通常、環境変数としてタスクに渡されます。

2.    タスク内のコンテナがデータベースとの接続を確立できるが、接続パラメータ (データベースのユーザー名やデータベースのパスワードなど) が正しくないために認証できない場合は、データベースのパスワードをリセットしてください。

3.    接続パラメータから前後のスペース文字を削除します。

注: 構文エラーにより、コンテナと RDS データベース間の接続が失敗する可能性があります。</p


この記事はお役に立ちましたか?


請求に関するサポートまたは技術サポートが必要ですか?