In diesem Modul verwenden Sie AWS Lambda und Amazon DynamoDB, um einen Backend-Prozess zum Verarbeiten von Anforderungen für Ihre Webanwendung zu erstellen. Die Browseranwendung, die Sie im ersten Modul bereitgestellt haben, ermöglicht es Benutzern, anzufordern, dass ein Einhorn an einen Ort ihrer Wahl geschickt wird. Damit diese Anforderungen erfüllt werden können, muss das im Browser ausgeführte JavaScript einen in der Cloud ausgeführten Service aufrufen.

Serverless_Web_App_LP_assets-04

Sie implementieren eine Lambda-Funktion, die jedes Mal aufgerufen wird, wenn ein Benutzer ein Einhorn anfordert. Die Funktion wählt ein Einhorn aus der Flotte aus, hält die Anforderung in einer DynamoDB-Tabelle fest und sendet anschließend eine Antwort an die Front-End-Anwendung mit Details zum bereitgestellten Einhorn.

Die Funktion wird im Browser mithilfe von Amazon API Gateway aufgerufen. Sie implementieren diese Verbindung im nächsten Modul. In diesem Modul testen Sie Ihre Funktion isoliert.

Veranschlagte Zeit für das Modul: 30 Minuten

Verwendete Services: AWS Lambda, Amazon DynamoDB


