AWS Fargate の Amazon Elastic コンテナサービス (Amazon ECS) タスクからデータベースに接続したいと考えています。
解決策
次の手順を完了する前に、Fargate で実行されている Amazon ECS クラスターと Amazon Relational Database Service (Amazon RDS) データベースがあることを確認してください。Amazon ECS と Amazon RDS に通信の問題がある場合は、「Amazon EC2 起動タイプの Amazon ECS タスクと Amazon RDS データベースとの間の接続に関する問題のトラブルシューティング方法を教えてください」を参照してください。
**注:**次の解決策では、MySQL をエンジンタイプとして使用します。
タスクをデータベースに接続する
1. MySQL データベースに接続する Python スクリプトを作成します。
次の rds.py スクリプト例では、データベースへの接続の結果を Amazon CloudWatch に出力します。
import pymysql
import os
Database_endpoint = os.environ['ENDPOINT']
Username = os.environ['USER']
Password = os.environ['PASS']
try:
print("Connecting to " + Database_endpoint)
db = pymysql.connect(host = Database_endpoint, user = Username, password = Password)
print("Connection successful to " + Database_endpoint)
db.close()
except Exception as e:
print("Connection unsuccessful due to " + str(e))
**注:**エンドポイント、ユーザー、パス をデータベースの値に置き換えます。
2. イメージを組み立てるために必要なコマンドを含む Dockerfile を作成します。例:
FROM python
RUN pip install pymysql cryptography
COPY rds.py /
CMD [ "python", "/rds.py" ]
**重要:**rds.py スクリプトと Dockerfile を同じフォルダに配置してください。
3. Amazon ECR リポジトリを作成してから、Docker イメージをそのリポジトリにプッシュします。
4. タスク定義を作成てから、ステップ 2 の Docker イメージをコンテナイメージとして追加します。例:
{
"executionRoleArn": "arn:aws:iam::account_ID:role/ecsTaskExecutionRole",
"containerDefinitions": [{
"name": "sample-app",
"image": "YOUR-ECR-Repository-URL",
"essential": true
}],
"requiresCompatibilities": [
"FARGATE"
],
"networkMode": "awsvpc",
"cpu": "256",
"memory": "512",
"family": "sample-app"
}
**注:**タスク定義で、エンドポイント、ユーザー、および パス 環境変数の値を設定します。これらの値は、環境変数として直接渡すか、AWS Secrets Manager のシークレットから取得できます。詳細については、「Amazon ECS タスク内のコンテナに秘密または機密の情報をセキュアに渡すにはどうすればよいですか? 」を参照してください。
5. Amazon ECS コンソールを開き、ナビゲーションペインで、[タスク定義] を選択します。
6. タスク定義を選択し、[アクション]、[タスクの実行] の順に選択します。
7. [起動タイプ] で [FARGATE] を選択します。
8. [クラスター] で、タスク定義用のクラスタを選択します。
9. [タスクの数] に、コピーするタスクの数を入力します。
10. [VPC とセキュリティグループ] セクションの [クラスター VPC] で、Amazon Virtual Private Cloud (Amazon VPC) を選択します。
11. [サブネット] で、サブネットを選択します。
12. [セキュリティグループ] で、少なくとも 1 つのセキュリティグループを選択します。
13. [タスクの実行] を選択します。
rds.py スクリプトはタスクを停止し、次のメッセージを返します。
Essential container in task exited.
タスクがデータベースに接続されていることを確認する
1. Amazon ECS コンソールを開きます。
2. ナビゲーションメニューで [クラスター] を選択してから、使用するクラスターを選択します。
3. [タスク] タブを選択します。
4. [必要なタスクのステータス] で 、[停止] を選択して、停止したタスクのリストを表示します。
5. 停止したタスクを選択します。
6. 停止したタスクの**[詳細]** タブの**[コンテナ]** セクションで、展開アイコンを選択します。
7. [CloudWatch のログを表示] を選択します。
Amazon CloudWatch コンソールに次のメッセージが表示されます。
Connection successful to [Your Endpoint]