Comment se connecter à une base de données à partir d'une tâche Amazon ECS sur Fargate ?

Dernière mise à jour : 17/12/2020

Je souhaite me connecter à une base de données à partir d'une tâche Amazon Elastic Container Service (Amazon ECS) sur AWS Fargate.

Résolution

Avant d'effectuer les étapes suivantes, vérifiez que vous disposez d'un cluster Amazon ECS exécuté sur Fargate et d'une base de données Amazon Relational Database Service (Amazon RDS).

Remarque : la résolution suivante utilise MySQL comme type de moteur.

Connecter votre tâche à votre base de données

1.    Créez un script Python qui se connecte à votre base de données MySQL.

L'exemple de script rds.py suivant affiche le résultat de la connexion à la base de données vers 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(Database_endpoint,Username,Password)
    print ("Connection successful to "+Database_endpoint)
except Exception as e:
    print ("Connection unsuccessful due to "+str(e))

Remarque : remplacez ENDPOINT (point de terminaison), USER (Utilisateur) et PASS (transmettre) par les valeurs de votre base de données.

2.    Créez un Dockerfile qui inclut les commandes requises pour assembler une image. Par exemple :

FROM python
RUN pip install pymysql cryptography
COPY rds.py /
CMD [ "python", "/rds.py" ]

Important : veillez à placer votre script rds.py et Dockerfile dans le même dossier.

3.    Créez un référentiel Amazon ECR, puis envoyez l'image Docker vers ce référentiel.

4.    Créez une définition de tâche, puis ajoutez l'image Docker de l'étape 2 en tant qu'image conteneur. Par exemple :

{
  "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"
}

Remarque : dans votre définition de tâche, définissez les valeurs des variables d'environnement ENDPOINT (point de terminaison), USER (utilisateur) et PASS. Vous pouvez transmettre ces valeurs directement en tant que variables d'environnement ou les récupérer à partir de secrets dans AWS Secrets Manager. Pour plus d’informations, consultez Comment transmettre des secrets ou des informations sensibles en toute sécurité aux conteneurs dans le cadre d'une tâche Amazon ECS ?

5.    Ouvrez la console Amazon ECS, puis choisissez Task Definitions (Définitions de tâche) dans le panneau de navigation.

6.    Sélectionnez votre définition de tâche, choisissez Actions, puis Run Task (Exécuter la tâche).

7.    Pour Launch type (Type de lancement), choisissez FARGATE.

8.    Pour Cluster, choisissez le cluster correspondant à votre définition de tâche.

9.    Dans Number of tasks, entrez le nombre de tâches que vous souhaitez copier.

10.    Dans la section VPC and security groups (VPC et groupes de sécurité), pour Cluster VPC, choisissez votre Amazon Virtual Private Cloud (Amazon VPC).

11.    Pour Subnets (Sous-réseaux), choisissez vos sous-réseaux.

12.    Pour Security groups (Groupes de sécurité), sélectionnez au moins un groupe de sécurité.

13.    Choisissez Run Task (Exécuter la tâche).

Le script rds.py arrête la tâche et renvoie le message suivant :

Essential container in task exited.

Confirmer que votre tâche est connectée à votre base de données

1.    Ouvrez la console Amazon ECS.

2.    Dans le menu de navigation, sélectionnez Clusters, puis votre cluster.

3.    Sélectionnez l'onglet Tasks (Tâches).

4.    Pour Desired task status (État de la tâche souhaitée), choisissez Stopped (Arrêtée) pour afficher la liste des tâches arrêtées.

5.    Choisissez votre tâche arrêtée.

6.    Sous l'onglet Details (Détails) de votre tâche arrêtée, dans la section Containers (Conteneurs), sélectionnez l'icône d'extension.

7.    Choisissez View logs in CloudWatch (Afficher les journaux dans CloudWatch).

Le message suivant doit s'afficher dans la console AWS CloudWatch :

Connection successful to [Your Endpoint]

Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?