En este módulo va a usar AWS Lambda y Amazon DynamoDB para crear un proceso de backend para administrar las solicitudes de su aplicación web. La aplicación del navegador que se implementó en el primer módulo permite a los usuarios solicitar que se envíe un unicornio a una ubicación de su elección. Para administrar las solicitudes, el JavaScript que se ejecuta en el navegador deberá invocar un servicio que se ejecuta en la nube.

Serverless_Web_App_LP_assets-04

Podrá implementar una función de Lambda que se invoca cada vez que un usuario solicita un unicornio. La función seleccionará un unicornio de la flota, registrará la solicitud en una tabla de DynamoDB y, a continuación, responderá a la aplicación frontend con detalles sobre el unicornio que se envía.

La función se invoca desde el navegador con Amazon API Gateway. Podrá implementar esa conexión en el siguiente módulo. En este módulo se acaba de probar la función de forma aislada.

Tiempo para completar el módulo: 30 minutos

Servicios utilizados: AWS Lambda, Amazon DynamoDB


Siga las instrucciones paso a paso detalladas a continuación para crear su proceso de backend sin servidor. Haga clic en cada número de paso para expandir la sección.

  • Paso 1. Crear una tabla de Amazon DynamoDB

    Utilice la consola de Amazon DynamoDB para crear una nueva tabla de DynamoDB. Coloque el nombre Rides a su tabla y asígnele una clave de partición llamada RideId con el tipo String (Cadena). El nombre de la tabla y la clave de partición distinguen entre mayúsculas y minúsculas. Asegúrese de utilizar el ID exacto. Utilice la configuración predeterminada para el resto de configuración.

    Una vez que haya creado la tabla, tenga en cuenta el ARN de uso en el siguiente paso.


    1. Desde la consola de administración de AWS, elija Servicios a continuación, seleccione DynamoDB en Base de datos.

    2. Elija Crear tabla.

    3. Introduzca Rides en Table name (Nombre de tabla). Este campo distingue entre mayúsculas y minúsculas.

    4. Introduzca RideId en el campo Partition key (Clave de partición) y seleccione String (Cadena) como tipo de clave. Este campo distingue entre mayúsculas y minúsculas.

    5. Marque la casilla Utilizar la configuración predeterminada y seleccione Crear.

    6. Vaya a la parte inferior de la sección Descripción general de la nueva tabla y anote el ARN. Utilizará esto en la próxima sección.

  • Paso 2. Crear una función de IAM para su función de Lambda

    Cada función de Lambda tiene un rol de IAM asociado. Este rol define qué otros servicios de AWS pueden interactuar con la función. A efectos de este taller, tendrá que crear una función de IAM que otorgue permiso a la función de Lambda para escribir registros en Amazon CloudWatch Logs y el acceso a los elementos de escritura en su tabla de DynamoDB.

    Utilice la consola de IAM para crear una nueva función. Asígnele el nombre WildRydesLambda y seleccione AWS Lambda como tipo de función. Tendrá que adjuntar políticas que le otorguen a la función permisos para escribir en Amazon CloudWatch Logs y colocar elementos en su tabla de DynamoDB.

    Adjunte la política administrada llamada AWSLambdaBasicExecutionRole a esta función para otorgar los permisos de CloudWatch Logs necesarios. Además, cree una política interna personalizada para su función que permita la acción ddb:PutItem para la tabla que creó en la sección anterior.


    1. Desde la consola de administración de AWS, haga clic en Servicios luego seleccione IAM en la sección Seguridad, identidad y conformidad.

    2. Seleccione Funciones en la barra de navegación izquierda y, a continuación, elija Crear nueva función.

    3. Seleccione Lambda como tipo de función en el grupo AWS service (Servicio de AWS) y, a continuación, haga clic en Next: Permissions (Siguiente: Permisos).

      Nota: Seleccionar un tipo de función crea automáticamente una política de confianza de la función que permite a los servicios de AWS asumir esta función en su nombre. Si estuviera creando esta función con CLI, AWS CloudFormation u otro mecanismo, debería especificar una política de confianza directamente.

    4. Primero escriba AWSLambdaBasicExecutionRole en la casilla de texto Filter (Filtro) y marque la casilla ubicada junto a dicha función.

    5. Seleccione Next Step (Siguiente paso).

    6. Introduzca WildRydesLambda en la sección Role Name (Nombre de función).

    7. Elija Create Role (Crear función).

    8. Escriba WildRydesLambda en la casilla de filtro en la página Roles (Funciones) y elija la función que acaba de crear.

    9. En la pestaña Permissions (Permisos), seleccione el enlace Add inline policy (Añadir política insertada) ubicado en la esquina inferior derecha para crear una política insertada nueva.

    10. Seleccione Choose a service (Elegir un servicio).

    11. En primer lugar, escriba DynamoDB en la casilla de búsqueda con el nombre Find a service (Encontrar un servicio) y seleccione DynamoDB cuando aparezca.

    12. Elija Select actions (Seleccionar acciones).

    13. Primero, escriba PutItem en la casilla de búsqueda con el nombre Filter actions (Filtrar acciones) y seleccione la casilla ubicada al lado de PutItem cuando aparezca.

    14. Seleccione la sección Resources (Recursos). 

    15. Con la opción Specific (Específico) seleccionada, elija Add ARN link (Añadir enlace ARN) en la sección de la tabla.

    16. Pegue el ARN de la tabla que creó en la sección anterior en el campo Specify ARN for table (Específicar ARN para tabla) y elija Add (Añadir).

    17. Elija Review policy (Revisar política).

    18. Introduzca DynamoDBWriteAccess como el nombre de la política y seleccione Create policy (Crear política).

  • Paso 3. Crear una función de Lambda para administrar solicitudes

    AWS Lambda ejecutará su código como respuesta a eventos, como una solicitud HTTP. En este paso va a construir la función principal que procesará las solicitudes de API de la aplicación web para enviar un unicornio. En el siguiente módulo va a utilizar Amazon API Gateway para crear un API RESTful que expondrá un punto de enlace HTTP que se puede invocar desde los navegadores de los usuarios. A continuación, conectará la función de Lambda que creó en este paso a la API para crear un backend completamente funcional para su aplicación web.

    Use la consola de AWS Lambda para crear una función de Lambda nueva llamada RequestUnicorn que procesará las solicitudes de las API. Utilice la implementación de ejemplo proporcionada requestUnicorn.js para su código de función. Solo tiene que copiar y pegar desde dicho archivo en el editor de la consola de AWS Lambda.

    Asegúrese de configurar su función para poder usar la función de IAM WildRydesLambda que creó en la sección anterior.


    1. Elija Services (Servicios), luego seleccione Lambda en la sección Compute (Informática).

    2. Haga clic en Create function (Crear función).

    3. Conserve seleccionada la tarjeta predeterminada Author from scratch (Crear desde cero).

    4. Escriba RequestUnicorn en el campo Name (Nombre).

    5. Seleccione Node.js 6.10 en Runtime (Tiempo de ejecución).

    6. Asegúrese de que la opción Choose an existing role (Seleccionar una función existente) esté seleccionada en el menú desplegable Role (Función).

    7. Seleccione WildRydesLambda en el menú desplegable Existing Role (Función existente).

    8. Haga clic en Create function (Crear función).

    9. Desplácese hacia abajo hasta la sección Function code (Código de función) y reemplace el código existente en el editor de código index.js con el contenido de requestUnicorn.js.

    10. Haga clic en "Save" (Guardar) en la esquina superior derecha de la página.

  • Paso 4. Pruebe su implementación

    En este módulo podrá probar la función que construyó mediante la consola de AWS Lambda. En el siguiente módulo añadirá una API REST con API Gateway para que pueda invocar la función de la aplicación basada en navegador que se implementó en el primer módulo.


    1. En la pantalla de edición principal de la función, seleccione Configure test event (Configurar evento de prueba) en el menú desplegable Select a test event... (Seleccionar un evento de prueba...).

    2. Conserve la opción Create new test event (Crear evento de prueba nuevo) seleccionada.

    3. Introduzca TestRequestEvent en el campo Event name (Nombre de evento).

    4. Copie y pegue el siguiente evento de prueba en el 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. Haga clic en Create (Crear).

    2. En la pantalla de edición de funciones principal, haga clic en Test (Prueba) con TestRequestEvent seleccionado en el menú desplegable.

    3. Desplácese hacia la parte superior de la página y amplíe la sección Details (Detalles) de la sección Execution result (Resultado de la ejecución).

    4. Compruebe que la ejecución haya tenido éxito y que el resultado de la función sea así:

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