En este módulo vamos a utilizar AWS Lambda y Amazon DynamoDB para crear un proceso de backend destinado a administrar las solicitudes de su aplicación web. La aplicación de navegador que implementó en el primer módulo permite a los usuarios solicitar el envío de un objeto Unicorn a una ubicación de su elección. Para responder a esas solicitudes, el código JavaScript que se ejecuta en el navegador deberá invocar a un servicio que se ejecuta en la nube.

Serverless_Web_App_LP_assets-04

Va a implementar una función Lambda que se invocará cada vez que un usuario solicite un objeto Unicorn. La función seleccionará un elemento Unicorn de la flota, registrará la solicitud en una tabla de DynamoDB y, después, responderá a la aplicación front-end con detalles acerca del elemento Unicorn que se envía.

La función se invoca desde el navegador con Amazon API Gateway. Implementará dicha conexión en el siguiente módulo. Para este módulo, simplemente probará su 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 que se indican a continuación para crear su proceso de backend sin servidor. Haga clic en cada uno de los números de paso para ampliar la sección correspondiente.

  • Paso 1. Crear una tabla de Amazon DynamoDB

    Utilice la consola de Amazon DynamoDB para crear una nueva tabla de DynamoDB. Llame a su tabla Rides 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 los ID proporcionados exactamente. Utilice la configuración predeterminada para el resto de las opciones.

    Una vez creada la tabla, anote el ARN para utilizarlo en el paso siguiente.


    1. En la consola de administración de AWS, elija Services (Servicios) y, a continuación, seleccione DynamoDB bajo Databases (Bases de datos).

    2. Seleccione Create table (Crear tabla).

    3. Escriba Rides como Table name (Nombre de la tabla) . Este campo distingue entre mayúsculas y minúsculas.

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

    5. Seleccione la casilla Use default settings (Usar configuración predeterminada) y elija Create (Crear).

    6. Desplácese hasta la parte inferior de la sección Overview (Información general) de su nueva tabla y anote el ARN. Lo usará en la sección siguiente.

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

    Cada función Lambda tiene un rol de IAM asociado. Este rol define con qué otros servicios de AWS se permite interactuar a la función. Para este taller, deberá crear un rol de IAM que conceda a su función Lambda permisos de escritura de registros en Amazon CloudWatch Logs y acceso de escritura de elementos en su tabla de DynamoDB.

    Utilice la consola de IAM para crear un nuevo rol. Asígnele el nombre WildRydesLambda y seleccione AWS Lambda como tipo de rol. 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.

    Asocie la política administrada llamada AWSLambdaBasicExecutionRole a esta función para otorgar los permisos necesarios de CloudWatch Logs. Asimismo, cree una política insertada personalizada para el rol que permita la acción ddb:PutItem para la tabla que creó en la sección anterior.


    1. En la consola de administración de AWS, haga clic en Services (Servicios) y, a continuación, seleccione IAM en la sección Security, Identity & Compliance (Seguridad, identidad y conformidad).

    2. Seleccione Roles (Roles) en la barra de navegación izquierda y, después, elija Create New Role (Crear nuevo rol).

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

      Nota: al seleccionar un tipo de rol, se crea automáticamente una política de confianza para este que permite a los servicios de AWS asumir este rol en su nombre. Si creara este rol con la CLI, AWS CloudFormation u otro mecanismo, debería especificar una política de confianza directamente.

    4. Empiece a escribir AWSLambdaBasicExecutionRole en el cuadro de texto Filter (Filtro) y seleccione la casilla junto a dicho rol.

    5. Elija Next Step (Paso siguiente).

    6. Escriba WildRydesLambda para Role Name (Nombre de rol).

    7. Elija Create Role (Crear rol).

    8. Escriba WildRydesLambda en el cuadro de filtro de la página Roles y elija el rol 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 el cuadro de búsqueda con el nombre Find a service (Buscar un servicio) y seleccione DynamoDB cuando aparezca.

    12. Elija Select actions (Seleccionar acciones).

    13. Primero, escriba PutItem en el cuadro de búsqueda con el nombre Filter actions (Filtrar acciones) y seleccione la casilla ubicada junto a 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 (Especificar ARN para la tabla) y elija Add (Añadir).

    17. Elija Review Policy (Revisar la política)

    18. Escriba DynamoDBWriteAccess como nombre de la política y elija Create policy (Crear política).

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

    AWS Lambda ejecutará su código como respuesta a eventos tales como una solicitud HTTP. En este paso, vamos a crear la función principal que procesará las solicitudes API de la aplicación web para enviar un objeto Unicorn. En el módulo siguiente utilizaremos Amazon API Gateway a fin de crear una API RESTful para exponer un punto de enlace HTTP que se puede invocar desde los navegadores de los usuarios. Después, conectará a dicha API la función Lambda que haya creado en este paso, a fin de crear un backend plenamente funcional para su aplicación web.

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

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


    1. Elija Services (Servicios) y, a continuación, seleccione Lambda en la sección Compute (Computación).

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

    3. Mantenga seleccionada la tarjeta predeterminada Author from scratch (Crear de cero).

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

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

    6. Asegúrese de que la opción Choose an existing role (Elegir un rol existente) esté seleccionada en el menú desplegable Role (Rol).

    7. Seleccione WildRydesLambda en el menú desplegable Existing Role (Rol 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 por el contenido de requestUnicorn.js.

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

  • Paso 4. Probar la implementación

    En este módulo, probará la función que ha creado mediante la consola de AWS Lambda. En el módulo siguiente, añadirá una API REST con API Gateway para poder invocar su función desde la aplicación basada en navegador que 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. Mantenga seleccionada la opción Create new test event (Crear nuevo evento de prueba).

    3. Escriba TestRequestEvent en el campo Event name (Nombre del 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 la opción TestRequestEvent seleccionada 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 se ha realizado correctamente y que el resultado de la función es similar al siguiente:

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