In questo modulo, utilizzerai AWS Lambda e Amazon DynamoDB per creare un processo back-end per gestire le richieste della tua applicazione Web. L'applicazione browser che hai distribuito nel primo modulo consente agli utenti di richiedere l'invio di un unicorn a una posizione desiderata. Per soddisfare questi requisiti, il linguaggio JavaScript in esecuzione nel browser dovrà chiamare un servizio in esecuzione nel cloud.

Serverless_Web_App_LP_assets-04

Dovrai implementare una funzione Lambda che verrà chiamata ogni volta che un utente richiede un unicorn. La funzione selezionerà un unicorn dal parco istanze, registrerà la richiesta in una tabella DynamoDB e quindi risponderà all'applicazione front-end con i dettagli sull'unicorn in fase di invio.

La funzione viene chiamata dal browser utilizzando Amazon API Gateway. Dovrai implementare tale connessione nel prossimo modulo. In questo modulo, ti occuperai solo del testing della funzione in isolamento.

Tempo a disposizione per completare il modulo: 30 minuti

Servizi utilizzati: AWS Lambda, Amazon DynamoDB


Segui le istruzioni dettagliate riportate di seguito per creare il tuo processo back-end serverless. Fai clic su ogni numero di fase per espandere la sezione.

  • Fase 1. Creazione di una tabella Amazon DynamoDB

    Utilizzare la console Amazon DynamoDB per creare una nuova tabella DynamoDB. Chiamare la tabella Rides (Percorsi) e assegnarle una chiave di partizione denominata RideId (ID percorsi) con tipo stringa. Il nome della tabella e la chiave di partizione fanno distinzione tra minuscole e maiuscole. Accertarsi di utilizzare gli ID esatti forniti. Utilizzare le impostazioni predefinite per tutte le altre opzioni.

    Dopo avere creato la tabella, prendere nota dell'ARN per utilizzarlo nella fase successiva.


    1. Dalla console di gestione AWS, scegliere Services (Servizi) e selezionare DynamoDB in Databases.

    2. Selezionare Create table (Crea tabella).

    3. Immettere Rides (Percorsi) per il Table name (Nome tabella). Questo campo fa distinzione tra minuscole e maiuscole.

    4. Immettere il RideId (ID percorsi) per la Partition key (Chiave di partizione) e selezionare String (Stringa) per il tipo di chiave. Questo campo fa distinzione tra minuscole e maiuscole.

    5. Selezionare la casella Use default settings (Usa impostazioni predefinite) e scegliere Create (Crea).

    6. Scorrere fino alla parte inferiore della sezione Overview (Panoramica) della nuova tabella e annotare l'ARN. Questo verrà utilizzato nella sezione successiva.

  • Fase 2. Creazione di un ruolo IAM per la funzione Lambda

    A ogni funzione Lambda è associato un ruolo IAM, che definisce con quali altri servizi AWS alla funzione è concesso interagire. Ai fini di questo workshop, dovrai creare un ruolo IAM che conceda alla funzione Lambda l'autorizzazione a scrivere log in Amazon CloudWatch Logs e l'accesso per scrivere voci nella tabella DynamoDB.

    Utilizzare la console IAM per creare un nuovo ruolo. Assegnarle il nome WildRydesLambda e selezionare AWS Lambda come tipo di ruolo. Sarà necessario allegare le policy che concedono alla tua funzione le autorizzazioni a eseguire operazioni di scrittura in Amazon CloudWatch Logs e aggiungere voci alla tabella DynamoDB.

    Allegare la policy gestita denominata AWSLambdaBasicExecutionRole a questo ruolo per concedere le autorizzazioni CloudWatch Logs necessarie. Inoltre, creare una policy inline personalizzata per il ruolo che consenta l'operazione ddb:PutItem sulla tabella creata nella sezione precedente.


    1. Dalla console di gestione AWS, fare clic su Services (Servizi) e selezionare IAM nella sezione Security, Identity & Compliance (Sicurezza, identità e conformità).

    2. Nella barra di navigazione a sinistra, selezionare Roles (Ruoli) e scegliere Create New Role (Crea nuovo ruolo).

    3. Selezionare Lambda per il tipo di ruolo nel gruppo AWS service (Servizio AWS), quindi fare clic su Next: Permissions (Successivo: Autorizzazioni).

      Nota: la selezione di un tipo di ruolo comporta la creazione automatica di una policy di attendibilità per il ruolo che consente ai servizi AWS di assumere questo ruolo per conto tuo. Se si stava creando questo ruolo tramite CLI, AWS CloudFormation o un altro meccanismo, sarà necessario specificare direttamente una policy di attendibilità.

    4. Iniziare a digitare AWSLambdaBasicExecutionRole nella casella di testo Filter (Filtra) e selezionare la casella accanto a questo ruolo.

    5. Selezionare Next Step (Fase successiva).

    6. Immettere WildRydesLambda per il Role Name (Nome ruolo).

    7. Scegliere Create Role (Crea ruolo).

    8. Digitare WildRydesLambda nella casella di filtraggio nella pagina Roles (Ruoli), quindi scegliere il ruolo appena creato.

    9. Nella scheda Permissions (Autorizzazioni), scegliere il link Add inline policy (Aggiungi policy inline) nell'angolo inferiore destro per creare una nuova policy inline.

    10. Selezione Choose a service (Scegli un servizio).

    11. Iniziare a digitare DynamoDB nella casella di ricerca denominata Find a service (Trova un servizio), quindi selezionare DynamoDB quando viene visualizzato.

    12. Scegliere Select actions (Seleziona operazioni).

    13. Iniziare a digitare PutItem nella casella di ricerca denominata Filter actions (Filtra operazioni), quindi fare clic sulla casella accanto a PutItem quando viene visualizzato.

    14. Selezionare la sezione Resources (Risorse)

    15. Con l'opzione Specific (Specifica) selezionata, scegliere il link Add ARN (Aggiungi ARN) nella sezione table (tabella).

    16. Incollare l'ARN della tabella creata nella sezione precedente nel campo Specify ARN for table (Specifica ARN per tabella), quindi scegliere Add (Aggiungi).

    17. Scegliere Review policy (Esamina policy).

    18. Digitare DynamoDBWriteAccess per il nome della policy e scegliere Create policy (Crea policy).

  • Fase 3. Creazione di una funzione Lambda per la gestione delle richieste

    AWS Lambda eseguirà il tuo codice in risposta a eventi come una richiesta HTTP. In questa fase, procederai alla creazione della funzione principale che elaborerà le richieste API dall'applicazione Web per inviare un unicorn. Nel prossimo modulo utilizzerai Amazon API Gateway per creare un'API RESTful che esporrà un endpoint HTTP che può essere chiamato dai browser degli utenti. Quindi, collegherai la funzione Lambda creata in questa fase all'API per creare un back-end totalmente funzionale per la tua applicazione Web.

    Utilizzare la console AWS Lambda per creare una nuova funzione Lambda denominata RequestUnicorn che elaborerà le richieste API. Per il codice funzione, utilizzare l'implementazione di esempio requestUnicorn.js fornita. È sufficiente copiare dal file e incollare nell'editor della console AWS Lambda.

    Accertarsi di configurare la funzione per l'utilizzo del ruolo IAM WildRydesLambda creato nella sezione precedente.


    1. Scegliere Services (Servizi), quindi selezionare Lambda nella sezione Compute (Calcolo).

    2. Fare clic su Create function (Crea funzione).

    3. Mantenere selezionata la scheda predefinita Author from scratch (Crea da zero).

    4. Immettere RequestUnicorn nel campo Name (Nome).

    5. Selezionare Node.js 6.10 per il Runtime.

    6. Accertarsi che nell'elenco a discesa Role (Ruolo) sia selezionato Choose an existing role (Scegli un ruolo esistente).

    7. Selezionare WildRydesLambda nell'elenco a discesa Existing Role (Ruolo esistente).

    8. Fare clic su Create function (Crea funzione).

    9. Scorrere fino alla sezione Function code (Codice funzione) e sostituire il codice esistente nell'editor di codici index.js con i contenuti di requestUnicorn.js.

    10. Fare clic su "Save" ("Salva") nell'angolo superiore destro della pagina.

  • Fase 4. Verifica dell'implementazione

    In questo modulo dovrai testare la funzione che hai creato usando la console AWS Lambda. Nel prossimo modulo, procederai con l'aggiunta di un'API REST tramite API Gateway, in modo da poter chiamare la funzione dall'applicazione basata sul browser che hai distribuito nel primo modulo.


    1. Dalla schermata di modifica principale della funzione, selezionare Configure test event (Configura evento test) nell'elenco a discesa Select a test event... (Seleziona un evento test).

    2. Mantenere selezionata l'opzione Create new test event (Crea nuovo evento test).

    3. Immettere TestRequestEvent nel campoEvent name (Nome evento).

    4. Copia e incolla il seguente evento test nell'editor:

    {
        "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. Fare clic su Create (Crea).

    2. Nella schermata principale di modifica della funzione, fare clic su Test con TestRequestEvent selezionato nell'elenco a discesa.

    3. Scorrere fino all'inizio della pagina ed espandere la sezione Details (Dettagli) del riquadro Execution result (Risultato esecuzione).

    4. Verificare che l'esecuzione abbia esito positivo e che il risultato della funzione abbia l'aspetto seguente:

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