Erste Schritte mit AWS

Erstellen einer einfachen Webanwendung

Bereitstellen einer Webanwendung und Einrichten der Interaktivität mit einer API und einer Datenbank

Modul 4: Erstellen einer Datentabelle

In diesem Modul erstellen Sie eine DynamoDB-Tabelle und ermöglichen Ihrer Lambda-Funktion das Speichern von Daten darin.

Einführung

In diesem Modul erstellen Sie eine Datentabelle, um Daten mithilfe von Amazon DynamoDB aufzubewahren. DynamoDB ist ein Schlüssel-Wert-Datenbank-Service. Wir müssen daher kein Schema für unsere Daten erstellen. Er bietet konsistente Leistung für jede Anforderung und erfordert keine Serververwaltung für seine Nutzung.

Darüber hinaus verwenden wir AWS Identity and Access Management (IAM) service, um unseren Services auf sichere Art die erforderlichen Berechtigungen zu erteilen, miteinander zu interagieren. Wir erlauben der Lambda-Funktion, die wir in Module 2 erstellt haben, insbesondere das Schreiben in unsere neu erstellte DynamoDB-Tabelle mithilfe einer IAM-Richtlinie. Dazu verwenden wir das AWS-SDK (Python, JavaScript oder Java) von unserer Lambda-Funktion aus.

Sie lernen Folgendes:

  • Erstellen einer DynamoDB-Tabelle mit der AWS-Managementkonsole
  • Erstellen einer Rolle und Verwalten von Berechtigungen mit IAM
  • Schreiben in eine DynamoDB-Tabelle mit dem AWS-SDK (Python, JavaScript oder Java)

Wichtige Konzepte

Aufbewahren von Daten Speichern von Daten, damit wir sie in Zukunft unabhängig vom Ausführen eines Programms aufrufen können.

Nicht relationale Datenbank Eine nicht relationale Datenbank verwendet kein tabellarisches Schema von Zeilen und Spalten. Stattdessen verwendet sie ein Speichermodell, das für spezifische Anforderungen des gespeicherten Datentyps optimiert ist.

Schlüssel-Wert-Datenbank Ein Typ einer nicht relationalen Datenbank, der Daten als eine Sammlung von Schlüssel-Wert-Paaren speichert, in denen ein Schlüssel als eindeutiger Identifikator dient.

Primärer Schlüssel Der Wert, der alle Daten in einer DynamoDB-Tabelle kennzeichnet. Dieser Wert dient zur Partitionierung der Tabelle, um sie skalierbar zu machen.

Schema Die Organisation der Daten, die als Blaupause für den Aufbau einer Datenbank dient.

AWS SDK SDK steht für „Software Development Kit“. AWS-SDKs bieten eine Reihe von Tools, Bibliotheken, Dokumentation, Codebeispielen, Prozessen und Anleitungen, die Entwicklern das Erstellen von Softwareanwendungen auf einer spezifischen Plattform ermöglichen.

IAM-Richtlinie Ein Dokument, das definiert, auf welche AWS-Ressourcen eine Entität (z. B. Service, Benutzer, Gruppe) Zugriff hat.

 Veranschlagte Zeit

10 Minuten

 Verwendete Services

