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.
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.
Secciones
- Requisitos previos
- Crear una política de permisos
- Creación de un rol de ejecución
- Creación de la función
- Invoque la función de utilizando el comando de AWS CLI.
- Creación de una API REST mediante API Gateway
- Creación de un recurso en su API de REST.
- Creación de un método HTTP POST.
- Creación de una tabla de DynamoDB
- Pruebe la integración de API Gateway, Lambda y DynamoDB.
- Implementar la API
- Utilice curl para invocar tu función mediante solicitudes HTTP.
- Elimine sus recursos (opcional)
Requisitos previos
Si no dispone de una Cuenta de AWS, siga estos pasos para crear una.
Procedimiento para registrarse en Cuenta de AWS
Abra https://portal.aws.amazon.com/billing/signup
. Siga las instrucciones que se le indiquen.
Parte del procedimiento de registro consiste en recibir una llamada telefónica e indicar un código de verificación en el teclado del teléfono.
Al registrarse en una Cuenta de AWS, se crea un Usuario raíz de la cuenta de AWS. El usuario raíz tendrá acceso a todos los Servicios de AWS y recursos de esa cuenta. Como práctica recomendada de seguridad, asigne acceso administrativo a un usuario y utilice únicamente el usuario raíz para realizar tareas que requieren acceso de usuario raíz.
AWS le enviará un correo electrónico de confirmación cuando complete el proceso de registro. Puede ver la actividad de la cuenta y administrarla en cualquier momento entrando en https://aws.amazon.com/
Después de registrarse para obtener una Cuenta de AWS, proteja su Usuario raíz de la cuenta de AWS, habilite AWS IAM Identity Center y cree un usuario administrativo para no usar el usuario raíz en las tareas cotidianas.
Protección de Usuario raíz de la cuenta de AWS
-
Inicie sesión en AWS Management Console
como propietario de la cuenta; para ello, elija Usuario raíz e introduzca el correo electrónico de su Cuenta de AWS. En la siguiente página, escriba su contraseña. Para obtener ayuda para iniciar sesión con el usuario raíz, consulte Iniciar sesión como usuario raíz en la Guía del usuario de AWS Sign-In.
-
Active la autenticación multifactor (MFA) para el usuario raíz.
Para obtener instrucciones, consulte Habilitación de un dispositivo MFA virtual para su usuario raíz de la Cuenta de AWS (consola) en la Guía del usuario de IAM.
Creación de un usuario con acceso administrativo
-
Activar IAM Identity Center.
Consulte las instrucciones en Activar AWS IAM Identity Center en la Guía del usuario de AWS IAM Identity Center.
-
En IAM Identity Center, conceda acceso administrativo a un usuario.
Para ver un tutorial sobre cómo usar Directorio de IAM Identity Center como origen de identidad, consulte Configuración del acceso de los usuarios con el Directorio de IAM Identity Center predeterminado en la Guía del usuario de AWS IAM Identity Center.
Inicio de sesión como usuario con acceso de gestionador
-
Para iniciar sesión con el usuario de IAM Identity Center, use la URL de inicio de sesión que se envió a la dirección de correo electrónico cuando creó el usuario de IAM Identity Center.
Para obtener ayuda para iniciar sesión con un usuario de IAM Identity Center, consulte Inicio de sesión en el portal de acceso de AWS en la Guía del usuario de AWS Sign-In.
Concesión de acceso a usuarios adicionales
-
En IAM Identity Center, cree un conjunto de permisos que siga la práctica recomendada de aplicar permisos de privilegios mínimos.
Para conocer las instrucciones, consulte Create a permission set en la Guía del usuario de AWS IAM Identity Center.
-
Asigne usuarios a un grupo y, a continuación, asigne el acceso de inicio de sesión único al grupo.
Para conocer las instrucciones, consulte Add groups en la Guía del usuario de AWS IAM Identity Center.
Si aún no ha instalado AWS Command Line Interface, siga los pasos que se indican en Instalación o actualización de la versión más reciente de AWS CLI para instalarlo.
El tutorial requiere un intérprete de comandos o un terminal de línea de comando para ejecutar los comandos. En Linux y macOS, use su administrador de intérprete de comandos y paquetes preferido.
nota
En Windows, algunos comandos de la CLI de Bash que se utilizan habitualmente con Lambda (por ejemplo, zip
) no son compatibles con los terminales integrados del sistema operativo. Para obtener una versión de Ubuntu y Bash integrada con Windows, instale el subsistema de Windows para Linux
Crear 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. -
Seleccione Crear política.
-
Elija la pestaña JSON y pegue la siguiente política personalizada en el editor JSON.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt1428341300017", "Action": [ "dynamodb:DeleteItem", "dynamodb:GetItem", "dynamodb:PutItem", "dynamodb:Query", "dynamodb:Scan", "dynamodb:UpdateItem" ], "Effect": "Allow", "Resource": "*" }, { "Sid": "", "Resource": "*", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ], "Effect": "Allow" } ] }
-
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. -
Elija Creación de 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).
Más adelante en el tutorial, necesitará el nombre de recurso de Amazon (ARN) del rol que acaba de crear. En la página Roles (Roles) de la consola de IAM, seleccione el nombre de su rol (lambda-apigateway-role
) y copie el Role ARN (ARN del rol) que aparece en la página Summary (Resumen).
Creación de la función
El siguiente ejemplo de código recibe una entrada de evento de API Gateway en la que se especifica la operación que se debe realizar en la tabla de DynamoDB que creará y algunos datos de carga. Si los parámetros que recibe la función son válidos, realice la operación solicitada en la tabla.
Invoque la función de utilizando el comando de AWS CLI.
Antes de integrar la función con API Gateway, confirme que la ha implementado de forma correcta. Cree un evento de prueba que contenga los parámetros que la API de API Gateway enviará a Lambda y utilice el comando de la AWS CLI invoke
para ejecutar la función.
Para invocar la función de Lambda con el comando AWS CLI.
-
Guarde el siguiente JSON como un archivo denominado
input.txt
.{ "operation": "echo", "payload": { "somekey1": "somevalue1", "somekey2": "somevalue2" } }
-
Ejecute el siguiente comando AWS CLI de la
invoke
.aws lambda invoke \ --function-name LambdaFunctionOverHttps \ --payload file://input.txt outputfile.txt \ --cli-binary-format raw-in-base64-out
La opción cli-binary-format es obligatoria si va a utilizar la versión 2 de la AWS CLI. Para que esta sea la configuración predeterminada, ejecute
aws configure set cli-binary-format raw-in-base64-out
. Para obtener más información, consulte Opciones de la línea de comandos globales compatibles con AWS CLI en la Guía del usuario de la AWS Command Line Interface versión 2.Debería ver la siguiente respuesta:
{ "StatusCode": 200, "ExecutedVersion": "LATEST" }
-
Confirme que la función ha realizado la operación
echo
que especificó en el evento de prueba de JSON. Inspeccione el archivooutputfile.txt
y compruebe que contiene lo siguiente:{"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 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 Test (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ónupdate
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. Cuando use el curl con la opción-d
(data), utilice automáticamente el método HTTP POST.curl https://
l8togsqxd8.execute-api.us-east-2.amazonaws.com/test
/DynamoDBManager \ -d '{"operation": "create", "payload": {"Item": {"id": "5678EFGH", "number": 15}}}'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.curl https://
avos4dr2rk.execute-api.us-east-2.amazonaws.com/test
/DynamoDBManager -d \ '{"operation": "read", "payload": {"Key": {"id": "5678EFGH"}}}'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.curl https://
avos4dr2rk.execute-api.us-east-2.amazonaws.com/test
/DynamoDBManager \ -d '{"operation": "update", "payload": {"Key": {"id": "5678EFGH"}, "UpdateExpression": "SET #num = :new_value", "ExpressionAttributeNames": {"#num": "number"}, "ExpressionAttributeValues": {":new_value": 42}}}' -
Para confirmar que se ha actualizado el valor de
number
correspondiente al elemento, ejecute otro comando de lectura:curl https://
avos4dr2rk.execute-api.us-east-2.amazonaws.com/test
/DynamoDBManager \ -d '{"operation": "read", "payload": {"Key": {"id": "5678EFGH"}}}'
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.curl https://
l8togsqxd8.execute-api.us-east-2.amazonaws.com/test
/DynamoDBManager \ -d '{"operation": "delete", "payload": {"Key": {"id": "5678EFGH"}}}' 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
delete
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 Acciones, Eliminar.
-
Elija Eliminar.
Para eliminar una tabla de DynamoDB
-
Seleccione la tabla que ha creado.
-
Elija Eliminar.
-
Escriba
delete
en el cuadro de texto. -
Elija Delete table (Eliminar tabla).