Befolgen Sie die folgende schrittweise Anleitung zur Erstellung Ihres serverlosen Backend-Prozesses. Klicken Sie auf die Nummer eines jeweiligen Schritts, um den Bereich zu erweitern.

  • Schritt 1. Erstellen einer Amazon DynamoDB-Tabelle

    Verwenden Sie die Amazon DynamoDB-Konsole, um eine neue DynamoDB-Tabelle zu erstellen. Nennen Sie die Tabelle Rides und geben Sie ihr einen Partitionsschlüssel namens RideId mit dem Typ Zeichenfolge. Beim Namen der Tabelle und dem Partitionsschlüssel muss die Groß- und Kleinschreibung beachtet werden. Stellen Sie sicher, dass Sie die exakten IDs wie angegeben verwenden. Verwenden Sie für die anderen Einstellungen die Standardwerte.

    Notieren Sie sich nach dem Erstellen der Tabelle die ARN, die Sie im nächsten Schritt benötigen.


    1. Wählen Sie in der AWS-Managementkonsole Services und dann unter "Databases" (Datenbanken) die Option DynamoDB aus.

    2. Wählen Sie Create table (Tabelle erstellen).

    3. Geben Sie Rides als Tabellennamen ein. Bitte beachten Sie die Groß- und Kleinschreibung.

    4. Geben Sie RideId als Partitionsschlüssel ein und wählen Sie String (Zeichenfolge) als Schlüsseltyp aus. Bitte beachten Sie die Groß- und Kleinschreibung.

    5. Deaktivieren Sie das Kontrollkästchen Use default settings (Standardeinstellungen verwenden) und wählen Sie Create (Erstellen).

    6. Scrollen Sie im Übersichtsbereich Ihrer neuen Tabelle nach unten und notieren Sie sich die ARN. Sie benötigen diese im nächsten Abschnitt.

  • Schritt 2. Erstellen einer IAM-Rolle für Ihre Lambda-Funktion

    Jeder Lambda-Funktion ist eine IAM-Rolle zugeordnet. Die Rolle definiert, mit welchen anderen AWS-Services die Funktion interagieren darf. Für diesen Workshop müssen Sie eine IAM-Rolle erstellen, die Ihrer Lambda-Funktion Berechtigungen zum Schreiben von Protokollen in Amazon CloudWatch Logs und Zugriff zum Schreiben von Elementen in Ihre DynamoDB-Tabelle erteilt.

    Erstellen Sie mit der IAM-Konsole eine neue Rolle. Geben Sie WildRydesLambda als Namen ein und wählen Sie AWS Lambda als Rollentyp aus. Sie müssen Richtlinien anfügen, die Ihren Funktionen Berechtigungen zum Schreiben in Amazon CloudWatch Logs und zum Einfügen von Elementen in Ihre DynamoDB-Tabelle erteilen.

    Fügen Sie dieser Rolle die verwaltete Richtlinie AWSLambdaBasicExecutionRole an, um die erforderlichen Berechtigungen für CloudWatch Logs zu erteilen. Erstellen Sie außerdem eine benutzerdefinierte Inline-Richtlinie für Ihre Rolle, die die Aktion ddb:PutItem für die Tabelle zulässt, die Sie im vorherigen Abschnitt erstellt haben.


    1. Klicken Sie in der AWS-Managementkonsole auf Services und wählen Sie anschließend im Abschnitt "Identity & Compliance" (Identität und Compliance) die Option IAM.

    2. Wählen Sie im linken Navigationsbereich Roles (Rollen) und dann Create New Role (Neue Rolle erstellen).

    3. Wählen Sie Lambda für den Rollentyp aus der Gruppe AWS service (AWS-Service) aus und klicken Sie dann auf Next: Permissions (Weiter: Berechtigungen).

      Hinweis: Durch das Auswählen einer Rolle wird automatisch eine Vertrauensrichtlinie für Ihre Rolle erstellt, mit der AWS-Services diese Rolle in Ihrem Auftrag übernehmen dürfen. Wenn Sie diese Rolle mit der CLI, AWS CloudFormation oder einem anderen Mechanismus erstellt haben, geben Sie direkt eine Vertrauensrichtlinie an.

    4. Geben Sie AWSLambdaBasicExecutionRole in das Textfeld Filter ein und aktivieren Sie das Kontrollkästchen neben dieser Rolle.

    5. Klicken Sie auf Next Step (Nächster Schritt).

    6. Geben Sie WildRydesLambda als Rollennamen ein.

    7. Wählen Sie Create Role (Rolle erstellen).

    8. Geben Sie WildRydesLambda in das Filterfeld auf der Seite der Rollen ein und wählen Sie die soeben erstellte Rolle aus.

    9. Wählen Sie auf der Registerkarte "Permissions" (Berechtigungen) den Link Add inline policy (Inline-Richtlinie hinzufügen) in der unteren rechten Ecke aus, um eine neue Inline-Richtlinie zu erstellen.

    10. Wählen Sie Choose a service (Einen Service auswählen).

    11. Geben Sie DynamoDB in das Suchfeld Find a service (Service suchen) ein und wählen Sie DynamoDB aus, sobald es angezeigt wird.

    12. Wählen Sie Select actions (Ausgewählte Aktionen).

    13. Geben Sie PutItem in das Suchfeld Filter actions (Filteraktionen) ein und aktivieren Sie das Kontrollkästchen neben PutItem, sobald es angezeigt wird.

    14. Wählen Sie den Abschnitt Resources (Ressourcen) aus. 

    15. Wenn die Option Specific (Spezifisch) ausgewählt ist, wählen Sie den Link "Add ARN" (ARN hinzufügen) im Abschnitt table (Tabelle).

    16. Fügen Sie die ARN der Tabelle, die Sie im vorhergehenden Abschnitt erstellt haben, in das Feld Specify ARN for table (ARN für Tabelle festlegen) ein und wählen Sie Add (Hinzufügen).

    17. Wählen Sie Review policy (Richtlinie überprüfen).

    18. Geben Sie DynamoDBWriteAccess als Namen für die Richtlinie ein und wählen Sie Create policy (Richtlinie erstellen).

  • Schritt 3. Erstellen einer Lambda-Funktion zum Verarbeiten von Anforderungen

    AWS Lambda führt Ihren Code als Reaktion von Ereignissen wie etwa eine HTTP-Anforderung aus. In diesem Schritt erstellen Sie die Kernfunktion, die API-Anforderungen von der Webanwendung zum Bereitstellen eines Einhorns verarbeitet. Im nächsten Modul verwenden Sie Amazon API Gateway zum Erstellen einer RESTful API, die einen HTTP-Endpunkt bereitstellt, der über die Browser Ihrer Benutzer aufgerufen werden kann. Anschließend verbinden Sie die in diesem Schritt erstellte Lambda-Funktion mit der API, um ein vollständig funktionsfähiges Backend für Ihre Webanwendung zu erstellen.

    Verwenden Sie die AWS Lambda-Konsole, um eine neue Lambda-Funktion namens RequestUnicorn zu erstellen, die die API-Anfragen verarbeitet. Verwenden Sie die bereitgestellte Beispielimplementierung requestUnicorn.js für Ihren Funktionscode. Kopieren Sie sie einfach aus der Datei und fügen Sie sie im Editor der AWS Lambda-Konsole ein.

    Stellen Sie sicher, dass Sie Ihre Funktion so konfigurieren, dass sie die IAM-Rolle WildRydesLambda verwendet, die Sie im vorherigen Abschnitt erstellt haben.


    1. Wählen Sie Services und dann im Abschnitt "Compute" (Berechnen) die Option Lambda.

    2. Klicken Sie auf Create function (Funktion erstellen).

    3. Behalten Sie die Auswahl der Standardkarte Author from scratch (Von Grund auf neu erstellen) bei.

    4. Geben Sie RequestUnicorn in das Feld Name ein.

    5. Wählen Sie Node.js 6.10 für Runtime (Laufzeit) aus.

    6. Stellen Sie sicher, dass Choose an existing role (Wählen Sie eine existierende Rolle) im Dropdown-Menü Role (Rolle) ausgewählt ist.

    7. Wählen Sie WildRydesLambda aus dem Dropdown-Menü Existing Role (Bestehende Rolle) aus.

    8. Klicken Sie auf Create function (Funktion erstellen).

    9. Scrollen Sie nach unten zum Abschnitt Function code (Funktionscode) und ersetzen Sie den auslaufenden Code im Code-Editor index.js durch den Inhalt von requestUnicorn.js.

    10. Klicken Sie in der oberen rechten Ecke der Seite auf Save (Speichern).

  • Schritt 4. Testen der Implementierung

    In diesem Modul testen Sie die Funktion, die Sie mithilfe der AWS Lambda-Konsole erstellt haben. Im nächsten Modul fügen Sie eine REST API mit API Gateway hinzu, damit Sie Ihre Funktion über die browserbasierte Anwendung aufrufen können, die Sie im ersten Modul bereitgestellt haben.


    1. Wählen Sie im Hauptbearbeitungsbildschirm der Funktion die Option Configure test event (Testereignis konfigurieren) aus der Dropdown-Liste Select a test event... (Testereignis auswählen...) aus.

    2. Behalten Sie die Auswahl von Create new test event (Neues Testereignis erstellen) bei.

    3. Geben Sie TestRequestEvent im Feld Event name (Ereignisname) ein.

    4. Kopieren Sie das folgende Testereignis und fügen Sie es in den Editor ein:

    {
        "path": "/ride",
        "httpMethod": "POST",
        "headers": {
            "Accept": "*/*",
            "Authorization": "eyJraWQiOiJLTzRVMWZs",
            "content-type": "application/json; charset=UTF-8"
        },
        "queryStringParameters": null,
        "pathParameters": null,
        "requestContext": {
            "authorizer": {
                "claims": {
                    "cognito:username": "the_username"
                }
            }
        },
        "body": "{\"PickupLocation\":{\"Latitude\":47.6174755835663,\"Longitude\":-122.28837066650185}}"
    }
    1. Klicken Sie auf Create (Erstellen).

    2. Klicken Sie im Hauptfunktionsbearbeitungsbildschirm auf Test (Testen) und stellen Sie sicher, dass TestRequestEvent in der Dropdown-Liste ausgewählt ist.

    3. Scrollen Sie zum Seitenanfang und erweitern Sie den Abschnitt Details des Abschnitts Execution results (Ausführungsergebnis).

    4. Überprüfen Sie, ob die Ausführung erfolgreich war und die Funktionsergebnisse folgendermaßen aussehen:

    {
        "statusCode": 201,
        "body": "{\"RideId\":\"SvLnijIAtg6inAFUBRT+Fg==\",\"Unicorn\":{\"Name\":\"Rocinante\",\"Color\":\"Yellow\",\"Gender\":\"Female\"},\"Eta\":\"30 seconds\"}",
        "headers": {
            "Access-Control-Allow-Origin": "*"
        }
    }