AWS Fargate の Amazon Elastic コンテナサービス (Amazon ECS) タスクからデータベースに接続したいと考えています。
解決策
前提条件:
注: 次の例では、MySQL をエンジンタイプとして使用します。エンジンタイプの詳細については、「Amazon RDS のスタート方法」を参照してください。
タスクをデータベースに接続する
次の手順を実行します。
- MySQL データベースに接続する Python スクリプトを作成します。次の rds.py サンプルスクリプトでは、データベースへの接続の結果を Amazon CloudWatch に送信します。
import pymysqlimport 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))
**注:**ENDPOINT、USER、PASS を実際のデータベースの値に置き換えます。
- イメージを組み立てるために必要なコマンドを含む Dockerfile を作成します。例:
FROM pythonRUN pip install pymysql cryptography
COPY rds.py /
CMD [ "python", "/rds.py" ]
重要: rds.py スクリプトと Dockerfile を同じフォルダに配置します。
- Amazon ECR リポジトリを作成してから、Docker イメージをそのリポジトリにプッシュします。
- タスク定義を作成し、その後に 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"
}
注: タスク定義で、ENDPOINT、USER、および PASS 環境変数の値を設定します。これらの値は、環境変数として直接渡すか、AWS Secrets Manager のシークレットから取得できます。詳細については、「Amazon ECS タスクで秘密情報や機密情報をコンテナに安全に渡す方法を教えてください。」を参照してください。
- Amazon ECS コンソールを開きます。
- ナビゲーションペインで、[タスク定義] を選択します。
- タスク定義を選択し、[アクション]、[タスクの実行] の順に選択します。
- [起動タイプ] で [FARGATE] を選択します。
- [クラスター] で、タスク定義用のクラスタを選択します。
- [タスクの数] に、コピーするタスクの数を入力します。
- [VPC とセキュリティグループ] セクションの [クラスター VPC] で、Amazon Virtual Private Cloud (Amazon VPC) を選択します。
- [サブネット] で、サブネットを選択します。
- [セキュリティグループ] で、少なくとも 1 つのセキュリティグループを選択します。
- [タスクの実行] を選択します。
rds.py スクリプトはタスクを停止し、次のメッセージを返します。
「Essential container in task exited.」
タスクがデータベースに接続されていることを確認する
次の手順を実行します。
- Amazon ECS コンソールを開きます。
- ナビゲーションペインで [クラスター] を選択してから、クラスターを選択します。
- [タスク] タブを選択します。
- [必要なタスクのステータス] で、停止したタスクのリストを表示するために、[停止] を選択します。
- 停止したタスクを選択します。
- 停止したタスクの [詳細] タブの [コンテナ] セクションで、セクションを展開します。
- [CloudWatch でログを表示] を選択します。
CloudWatch コンソールに次のメッセージが表示されます。
「[自分のエンドポイント] への接続に成功しました」