Implementierung

  • Eine DynamoDB-Tabelle erstellen
    1. Melden Sie sich an der Amazon DynamoDB Console an.
    2. Notieren Sie sich, in welcher Region Sie die Funktion erstellen. Diese Angabe finden Sie ganz oben auf der Seite, neben dem Namen Ihres Kontos.
    3. Klicken Sie auf die blaue Schaltfläche „Create table (Tabelle erstellen)“.
    4. Geben Sie neben „Table name (Name der Tabelle)“ HelloWorldDatabase ein.
    5. Geben Sie in das Feld „Primary Key (Primärschlüssel)“ die ID ein.
    6. Klicken Sie auf die blaue Schaltfläche „Create (Erstellen)“.
    7. Kopieren Sie den „Amazon-Ressourcennamen (ARN)“ der Tabelle im rechten Bereich (Sie benötigen ihn später in diesem Modul).
  • Erstellen und Hinzufügen einer IAM-Richtlinie zur Lambda-Funktion
    1. Da wir jetzt über eine Tabelle verfügen, bearbeiten wir nun unsere Lambda-Funktion, um Daten in sie schreiben zu können. Öffnen Sie in einem neuen Browserfenster die AWS Lambda-Konsole.
    2. Klicken Sie auf die Funktion, die wir in Modul 2 erstellt haben (falls Sie unsere Beispiele verwenden, heißt diese „HelloWorldFunction“).
    3. Wir fügen unserer Funktion Berechtigungen hinzu, damit sie den DynamoDB-Service verwenden kann. Dazu verwenden wir das AWS Identity and Access Management (IAM).
    4. Klicken Sie auf die Registerkarte Permissions (Berechtigungen).
    5. Klicken Sie im Feld „Execution role (Ausführungsrolle)“ auf die Rolle. Eine neue Browserregisterkarte wird geöffnet.
    6. Klicken Sie rechts im Feld „Permissions policies (Berechtigungsrichtlinien)“ auf „Add inline policy (Inline-Richtlinie hinzufügen)“.
    7. Klicken Sie auf die Registerkarte „JSON“.
    8. Fügen Sie die folgende Richtlinie in den Textbereich ein. Achten Sie darauf, dass Sie den ARN Ihrer Tabelle im Feld „Resource (Ressource)“ in Zeile 15 ersetzen:
    {
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "dynamodb:PutItem",
                "dynamodb:DeleteItem",
                "dynamodb:GetItem",
                "dynamodb:Scan",
                "dynamodb:Query",
                "dynamodb:UpdateItem"
            ],
            "Resource": "YOUR-TABLE-ARN"
        }
        ]
    }

    9. Diese Richtlinie erlaubt unserer Lambda-Funktion das Lesen, Bearbeiten oder Löschen von Elementen, beschränkt dies allerdings auf die Tabelle, die wir erstellt haben.

    10. Klicken Sie auf die blaue Schaltfläche „Review Policy (Richtlinie überprüfen)“.

    11. Geben Sie neben „Name“ HelloWorldDynamoPolicy ein.

    12. Klicken Sie auf die blaue Schaltfläche „Create Policy (Richtlinie erstellen)“.

    13. Sie können diese Browserregisterkarte jetzt schließen und zur Registerkarte für Ihre Lambda-Funktion zurückkehren.


  • Bearbeiten der Lambda-Funktion, um in DynamoDB-Tabelle zu schreiben
    • Python
    • JavaScript
    • Java
    • Python
      1. Klicken Sie auf die Registerkarte „Configuration (Konfiguration)“.
      2. Ersetzen Sie den Code für Ihre Funktion durch Folgendes:
      # import the json utility package since we will be working with a JSON object
      import json
      # import the AWS SDK (for Python the package name is boto3)
      import boto3
      # import two packages to help us with dates and date formatting
      from time import gmtime, strftime
      
      # create a DynamoDB object using the AWS SDK
      dynamodb = boto3.resource('dynamodb')
      # use the DynamoDB object to select our table
      table = dynamodb.Table('HelloWorldDatabase')
      # store the current time in a human readable format in a variable
      now = strftime("%a, %d %b %Y %H:%M:%S +0000", gmtime())
      
      # define the handler function that the Lambda service will use as an entry point
      def lambda_handler(event, context):
      # extract values from the event object we got from the Lambda service and store in a variable
          name = event['firstName'] +' '+ event['lastName']
      # write name and time to the DynamoDB table using the object we instantiated and save response in a variable
          response = table.put_item(
              Item={
                  'ID': name,
                  'LatestGreetingTime':now
                  })
      # return a properly formatted JSON object
          return {
              'statusCode': 200,
              'body': json.dumps('Hello from Lambda, ' + name)
          }

      3. Klicken Sie oben auf der Seite auf die orangefarbene Schaltfläche „Save (Speichern)“.

    • JavaScript
      1. Klicken Sie auf die Registerkarte „Configuration (Konfiguration)“.
      2. Ersetzen Sie den Code für Ihre Funktion durch Folgendes:
      // Include the AWS SDK module
      const AWS = require('aws-sdk');
      // Instantiate a DynamoDB document client with the SDK
      let dynamodb = new AWS.DynamoDB.DocumentClient();
      // Use built-in module to get current date & time
      let date = new Date();
      // Store date and time in human-readable format in a variable
      let now = date.toISOString();
      // Define handler function, the entry point to our code for the Lambda service
      // We receive the object that triggers the function as a parameter
      exports.handler = async (event) => {
          // Extract values from event and format as strings
          let name = JSON.stringify(`Hello from Lambda, ${event.firstName} ${event.lastName}`);
          // Create JSON object with parameters for DynamoDB and store in a variable
          let params = {
              TableName:'HelloWorldDatabase',
              Item: {
                  'ID': name,
                  'LatestGreetingTime': now
              }
          };
          // Using await, make sure object writes to DynamoDB table before continuing execution
          await dynamodb.put(params).promise();
          // Create a JSON object with our response and store it in a constant
          const response = {
              statusCode: 200,
              body: name
          };
          // Return the response constant
          return response;
      };

      3. Klicken Sie oben auf der Seite auf die orangefarbene Schaltfläche „Save (Speichern)“.

    • Java
      1. Klicken Sie auf die Registerkarte „Configuration (Konfiguration)“.
      2. Rufen Sie „Function code (Funktionscode)“ auf und laden Sie die folgende JAR-Datei hoch. (Für dieses Tutorial überspringen wir das Erstellen des Bereitstellungspakets.)
      3. Aktualisieren Sie den Wert für „Handler“ auf com.example.app.SavePersonHandler::handleRequest.
      4. Klicken Sie oben auf der Seite auf die orangefarbene Schaltfläche „Save (Speichern)“.
  • Testen der Änderungen
    1. Klicken Sie auf die weiße Schaltfläche „Test“.
    2. Sie sehen die Nachricht „Execution result: succeeded (Ausführungsergebnis: erfolgreich)“ mit grünem Hintergrund.
    3. Öffnen Sie auf einer neuen Browserregisterkarte die DynamoDB Console.
    4. Klicken Sie auf der Navigationsleiste links auf „Tables (Tabellen)“.
    5. Klicken Sie auf HelloWorldDatabase, die wir früher in diesem Modul erstellt haben.
    6. Klicken Sie rechts auf die Registerkarte „Items (Elemente)“.
    7. Hier werden Elemente angezeigt, die Ihrem Testereignis entsprechen. Falls Sie unsere Beispiele verwenden, lautet die Element-ID „Ada Lovelace“.
    8. Mit jeder Ausführung der Lambda-Funktion wird Ihre DynamoDB-Tabelle aktualisiert. Falls derselbe Name verwendet wird, ändert sich nur der Zeitstempel.

Anwendungsarchitektur

Nach Abschluss von Modul 4 werfen wir einen Blick auf unsere aktuelle Architektur:

Full Stack tutorial Module Four app arch

Wir haben zwei Services in diesem Modul hinzugefügt: DynamoDB (zum Speichern) und IAM (zum sicheren Verwalten von Berechtigungen). Beide sind mit unserer Lambda-Funktion verbunden, damit diese in unsere Datenbank schreiben kann. Der letzte Schritt ist das Hinzufügen von Code zu unserem Client, damit dieser API Gateway aufrufen kann.

War das Modul hilfreich?

Vielen Dank
Bitte teilen Sie uns mit, was Ihnen gefallen hat.
Es tut uns leid Sie zu enttäuschen
Ist etwas veraltet, verwirrend oder ungenau? Bitte helfen Sie uns, dieses Tutorial zu verbessern, indem Sie Feedback geben.

Einrichten der Interaktivität der Website