Wie stelle ich von einer Amazon ECS-Aufgabe auf Fargate aus eine Verbindung zu einer Datenbank her?

Lesedauer: 3 Minute
0

Ich möchte von einer Amazon Elastic Container Service (Amazon ECS)-Aufgabe auf AWS Fargate aus eine Verbindung zu einer Datenbank herstellen.

Lösung

Voraussetzungen:

Hinweis: Das folgende Beispiel verwendet MySQL als Engine-Typ. Weitere Informationen zu Engine-Typen finden Sie unter Erste Schritte mit Amazon RDS.

Verbinden Sie Ihre Aufgabe mit Ihrer Datenbank

Führen Sie die folgenden Schritte aus:

  1. Erstellen Sie ein Python-Skript, das eine Verbindung zu Ihrer MySQL-Datenbank herstellt. Das folgende Beispielskript rds.py sendet die Ergebnisse der Verbindung zur Datenbank an 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))
    Hinweis: Ersetzen Sie ENDPOINT, USER und PASS durch Ihre Datenbankwerte.
  2. Um ein Image zusammenzustellen, erstellen Sie ein Dockerfile, das die erforderlichen Befehle enthält. Zum Beispiel:
    FROM pythonRUN pip install pymysql cryptography
    COPY rds.py /
    CMD [ "python", "/rds.py" ]
    Wichtig: Legen Sie das Skript rds.py und Dockerfile in den gleichen Ordner.
  3. Erstellen Sie ein Amazon ECR-Repository und übertragen Sie dann das Docker-Image in dieses Repository.
  4. Erstellen Sie eine Aufgabendefinition und fügen Sie dann das Docker-Image als Container-Image hinzu. Zum Beispiel:
    {
      "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"
    }
    Hinweis: Legen Sie in Ihrer Aufgabendefinition die Werte für die Umgebungsvariablen ENDPOINT, USER und PASS fest. Sie können diese Werte direkt als Umgebungsvariablen übergeben oder die Werte aus Secrets in AWS Secrets Manager abrufen. Weitere Informationen finden Sie unter Wie kann ich in einer Amazon ECS-Aufgabe geheime oder vertrauliche Informationen sicher an Container weitergeben?
  5. Öffnen Sie die Amazon-ECS-Konsole.
  6. Wählen Sie im Navigationsbereich Aufgabendefinitionen aus.
  7. Wählen Sie Ihre Aufgabendefinition aus, wählen Sie Aktionen und dann Aufgabe ausführen aus.
  8. Wählen Sie als Starttyp FARGATE aus.
  9. Wählen Sie für Cluster den Cluster für Ihre Aufgabendefinition aus.
  10. Geben Sie unter Anzahl der Aufgaben die Anzahl der Aufgaben ein, die Sie kopieren möchten.
  11. Wählen Sie im Abschnitt VPC und Sicherheitsgruppen für Cluster-VPC Ihre Amazon Virtual Private Cloud (Amazon VPC) aus.
  12. Wählen Sie für Subnetze Ihre Subnetze aus.
  13. Wählen Sie für Sicherheitsgruppen mindestens eine Sicherheitsgruppe aus.
  14. Wählen Sie Aufgabe ausführen.

Das Skript rds.py stoppt die Aufgabe und gibt die folgende Meldung zurück:

„Der wichtige Container in der Aufgabe wurde beendet.“

Bestätigen Sie, dass Ihre Aufgabe mit Ihrer Datenbank verbunden ist

Führen Sie die folgenden Schritte aus:

  1. Öffnen Sie die Amazon-ECS-Konsole.
  2. Wählen Sie im Navigationsbereich Cluster und dann Ihren Cluster aus.
  3. Wählen Sie die Registerkarte Aufgaben aus.
  4. Wählen Sie unter Gewünschter Aufgabenstatus die Option Gestoppt aus, um eine Liste der gestoppten Aufgaben anzuzeigen.
  5. Wählen Sie Ihre gestoppte Aufgabe aus.
  6. Erweitern Sie auf der Registerkarte Details Ihrer gestoppten Aufgabe im Abschnitt Container den Abschnitt.
  7. Wählen Sie Protokolle in CloudWatch anzeigen.

In der CloudWatch-Konsole wird die folgende Meldung angezeigt:

"Connection successful to [Your Endpoint]"

AWS OFFICIAL
AWS OFFICIALAktualisiert vor einem Jahr