Creazione di un'applicazione Web di base

TUTORIAL

Modulo 4: Creazione di una tabella di dati

In questo modulo creerai una tabella Amazon DynamoDB e abiliterai la funzione Lambda per archiviare dati al suo interno.

Panoramica

In questo modulo andremo a creare una tabella per mantenere persistenti i dati utilizzando Amazon DynamoDB. DynamoDB è un servizio di database chiave-valore, pertanto non è necessario creare uno schema per i nostri dati. Offre prestazioni uniformi e scalabilità e non vi sono server da gestire durante il suo utilizzo.

Inoltre, utilizzeremo il servizio IAM (AWS Identity and Access Management) per fornire ai nostri servizi le autorizzazioni necessarie per interagire tra loro in modo sicuro. In particolare, consentiremo alla funzione Lambda creata nel Modulo 2 di scrivere nella tabella DynamoDB appena creata utilizzando una policy IAM. A tal fine, utilizzeremo l'SDK AWS (Python, JavaScript o Java) della nostra funzione Lambda.

Obiettivi

In questo modulo completerai le seguenti operazioni:
  • Creazione di una tabella DynamoDB con la Console di gestione AWS
  • Creazione di un ruolo e gestione delle autorizzazioni con IAM
  • Scrittura in una tabella DynamoDB con l'SDK AWS (Python, JavaScript o Java)

Concetti chiave

Persistenza dei dati: archiviazione di dati in modo da potervi accedere in futuro, indipendentemente dall'esecuzione del programma.

Database non relazionale: un database non relazionale non utilizza uno schema tabulare costituito da righe e colonne. Viene utilizzato invece un modello di archiviazione ottimizzato per i requisiti specifici del tipo di dati che vengono archiviati.

Database chiave-valore: un database chiave-valore che immagazzina i dati come un insieme di coppie di chiave-valore dove una chiave rappresenta un identificatore univoco.

Chiave primaria: il valore che identifica ciascuna parte dei dati in una tabella DynamoDB. Questo valore verrà utilizzato anche per partizionare la tabella per renderla scalabile.

Schema: l'organizzazione dei dati utilizzata come schema di creazione di un database.

SDK AWS: gli SDK AWS forniscono un set di strumenti, librerie, documentazione, codici di esempio, processi e guide che consentono agli sviluppatori di creare applicazioni software su piattaforme specifiche.

Policy IAM: un documento che definisce a quali risorse AWS ha accesso un'entità (ad esempio, servizio, utente, gruppo).

 Tempo minimo richiesto per il completamento

10 minuti

 Servizi utilizzati

 Ultimo aggiornamento

4 aprile 2023

