In questo modulo utilizzerai AWS Lambda e Amazon DynamoDB per creare un processo di back-end per gestire le richieste per la tua applicazione Web. L'applicazione browser distribuita nel primo modulo consente agli utenti di richiedere che un unicorno venga inviato a una destinazione di loro scelta. Per soddisfare tali richieste, il JavaScript in esecuzione nel browser dovrà richiamare un servizio in esecuzione nel cloud.

Serverless_Web_App_LP_assets-04

È possibile implementare una funzione Lambda che verrà richiamata ogni volta che un utente richiederà un unicorno. La funzione selezionerà un unicorno fra quelli disponibili, registrerà la richiesta in una tabella DynamoDB e quindi risponderà alle applicazioni front-end con i dettagli sull'unicorno inviato.

La funzione viene richiamata dal browser utilizzando Amazon API Gateway. È possibile implementare tale connessione nel modulo successivo. Per questo modulo testerai solo la tua funzione in isolamento.

Tempo di completamento: 30 minuti

Servizi utilizzati: AWS Lambda, Amazon DynamoDB


Segui i passaggi indicati nelle istruzioni seguenti per creare il tuo processo di back-end serveless. Fai clic sul numero della fase per espandere la sezione.

  • Fase 1. Crea una tabella Amazon DynamoDB

    Utilizza la console di Amazon DynamoDB per creare una nuova tabella DynamoDB. Chiama la tabella Rides e assegna una chiave di partizione di tipo String chiamata RideId. Il nome della tabella e la chiave di partizione distinguono fra maiuscole e minuscole. Assicurati di utilizzare gli ID esatti forniti. Utilizza i valori predefiniti per tutte le altre impostazioni.

    Dopo aver creato la tabella, annota l'ARN per la fase successiva.


    1. Nella Console di gestione AWS, scegli Services (Servizi) quindi seleziona DynamoDB sotto Databases (Database).

    2. Scegli Create table (Crea tabella).

    3. Immetti Rides in Table name. Nota: questo campo fa distinzione tra minuscole e maiuscole.

    4. Immetti RideId nel campo Partition key e seleziona il tipo di chiave String. Questo campo è sensibile alle maiuscole.

    5. Spunta la casella di controllo Use default settings (Usa impostazioni predefinite) e scegli Create (Crea).

    6. Vai fino in fondo alla sezione Panoramica della tua nuova tabella e annota l'ARN. Lo utilizzerai nella prossima sezione.

  • Fase 2. Crea un ruolo IAM per la tua funzione Lambda

    Ogni funzione Lambda ha un ruolo IAM associato. Questo ruolo definisce con quali altri servizi AWS la funzione può interagire. Ai fini di questo workshop, dovrai creare un ruolo IAM che concede alla funzione Lambda il permesso di scrivere i log di Amazon CloudWatch Logs e accedere per scrivere le voci nella tabella DynamoDB.

    Utilizza la console IAM per creare un nuovo ruolo. Assegna il nome WildRydesLambda e seleziona il tipo di ruolo AWS Lambda. 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.

    Allega al ruolo la policy gestita AWSLambdaBasicExecutionRole per assegnare le autorizzazioni necessarie. Crea inoltre una policy inline per il ruolo che consenta l'operazione ddb:PutItem sulla tabella creata nella sezione precedente.


    1. Nella Console di gestione AWS, fai clic su Services (Servizi) e quindi scegli IAM nella sezione Sicurezza, identità e conformità.

    2. Seleziona Roles (Ruoli) nella barra di navigazione a sinistra e scegli Create New Role (Crea nuovo ruolo).

    3. Seleziona Lambda per il tipo di ruolo dal gruppo AWS service, quindi fai clic su Next: Permissions.

      Nota: la selezione di un tipo di ruolo crea automaticamente una trust policy per il tuo ruolo che consente ai servizi AWS di assumersi questo ruolo a tuo nome. Se avessi creato questo ruolo utilizzando la CLI, AWS CloudFormation o un altro sistema, specificheresti una trust policy direttamente.

    4. Inizia a digitare AWSLambdaBasicExecutionRole nella casella di testo Filter e seleziona la casella accanto a tale ruolo.

    5. Seleziona Next Step.

    6. Digita WildRydesLambda nel campo Role Name.

    7. Seleziona Create Role.

    8. Digita WildRydesLambda nella casella di filtro nella pagina dei ruoli e scegli il ruolo che hai appena creato.

    9. Nella scheda Permissions, seleziona il collegamento Add inline policy nell'angolo inferiore destro per creare una nuova policy inline.

    10. Seleziona Choose a service.

    11. Inizia digitare DynamoDB nella casella di ricerca Find a service e seleziona DynamoDB appena compare.

    12. Seleziona Select actions.

    13. Inizia a digitare PutItem nella casella di ricerca Filter actions e seleziona la casella accanto a PutItem appena compare.

    14. Seleziona la sezione Resources

    15. Con l'opzione Specific selezionata, fai clic sul collegamento Add ARN nella sezione Table.

    16. Incolla il codice ARN della tabella creata nella sezione precedente nel campo Specify ARN for table, quindi seleziona Add.

    17. Seleziona Review Policy.

    18. Digita il nome policy DynamoDBWriteAccess e seleziona Create policy.

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

    AWS Lambda esegue il tuo codice in risposta a eventi come una richiesta HTTP. In questo passaggio potrai creare la funzione che elaborerà le richieste API dall'applicazione Web per l'invio di un unicorno. Nel modulo successivo utilizzerai Amazon API Gateway per creare un'API RESTful che esponga un endpoint HTTP che possa essere richiamato dai browser dei tuoi utenti. Connetterai perciò la funzione Lambda creata in questo passaggio all'API per creare un back-end completamente funzionante per la tua applicazione Web.

    Utilizza la console di AWS Lambda per creare una nuova funzione Lambda chiamata RequestUnicorn che elaborerà le richieste API. Utilizza l'esempio di implementazione requestUnicorn.js per il tuo codice funzione. È sufficiente copiare e incollare quel file nell'editor della console di AWS Lambda.

    Assicurati di configurare la tua funzione in modo che utilizzi il ruolo IAM WildRydesLambda creato nella sezione precedente.


    1. Scegli Services e seleziona Lambda nella sezione Compute.

    2. Fai clic su Create function.

    3. Mantieni selezionata la scheda Author from scratch predefinita.

    4. Digita RequestUnicorn nel campo Name.

    5. Seleziona Node.js 6.10 come Runtime.

    6. Verifica che l'opzione Choose an existing role sia selezionata nel menu a discesa Role.

    7. Seleziona WildRydesLambda nel menu a discesa Existing Role.

    8. Fai clic su Create function.

    9. Scorri fino a individuare la sezione Function code e sostituisci il codice esistente nell'editor di codice index.js con i contenuti di requestUnicorn.js.

    10. Fai clic su Save nell'angolo superiore destro della pagina.

  • Fase 4. Esegui un test dell'implementazione

    In questo modulo eseguirai un test sulla funzione che hai sviluppato utilizzando la console di AWS Lambda. Nel modulo successivo aggiungerai un'API REST con API Gateway in modo da richiamare la tua funzione dall'applicazione basata su browser che hai distribuito nel primo modulo.


    1. Dalla schermata principale di modifica della funzione, seleziona Configure test event dall'elenco a discesa Select a test event....

    2. Mantieni la selezione su Create new test event.

    3. Digita TestRequestEvent nel campo Event name.

    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. Fai clic su Create.

    2. Nella schermata principale di modifica della funzione, seleziona Test con l'opzione TestRequestEvent selezionata nel menu a discesa.

    3. Scorri la pagina verso l'alto ed espandi la sezione Details della sezione Execution result.

    4. Verifica che l'esecuzione si completi e che il risultato della funzione sia come il seguente:

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