Projekte in AWS

Erstellen einer modernen Webanwendung

Bereitstellen einer Webanwendung, Anbinden an eine Datenbank und Analysieren des Benutzerverhaltens

Modul 3: Mysfit-Daten speichern

In diesem Modul konfigurieren Sie Amazon DynamoDB, um die Informationen zu den Mysfits in einer zentralen Datenbanktabelle zu speichern.

Übersicht

Sie haben bisher einen Service bereitgestellt und eine funktionierende CI-/CD-Pipeline erstellt, um bei jeder Aktualisierung Ihres Code-Repositorys die entsprechenden Änderungen für diesen Service zu übernehmen. Nun sind Sie in der Lage, neue Funktionen für Ihre Anwendung zu entwickeln und Ihren Mythical Mysfits-Kunden zügig zur Verfügung zu stellen. Im Zuge dieser verbesserten Agilität wollen wir nun die Architektur der Mythical Mysfits-Website um eine weitere grundlegende Funktionalität erweitern: eine Datenebene.

In diesem Modul werden Sie eine Tabelle in Amazon DynamoDB erstellen, einem verwalteten und skalierbaren NoSQL-Datenbankservice in AWS mit äußerst hoher Verarbeitungsgeschwindigkeit. Statt alle Mysfits in einer statischen JSON-Datei zu speichern, werden wir sie in einer Datenbank erfassen, um die künftige Erweiterbarkeit und Skalierbarkeit der Website zu gewährleisten.

Architekturdiagramm

Pfeil-Schaubild mit Fargate und DynamoDB

 Benötigte Zeit

20 Minuten

 Verwendete Services

