私のアプリケーションは、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