Como crear una REST API con Lambda en AWS en 6 pasos

No hay gran introducción esta vez. Si necesitas crear tu propia REST API en AWS aquí es donde debes de estar.

1 – Crear la función Lambda

El primero paso es precisamente crear tu función Lambda.
Si no estas seguro cómo puedes revisar el siguiente artículo: Como crear una función de Lambda en AWS en 5 minutos

Lo normal es que para un API real, nuestra lambda devuelva información de alguna base de datos. Sin embargo en este caso para agilizar solo utilizaré el siguiente código en una función Lambda.

exports.dataLambda = async (event, context, callback) => {

    return [
        {
            "id": "1",
            "username": "srb2010",
            "languages": [
                "java",
                "javascript",
                "php"
            ]
        },
        {
            "id": "2",
            "username": "mjpe554",
            "languages": [
                "go",
                "dart",
                "kotlin"
            ]
        }
    ]
}

Al probar la función nos debe regresar este resultado

Captura de pantalla mostrando la ejecución exitosa de la función lambda en la consola de administración de AWS. El resultado de la ejecución es el arreglo regresado en el extracto de código anterior.

¡Listo! La función esta terminada. Ahora vamos al paso interesante. Hacer que nuestra API la utilicé.

Si ya tienes una API, o vienes de aprender “Como crear un mock REST API en AWS API Gateway en 7 minutos” puedes saltarte al paso 4. Si quieres aprender a desplegar una desde 0. Sigue leyendo.

2 – Creación del API en la consola

Lo primero que necesitas hacer es entrar a tu cuenta de AWS y buscar la opción de API Gateway.

A continuación selecciona la opción de crear una REST API pública. La UI diferirá si en la cuenta en la qué estas trabajando ya tiene REST APIs o no.

Configura las opciones de la siguiente manera:

  • Protocolo: REST
  • Crear API nueva: API nueva
  • Nombre de API: Sample API
  • Descripción: Una API de muestra
  • Tipo de punto de enlace: Regional
Captura de pantalla remarcando el botón "Crear API"  dentro del panel de API REST con el formulario lleno con las opciones anteriores.

3 – Creación de un recurso

Una vez creada estarás por defecto en la sección de Recursos de tu API. Para crear un recurso, selecciona:
Acciones->Crear recurso

Captura de pantalla remarcando el botón "Crear recurso"  dentro del menú de Acciones en la sección de Recursos del dashboard del APi recién creado, SampleAPI.

En este ejemplo crearemos un recurso sample. Para evitarte problemas de acceso y poder hacer pruebas siempre te recomiendo que habilites la opción de CORS. Si no sabes qué es CORS puedes revisar aquí.

*Ten en cuenta que entender CORS es importante para decidir si lo necesitas activar o no en tu proyecto, sin embargo si sólo vas a hacer pruebas no es necesario que lo entiendas aún.

Captura de pantalla remarcando el botón "Crear recurso"  dentro del fomulario de Nuevo recurso secundario.

Una vez creado el recurso, API Gateway mostrará la siguiente interfaz con tu recurso creado y los métodos del mismo.

*El método de OPTIONS aparece por haber habilitado la opción de CORS. Si no habilitaste esta opción, este elemento no aparecerá.

Captura de pantalla de la vista de métodos creados por default al crear el recurso /sample.
El único método mostrado es OPTIONS.

4 – Creación de un método

Ahora agregaremos el método GET a nuestro recurso. Para ello debes selccionarlo y hacer click en:
Acciones->Crear método

Captura de pantalla remarcando el botón de "Crear método" dentro del menú de Acciones mientras el recurso /sample esta seleccionado.

En la lista selecciona GET. Y haz click en el símbolo para aceptar la creación del mismo.

Captura de pantalla mostrando la selección del crreación del método GET dentro del recurso /sample.

Una vez creado API Gateway te pregunta acerca del tipo de integración que va a tener este método.

Captura de pantalla mostrando el formulario de configuración del método GET dentro del recurso /sample.

Las opciones del formularo definen lo siguiente:

Tipo de Integración – Las opciones son para poder enlazar tu método con diferentes servicios:

  • Función Lambda – Para enlazar el método con una función Lambda de AWS.
  • HTTP – Para enlazar el método con otros APIs pre-existentes (HTTP).
  • Simulación – Para enlazar el método con un mock API, que no tiene otro propósito que simular el comportamiento de un API real.
  • Servicio de AWS – Para enlazar el método con algun otro servicio de AWS.
  • Enlace de VPC – Para enlazar el método con un enlace de una VPN.

Usar la integración de proxy Lambda – Básicamente utilizar una integración de este tipo quiere decir que la Lambda tendra el control total de los datos de entrada y de salida. Al no seleccionar esta casilla estas diciendo que quieres que API Gateway se encargué de manejar parte del flujo de datos.