Anleitung für die Implementierung

  • Eine DynamoDB-Tabelle erstellen

    Um der Architektur eine DynamoDB-Tabelle hinzuzufügen, haben wir eine weitere Eingabedatei für die JSON-Befehlszeilenschnittstelle bereitgestellt, mit der die Tabelle "Mysfits Table" definiert wird. Diese Tabelle verfügt über einen primären Index, der durch das Hash-Schlüssel-Attribut "MysfitId" definiert wird, sowie über zwei weitere sekundäre Indizes. Dem ersten sekundären Index ist der Hash-Schlüssel "Species" und der Bereichsschlüssel "MysfitId" zugeordnet, dem zweiten sekundären Index hingegen der Hash-Schlüssel "Alignment" und der Bereichsschlüssel "MysfitId" zugewiesen ist.

    Diese beiden sekundären Indizes ermöglichen das Abfragen der Tabelle zur Ermittlung aller Mysfits, die einer bestimmten Gattung (Species) oder Gesinnung (Alignment) angehören. Dadurch wird die Filterfunktion auf der Website aktiviert, die, wie Sie sicher bereits festgelegt haben, noch nicht einsatzbereit ist. Diese Datei finden Sie unter ~/environment/aws-modern-application-workshop/module-3/aws-cli/dynamodb-table.json. Sie müssen keine Änderungen an der Datei vornehmen und sie sofort ausführen. Weitere Informationen zu Indizes in DynamoDB und anderen grundlegenden Konzepten finden Sie auf dieser Seite

    Um die Tabelle mithilfe der AWS-Befehlszeilenschnittstelle zu erstellen, führen Sie im Cloud9-Terminal den folgenden Befehl aus:

    aws dynamodb create-table --cli-input-json file://~/environment/aws-modern-application-workshop/module-3/aws-cli/dynamodb-table.json

    Nachdem der Befehl ausgeführt wurde, können Sie die Details Ihrer neu erstellten Tabelle anzeigen, indem Sie den folgenden Befehl für die AWS-Befehlszeilenschnittstelle im Terminal ausführen:

    aws dynamodb describe-table --table-name MysfitsTable

    Wenn wir versuchen, durch Ausführen des folgenden Befehls alle in der Tabelle gespeicherten Elemente anzuzeigen, werden Sie feststellen, dass die Tabelle leer ist:

    aws dynamodb scan --table-name MysfitsTable
    {
        "Count": 0,
        "Items": [],
        "ScannedCount": 0,
        "ConsumedCapacity": null
    }
    B: Elemente zur DynamoDB-Tabelle hinzufügen

    Wir haben ebenfalls eine JSON-Datei bereitgestellt, die verwendet werden kann, um mehrere Mysfit-Elemente gleichzeitig in die Tabelle einzufügen. Dieser Prozess wird über die DynamoDB-API-Funktion "BatchWriteItem" ausgeführt.

    Um diese API-Funktion mithilfe der bereitgestellten JSON-Datei aufzurufen, führen Sie im Terminal den folgenden Befehl aus (vom Service sollte die Antwort zurückgegeben werden, dass keine unverarbeiteten Elemente vorhanden sind):

    aws dynamodb batch-write-item --request-items file://~/environment/aws-modern-application-workshop/module-3/aws-cli/populate-dynamodb.json

    Wenn Sie nun denselben Befehl erneut ausführen, um dem gesamten Tabelleninhalt zu durchsuchen, werden Sie feststellen, dass die Elemente der Tabelle hinzugefügt wurden:

    aws dynamodb scan --table-name MysfitsTable
  • A: Den aktualisierten Flask-Service-Code kopieren

    Sie haben bisher Ihre Daten in die Tabelle eingefügt. Nun können Sie den Anwendungscode so anpassen, anstatt der statischen JSON-Datei, die in Modul 2 verwendet wurde, diese Tabelle abgefragt wird. Dafür haben wir Ihnen eine Reihe neuer Python-Dateien für Ihren Flask-Mikroservice bereitgestellt. Anstatt die statische JSON-Datei zu durchsuchen, werden wir jedoch nun eine Anforderung an DynamoDB senden.

    Die Anforderung wird mithilfe des ASW-SDK für Python erstellt: boto3. Dieses SDK bietet eine einfache, aber leistungsstarke Möglichkeit für die Kommunikation mit AWS-Services über Python-Code. Auf diese Weise können Sie Definitionen und Funktionen für Service-Clients verwenden, die größtenteils den AWS-APIs und Befehlszeilenbefehlen entsprechen, die Sie im Rahmen dieses Workshops bereits kennengelernt haben. Die Überführung dieser Befehle in funktionierenden Python-Code ist mit boto3 ganz einfach.

    Führen Sie den folgenden Befehl im Terminal aus, um die neuen Dateien in das Verzeichnis Ihres CodeCommit-Repositorys zu kopieren:

    cp ~/environment/aws-modern-application-workshop/module-3/app/service/* ~/environment/MythicalMysfitsService-Repository/service/
    B: Den aktualisierten Flask-Service-Code kopieren

    Nun müssen wir die Änderungen am Code mit dem Git-Befehlszeilenclient bei CodeCommit einchecken.

    Führen Sie die folgenden Befehle aus, um den aktualisierten Code einzuchecken und Ihre CI-/CD-Pipeline zu starten:

    cd ~/environment/MythicalMysfitsService-Repository
    git add .
    git commit -m "Add new integration to DynamoDB."
    git push

    Der aktualisierte Code durchläuft nun in nur 5 bis 10 Minuten die gesamte CI-/CD-Pipeline in CodePipeline und wird über Ihren Flask-Service bei AWS Fargate in Amazon ECS bereitgestellt.

    Bei Bedarf können Sie die AWS CodePipeline-Konsole öffnen, um die Änderungen innerhalb der Pipeline nachzuverfolgen.

  • Zum Schluss müssen wir eine neue Datei mit dem Namen "index.html" in Ihrem S3-Bucket veröffentlichen, damit die neue API-Funktionalität zum Filtern von Antworten anhand von Abfragezeichenfolgen tatsächlich verwendet wird. Sie finden die neue Datei "index.html" unter "~/environment/aws-modern-application-workshop/module-3/web/index.html".

    Öffnen Sie diese Datei in Ihrer Cloud9-IDE und ersetzen Sie die Zeichenfolge "REPLACE_ME" durch den entsprechenden NLB-Endpunkt, wie Sie es bereits in Modul 2 gelernt haben. Vergewissern Sie sich, dass der "/mysfits"-Pfad nicht enthalten ist.

    Schlagen Sie ggf. in der bereits bearbeiteten Datei im Verzeichnis "/module-2/" nach. Nachdem Sie Ihren NLB-Endpunkt angegeben haben, laden Sie die neue Datei "index.html" hoch, indem Sie den folgenden Befehl ausführen. Ersetzen Sie dabei den Bucket-Namen durch den Namen des Buckets, den Sie in Modul 1 erstellt haben:

    aws s3 cp --recursive ~/environment/aws-modern-application-workshop/module-3/web/ s3://your_bucket_name_here/

    Kehren Sie zu Ihrer Mythical Mysfits-Website zurück. Sie werden feststellen, dass neue Mysfits aus Ihrer DynamoDB-Tabelle geladen wurden und die Filterfunktion nun verwendet werden kann.

    Damit ist Modul 3 abgeschlossen.

Nächster Schritt: Benutzerregistrierung konfigurieren