Implementazione

    1. Accedi alla Console di Amazon DynamoDB.
    2. Assicurati di creare la tabella nella stessa regione in cui hai creato l'app Web nel modulo precedente. Questa informazione è visibile all'inizio della pagina, accanto al nome dell'account.
    3. Scegli il pulsante arancione Crea tabella.
    4. In Nome tabella, immetti HelloWorldDatabase.
    5. Nel campo Chiave di partizione, immetti ID. La chiave di partizione fa parte della chiave primaria della tabella.
    6. Lascia invariato il resto dei valori predefiniti e scegli il pulsante arancione Crea tabella.
    7. Nell'elenco delle tabelle, seleziona il nome della tabella, HelloWorldDatabase.
    8. Nella sezione Informazioni generali, visualizza Informazioni aggiuntive selezionando la freccia rivolta verso il basso.

    9. Copia il nome della risorsa Amazon (ARN). Ne avrai bisogno più avanti in questo modulo.

    1. Ora che la tabella è pronta, andiamo a modificare la nostra funzione Lambda in modo da poter scrivere dati al suo interno. In una nuova finestra del browser, apri la console di AWS Lambda.
    2. Fai clic sulla funzione creata nel Modulo 2 (se hai seguito i nostri esempi, è denominata HelloWorldFunction). Se non la vedi, controlla il menu a discesa Regione in alto a destra accanto al tuo nome per assicurarti di trovarti nella stessa Regione in cui hai creato la funzione.
    3. Aggiungeremo autorizzazioni alla funzione in modo che possa utilizzare il servizio DynamoDB e a tal fine utilizzeremo AWS Identity and Access Management (IAM).
    4. Seleziona la scheda Configurazione e seleziona Autorizzazioni dal menu a destra.
    5. Nella casella Ruolo di esecuzione, in Nome ruolo, scegli il collegamento. Si aprirà una nuova scheda del browser.
    6. Nella casella Policy di autorizzazione, apri il menu a discesa Aggiungi autorizzazioni e seleziona Crea policy in linea.
    7. Seleziona la scheda JSON.
    8. Incolla la policy seguente nell'area di testo, prestando attenzione nel sostituire l'ARN della tabella nel campo Risorsa alla riga 15:
    {
    "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. Questa policy consentirà alla funzione Lambda di leggere, modificare o eliminare voci, ma limitatamente nella tabella creata.

    10. Fai clic sul pulsante blu Esamina la policy.

    11. Accanto a Nome, inserisci HelloWorldDynamoPolicy.

    12. Fai clic sul pulsante blu Crea policy.

    13. Adesso è possibile chiudere la scheda del browser e tornare alla scheda della funzione Lambda.

    • Python
      1. Seleziona la scheda Codice e seleziona la tua funzione dal riquadro di navigazione sul lato sinistro dell'editor di codice.
      2. Sostituisci il codice della funzione con quanto segue:
      # 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 time 
      import time
      # import two packages to help us with dates and date formatting
      
      # create a DynamoDB object using the AWS SDK
      dynamodb = boto3.resource('dynamodb')
      # use the DynamoDB object to select our table
      table = dynamodb.Table('HelloWorldDatabase')
      
      # define the handler function that the Lambda service will use as an entry point
      def lambda_handler(event, context):
       # Get the current GMT time
          gmt_time = time.gmtime()
      
          # store the current time in a human readable format in a variable
          # Format the GMT time string
          now = time.strftime('%a, %d %b %Y %H:%M:%S +0000', gmt_time)
      
      
      # 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. Scegli il pulsante Implementa nella parte superiore dell'editor di codice

    • JavaScript
      1. Seleziona la scheda Codice e seleziona la tua funzione dal riquadro di navigazione sul lato sinistro dell'editor di codice.
      2. Sostituisci il codice della funzione con quanto segue:
      // 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. Scegli il pulsante Implementa nella parte superiore dell'editor di codice.

    • Java
      1. Seleziona la scheda Configurazione.
      2. Passa a Codice funzione e carica il seguente file JAR. (Ai fini di questo tutorial, salteremo la creazione del pacchetto di implementazione).
      3. Aggiorna il gestore con com.example.app.SavePersonHandler::handleRequest.
    1. Scegli il pulsante arancione Test.
    2. Dovresti visualizzare il messaggio Risultato esecuzione: completata su uno sfondo verde.
    3. In una nuova scheda del browser, apri la console di DynamoDB.
    4. Nel riquadro di navigazione a sinistra, seleziona Tabelle > Esplora elementi.
    5. Seleziona HelloWorldDatabase creato precedentemente nel modulo.
    6. Seleziona la scheda Elementi sulla destra.
    7. Gli elementi che corrispondono al tuo evento di test vengono visualizzati nella sezione Elementi restituiti. Se hai utilizzato i nostri esempi, l'ID dell'elemento sarà Hello da Lambda, Ada Lovelace o Ada Lovelace.
    8. Ogni volta che si esegue la funzione Lambda, la tabella DynamoDB viene aggiornata. Se si utilizza lo stesso nome, cambierà solo l'indicazione di data/ora.

Architettura applicativa

Ora che il Modulo 4 è completato, diamo un'occhiata alla nostra architettura corrente:

Diagramma dell'architettura che mostra i servizi ospitati nel cloud AWS, con le connessioni mostrate da utenti esterni ai servizi AWS interconnessi.

Abbiamo aggiunto due servizi nel modulo: DynamoDB (per l’archiviazione) e IAM (per la gestione sicura delle autorizzazioni). Entrambi sono collegati alla nostra funzione Lambda, pertanto questa può scrivere nel nostro database. Nella fase finale, aggiungeremo il codice al nostro client per richiamare Gateway API.

Questa pagina è stata utile?

Maggiore interattività in un'applicazione Web