Tutorial: Uso de Lambda con API Gateway
En este tutorial, se crea una API de REST a través la cual invoca una función de Lambda mediante una solicitud HTTP. Su función de Lambda realizará operaciones de creación, lectura, actualización y eliminación (CRUD) en una tabla de DynamoDB. Se proporciona esta función a modo de demostración, pero aprenderá a configurar una API de REST de API Gateway que pueda invocar cualquier función de Lambda.

El uso de API Gateway proporciona a los usuarios un punto de conexión seguro en HTTP para invocar la función de Lambda y puede ayudar a gestionar grandes volúmenes de llamadas a su función al limitar el tráfico, validar y autorizar automáticamente las llamadas a la API. API Gateway también proporciona controles de seguridad flexibles mediante AWS Identity and Access Management (IAM) y Amazon Cognito. Esto resulta útil para los casos de uso en los que se requiere una autorización previa para las llamadas a la aplicación.
sugerencia
Lambda ofrece dos formas de invocar la función a través de un punto de conexión HTTP: API Gateway y URL de función de Lambda. Si no está seguro de cuál es el mejor método para el caso, consulte Selección de un método para invocar una función de Lambda mediante una solicitud HTTP.
Para completar este tutorial, pasará por las siguientes etapas:
-
Cree y configure una función de Lambda en Python o Node.js para realizar operaciones en una tabla de DynamoDB.
-
Cree una API de REST en API Gateway para conectarse a la función de Lambda.
-
Cree una tabla de DynamoDB y pruébela con la función de Lambda en la consola.
-
Despliegue su API y pruebe la configuración completa con curl en una terminal.
Al completar estas etapas, aprenderá a utilizar API Gateway para crear un punto de conexión en HTTP que pueda invocar de forma segura una función de Lambda a cualquier escala. También aprenderá a implementar su API, a probarla en la consola y a enviar una solicitud HTTP mediante una terminal.
Creación de una política de permisos
Para poder crear un rol de ejecución para la función de Lambda, primero debe crear una política de permisos que permita a la función acceder a los recursos de AWS necesarios. Para este tutorial, la política le permite a Lambda realizar operaciones de CRUD en una tabla de DynamoDB y escribir en Registros de Amazon CloudWatch.
Para crear la política de
-
Abra la página de Policies (Políticas)
de la consola de IAM. -
Elija Crear política.
-
Elija la pestaña JSON y pegue la siguiente política personalizada en el editor JSON.
-
Elija Siguiente: Etiquetas.
-
Elija Siguiente: Revisar.
-
En Review policy (Revisar política), para el Name (Nombre) de la política, ingrese
lambda-apigateway-policy
. -
Seleccione Crear política.
Creación de un rol de ejecución
Un rol de ejecución es un rol de AWS Identity and Access Management (IAM) que concede a la función de Lambda permiso para acceder a recursos y Servicios de AWS. Para permitir que la función realice operaciones en una tabla de DynamoDB, adjuntará la política de permisos que creó en el paso anterior.
Para crear una función de ejecución y adjuntar su política de permisos personalizada
-
Abra la página Roles
en la consola de IAM. -
Seleccione Crear rol.
-
Para el tipo de entidad de confianza, seleccione Servicio de AWS y, para el caso de uso, elija Lambda.
-
Elija Siguiente.
-
En el cuadro de búsqueda de políticas, escriba
lambda-apigateway-policy
. -
En los resultados de búsqueda, seleccione la política que ha creado (
lambda-apigateway-policy
), y luego Next (Siguiente). -
En Role details (Detalles del rol), introduzca
lambda-apigateway-role
en Role name (Nombre del rol) y, luego, elija Create role (Crear rol).
Crear la función de Lambda
-
Abra la página Funciones
de la consola de Lambda y elija Crear función. -
Elija Crear desde cero.
-
En Nombre de la función, introduzca
LambdaFunctionOverHttps
. -
En tiempo de ejecución, elija el tiempo de ejecución de Node.js o Python más reciente.
-
En Permissions (Permisos), expanda Change default execution role(Cambiar rol de ejecución predeterminado).
-
Elija Usar un rol existente y, a continuación, seleccione el rol
lambda-apigateway-role
que creó antes. -
Seleccione Creación de función.
-
En el panel Código de fuente, sustituya el código predeterminado por el siguiente código de Node.js o Python.
nota
En este ejemplo, el nombre de la tabla de DynamoDB se define como una variable en el código de la función. En la aplicación real, la mejor práctica es pasar este parámetro como variable de entorno y evitar codificar el nombre de la tabla. Para obtener más información, consulte Uso de variables de entorno de AWS Lambda.
-
En la sección IMPLEMENTAR elija Implementar para actualizar el código de la función:
Prueba de la función
Antes de integrar la función con API Gateway, confirme que la ha implementado de forma correcta. Utilice la consola de Lambda para enviar un evento de prueba a su función.
-
En la página de la consola de Lambda para su función, seleccione la pestaña Prueba.
-
Desplácese a la sección Evento JSON y sustituya el evento predeterminado con el siguiente. Este evento coincide con la estructura esperada por la función de Lambda.
{ "operation": "echo", "payload": { "somekey1": "somevalue1", "somekey2": "somevalue2" } }
-
Seleccione Probar.
-
En Ejecutar la función: se realizó correctamente, expanda Detalles. Debería ver la siguiente respuesta:
{ "somekey1": "somevalue1", "somekey2": "somevalue2" }
Creación de una API REST mediante API Gateway
En este paso, crea la API de REST de API Gateway que utilizará para invocar la función de Lambda.
Para crear la API
-
Abra la consola de API Gateway
. -
Seleccione Create API (Crear API).
-
En el cuadro REST API (API de REST), elija Build (Crear).
-
En Detalles de la API, deje seleccionada la opción Nueva API y, en Nombre de la API, ingrese
DynamoDBOperations
. -
Seleccione Create API (Crear API).
Creación de un recurso en su API de REST.
Para agregar un método HTTP a su API, primero debe crear un recurso para que funcione ese método. Aquí, se crea el recurso para administrar la tabla de DynamoDB.
Para crear el recurso
-
En la consola de puerta de enlace de la API
, en la página Recursos de su API, seleccione Crear recurso. -
En Detalles del recurso, ingrese el nombre del recurso
DynamoDBManager
. -
Elija Create Resource (Crear recurso).
Creación de un método HTTP POST.
En este paso, creará un método (POST
) para su recurso DynamoDBManager
. Debe vincular este método POST
a la función de Lambda para que cuando el método reciba una solicitud HTTP, API Gateway invoca la función de Lambda.
nota
A los efectos de este tutorial, se utiliza un método HTTP (POST
) para invocar una única función de Lambda que lleva a cabo todas las operaciones de la tabla de DynamoDB. En una aplicación real, la práctica recomendada es utilizar una función de Lambda y un método HTTP diferente para cada operación. Para obtener más información, consulte The Lambda monolith
Para crear el método POST
-
En la página Recursos de su API, asegúrese de que el recurso
/DynamoDBManager
esté resaltado. A continuación, en el panel Métodos, seleccione Crear método. -
En Tipo de método, elija POST.
-
En Tipo de integración, seleccione función de Lambda.
-
Para la función de Lambda, elija el nombre de recurso de Amazon (ARN) para la función (
LambdaFunctionOverHttps
). -
Elija Crear método.
Creación de una tabla de DynamoDB
Cree una tabla de DynamoDB vacía en la que la función de Lambda realizará operaciones CRUD.
Creación de la tabla de DynamoDB
-
Seleccione Create table (Creación de tabla).
-
En Table details (Detalles de la tabla), haga lo siguiente:
-
En Nombre de la tabla, introduzca
lambda-apigateway
. -
En Partition key (Clave de partición), ingrese
id
y mantenga el tipo de datos establecido como String (Cadena).
-
-
En Settings (Configuración), mantenga los valores predeterminados en Default settings (Configuración predeterminada).
-
Seleccione Create table (Creación de tabla).
Pruebe la integración de API Gateway, Lambda y DynamoDB.
Ya está listo para probar la integración del método de API de API Gateway con la función de Lambda y la tabla de DynamoDB. Con la consola de API Gateway, envíe las solicitudes directamente a su método POST
mediante la función de prueba de la consola. En este paso, primero use una operación create
para agregar un nuevo elemento a la tabla de DynamoDB y, a continuación, use una operación update
para modificar el elemento.
Prueba 1: Crear un nuevo elemento en la tabla de DynamoDB
-
En la consola de API Gateway
, elija su API ( DynamoDBOperations
). -
Elija el método POST debajo del recurso
DynamoDBManager
. -
Elija la pestaña Prueba. Puede que tenga que elegir el botón de flecha hacia la derecha para mostrar la pestaña.
-
En Método de prueba, deje vacías las cadenas de consulta y los encabezados. En Cuerpo de la solicitud, pegue el siguiente JSON:
{ "operation": "create", "payload": { "Item": { "id": "1234ABCD", "number": 5 } } }
-
Seleccione Probar.
Los resultados que se muestran al finalizar la prueba deben mostrar el estado
200
. Este código de estado indica que la operacióncreate
se ha realizado correctamente.Para confirmarlo, verifique que ahora su tabla de DynamoDB contenga un nuevo elemento.
-
Abra la página Tables
(Tablas) en la consola de DynamoDB y elija la tabla lambda-apigateway
. -
Elija Explore table items (Explorar elementos de la tabla). En el panel Items returned (Devolución de elementos), debería ver un elemento con el id
1234ABCD
y el número de5
. Ejemplo:
Prueba 2: Actualización del elemento de la tabla de DynamoDB
-
En la consola de la puerta de enlace de API
, vuelva a la pestaña Prueba del método POST. -
En Método de prueba, deje vacías las cadenas de consulta y los encabezados. En Cuerpo de la solicitud, pegue el siguiente JSON:
{ "operation": "update", "payload": { "Key": { "id": "1234ABCD" }, "UpdateExpression": "SET #num = :newNum", "ExpressionAttributeNames": { "#num": "number" }, "ExpressionAttributeValues": { ":newNum": 10 } } }
-
Seleccione Probar.
Los resultados que se muestran cuando finaliza la prueba deben mostrar el estado
200
. Este código de estado indica que la operación deupdate
se ha realizado correctamente.Para confirmarlo, compruebe que el elemento de la tabla de DynamoDB se haya modificado.
-
Abra la página Tables
(Tablas) en la consola de DynamoDB y elija la tabla lambda-apigateway
. -
Elija Explore table items (Explorar elementos de la tabla). En el panel Items returned (Devolución de elementos), debería ver un elemento con el id
1234ABCD
y el número de10
.
Implementar la API
Para que un cliente llame a la API, debe crear una implementación y una etapa asociada. La etapa representa una imagen instantánea de su API, incluidos sus métodos e integraciones.
Para implementar la API
-
Abra la página API de la consola de API Gateway
y seleccione la API de DynamoDBOperations
. -
En la página Recursos de su API, seleccione Implementar la API.
-
Para la Etapa de implementación, seleccione *Nueva etapa* y, en Nombre de etapa, introduzca
test
. -
Elija Implementar.
-
En el panel Editor de etapas de prueba, copie la URL de invocación. Lo utilizará en el siguiente paso para invocar su función mediante una solicitud HTTP.
Utilice curl para invocar tu función mediante solicitudes HTTP.
Ahora puede invocar la función de Lambda al emitir una solicitud HTTP a la API. En este paso, creará un elemento nuevo en la tabla de DynamoDB y, a continuación, lo someterá a operaciones de lectura, actualización y eliminación.
Para crear un elemento en la tabla de DynamoDB con curl
-
Ejecute el siguiente comando
curl
por medio de la URL de invocación que copió en el paso anterior. Este comando utiliza las siguientes opciones:-
-H
: añada un encabezado personalizado a la solicitud. Aquí, se especifica el tipo de contenido como JSON. -
-d
: envía los datos en el cuerpo de la solicitud. Esta opción usa un método HTTP POST de forma predeterminada.
Si la operación se realizó correctamente, debería ver una respuesta con el código de estado HTTP 200.
-
-
También puede utilizar la consola de DynamoDB para comprobar que el nuevo elemento esté en la tabla con las siguientes acciones:
-
Abra la página Tables
(Tablas) en la consola de DynamoDB y elija la tabla lambda-apigateway
. -
Elija Explore table items (Explorar elementos de la tabla). En el panel Items returned (Devolución de elementos), debería ver un elemento con el id
5678EFGH
y el número15
.
-
Para leer el elemento en la tabla de DynamoDB con curl
-
Ejecute el siguiente comando
curl
para leer el valor del elemento que acaba de crear. Utilice su propia URL de invocación.Debería ver uno de los siguientes resultados dependiendo de si eligió el código de función Node.js o Python:
Para actualizar el elemento en la tabla de DynamoDB con curl
-
Ejecute el siguiente comando
curl
para actualizar el elemento que acaba de crear cambiando el valornumber
. Utilice su propia URL de invocación. -
Para confirmar que se ha actualizado el valor de
number
correspondiente al elemento, ejecute otro comando de lectura:
Para eliminar el elemento en la tabla de DynamoDB con curl
-
Si lo desea, ejecute el siguiente comando para eliminar el
curl
que ha creado. Utilice su propia URL de invocación. Confirme que la operación de eliminación se ha realizado correctamente. En el panel Elementos devueltos de la página Explorar elementos de la consola de DynamoDB, verifique que el elemento con id
5678EFGH
ya no se encuentre en la tabla.
Elimine sus recursos (opcional)
A menos que desee conservar los recursos que creó para este tutorial, puede eliminarlos ahora. Si elimina los recursos de AWS que ya no utiliza, evitará gastos innecesarios en su Cuenta de AWS.
Cómo eliminar la función de Lambda
-
Abra la página de Funciones
en la consola de Lambda. -
Seleccione la función que ha creado.
-
Elija Acciones, Eliminar.
-
Escriba
confirm
en el campo de entrada de texto y elija Delete(Eliminar).
Cómo eliminar el rol de ejecución
-
Abra la página Roles
en la consola de IAM. -
Seleccione el rol de ejecución que creó.
-
Elija Eliminar.
-
Si desea continuar, escriba el nombre del rol en el campo de entrada de texto y elija Delete (Eliminar).
Para eliminar la API
-
Abra la página API
de la consola de API Gateway. -
Seleccione la API que ha creado.
-
Elija Actions (Acciones), Delete (Eliminar).
-
Elija Eliminar.
Para eliminar una tabla de DynamoDB
-
Abra la página Tables (Tablas)
en la consola de DynamoDB. -
Seleccione la tabla que ha creado.
-
Elija Eliminar.
-
Escriba
delete
en el cuadro de texto. -
Elija Delete table (Eliminar tabla).