*Porsupesto las implicaciones en tu código y forma de trabajo son aún mas complejas que esto, así que te recomiendo que leas mas al respecto aquí.

Región Lambda – La región en la que creaste la lambda que quieres utilizar.

Función Lambda – El nombre o ARN de la lambda que quieres utillizar.

*El ARN es un id asignado a cada recurso que creas en AWS.

Usar tiempo de espera predeterminado – Si seleccionas esta opción se usa el límite por default de 29, 000 ms. De lo contrario deberás específicar tu el tiempo límite.

Nuestra función debe quedar de la siguienta manera:

  • Tipo de Integración: Función Lambda
  • Usar la integración de proxy Lambda: False/Unchecked
  • Región Lambda: us-east-2
  • Función Lambda: dataLambda
  • Usar tiempo de espera predeterminado: True/Checked
Captura de pantalla mostrando el formulario lde configuración del método GET dentro del recurso /sample. El formulario esta lleno con la información anterior.

Al guardar la configuración API Gateway te pedirá tu confirmación para crear permisos que dejen que la API ejecuté la función Lambda.

Captura de pantalla de confirmación para agregar permisos de ejecución a API Gateway de la función lambda seleccionada.

Acepta la creación de estos permisos y continua al siguiente paso.

5 – Publicación del API

Técnicamente nuestra API ya esta lista para usarse pero aún no esta publicada. ¿Cómo hacemos eso?
Fácil. Selecciona Acciones->Implementar la API

Captura de pantalla remarcando la opción "Implementar la API" dentro del menú de Acciones con el método GET del recurso /sample seleccionado.

Se te abrirá una ventana en donde seleccionarás la etapa de tu API y llenarás información acerca de la implementación.

Es importante que entiendas la diferencia entre ‘implementación’ y ‘etapa’ dentro de API Gateway.

Una implementación es como una versión de tu API. Necesitarás crear una nueva implementación cada vez que hagas un cambio, ya sea agregar, cambiar o borrar algun recurso o método.

Una etapa tiene como propósito ser usada como diferentes ambientes de desarrollo de tu API, de manera que puedas hacer públicas diferentes versiones de la misma. Un caso de uso normal sería crear una para tu equipo de desarrollo en donde puedas trabajar y hacer cambios, una para QA y una o varias para la versiónes de producción.

Para este ejemplo estoy llenando las opciones con la siguiente información:

  • Etapa de implementación: [Nueva etapa]
  • Nombre de la fase: dev
  • Descripción de la etapa: Etapa de desarrollo
  • Descripción de implementación: Base

Sin embargo lo puedes llenar con los datos que tu quieras.

*En este caso al no tener ninguna etapa existente API Gateway me obliga a crear una nueva al lanzar la implementación. Si ya tenías una etapa puedes seleccionar esa misma o proceder con la creación de una nueva.

Captura de pantalla mostrando el formulario de la ventana "Implementar la API" lleno con la información anterior.

Ahora en la sección de Etapas podemos ver la etapa que seleccionamos con los recursos que creamos para esta nueva implementación.

A su vez si te vas a la pestaña de Historial de Implementaciones, podrás ver un listado con las diferentes implementaciones que hayas creado, incluyendo la que está utilizando la etapa actualmente.

Captura de pantalla mostrando la pestaña de "Hisotrial de implementaciones" de la etapa "dev" en la sección de "Etapas" en las opciones de API "SampleAPI".

6 – Realizando una petición al API

Por último. ¿Cómo probamos que tenemos accesso a nuestra API?

Lo primero que necesitas es la URL para tu API evidentemente.

A este path le tienes que concatenar el recurso que quieras llamar. En este caso queremos llamar a /sample, así que la url que debemos llamar (en mi caso) es:

https://dgah4cbh8c.execute-api.us-east-2.amazonaws.com/dev/sample

Ahora podemos intentar hacer una peticón a esta dirección.

Captura de pantalla mostrando la llamada hecha al API con una respuesta exitosa con código de estatus 200 y con el json del código inicial como body de la respuesta.

¡Perfecto! Es la misma respuesta que definimos para la Lambda.
Puedes actualizar el código cuando quieras y verás los cambios reflejados en tu API prácticamente de inmediato. (Porsupuesto, ten en cuenta que si cometes errores en tu código eso también se reflejará de inmediato)

Captura de pantalla mostrando un cambio en el código de la lambda para devolver solo el primer elemento del arreglo.
El cambo se hace en la sección de Código fuente de la función Lambda en la consola de administración de AWS.

Como puedes ver el único cambio que hice fue que ahora sólo devuelvo el primer elemento de mi arreglo.

Captura de pantalla mostrando una llamada al mismo API con un respuesta exitos con código 200, pero ahora con solo uno de los elementos como parte del body de la respuesta.

Obviamente esta es una petición GET muy simple.

Más adelante podremos ver cómo pasar parametros ya sea como query params o pasar información en el body de un POST.