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

Lecture de 4 minute(s)
0

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). Amazon ECS et Amazon RDS peuvent rencontrer des problèmes de communication. Pour plus d'informations, consultez Comment résoudre les problèmes de connectivité entre mes tâches Amazon ECS pour un type de lancement Amazon EC2 et une base de données Amazon RDS ?.

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

Connectez 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 génère 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(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))

Remarque : remplacez POINT DE TERMINAISON, UTILISATEUR et PASSER 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 : assurez-vous de placer votre script rds.py et Dockerfile dans le même dossier.

3.    Créez un référentiel Amazon ECR, puis transférez 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 du 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 la définition de votre tâche, définissez les valeurs des variables d'environnement POINT DE TERMINAISON, UTILISATEUR, et PASSER. Vous pouvez transmettre ces valeurs directement sous forme de variables d'environnement ou les récupérer à partir de secrets dans AWS Secrets Manager. Pour plus d'informations, consultez Comment puis-je transmettre des secrets ou des informations sensibles en toute sécurité à des conteneurs dans le cadre d'une tâche Amazon ECS ?

5.    Ouvrez la console Amazon ECS et choisissez Définitions de tâche dans le volet de navigation.

6.    Sélectionnez votre définition de tâche, choisissez Actions, puis sélectionnez Exécuter la tâche.

7.    Pour le Type de lancement, choisissez FARGATE.

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

9.    Dans Nombre de tâches, entrez le nombre de tâches que vous souhaitez copier.

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

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

12.    Pour Groupes de sécurité, sélectionnez au moins un groupe de sécurité.

13.    Choisissez Exécuter la tâche.

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

Essential container in task exited.

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

1.    Ouvrez la console Amazon ECS.

2.    Dans le menu de navigation, choisissez Clusters, puis choisissez votre cluster.

3.    Choisissez l'onglet Tâches.

4.    Pour Statut des tâches souhaitées, choisissez Arrêté pour afficher la liste des tâches arrêtées.

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

6.    Dans l'onglet Détails de votre tâche arrêtée, dans la section Conteneurs, choisissez l'icône de l'extenseur.

7.    Choisissez Afficher les journaux dans CloudWatch.

Le message suivant devrait s'afficher dans la console Amazon CloudWatch :

Connection successful to [Your Endpoint]
AWS OFFICIEL
AWS OFFICIELA mis à jour il y a un an