Api Gateway 101

Api Gateway 101

Qué es AWS Api gateway? como lo usamos? by Oscar Cortes

Api Gateway 101

Hasta este punto si has seguido el paso a paso de la publicación de esta serie de Serverless, aprendimos como configurar nuestro ambiente de desarrollo con una cuenta de AWS en este articulo Link y en el paso siguiente publicamos nuestra primera lambda resolviendo un problema puntual de probar una librería de OCR dentro dee una lambda en este Link.

Ahora lo que necesitamos es exponer nuestra Lambda a través de una url(API Rest) y pueda ser consumida como un servicio externo. No es la única forma que tenemos de consumir o invocar una lambda pero vamos a ir paso a paso descubriendo las maneras que tenemos que interactuar con una lambda.

¿Qué es Api Gateway? es la primera pregunta que tenemos que resolver,Api Gateway es un servicio de AWS que permite la gestión completa del proceso de creación, configuración, despliegue y escalado de una API.

Ahora cómo conectamos la Lambda que tenemos construida y el servicio de API Gateway, AWS permite configurar la conexión entree estos servicios, desde la consola , el SDK o las distintas herramientas de Infraestructura como código que tenemos disponibles. Como recuerdan de los artículos anteriores en esta serie de Serverless estamos arrancando con Serverless Framework.

Vamos a seguir trabajando con el mismo repositorio pero vamos a crear una nueva rama. feature/add-api-gateway. Analicemos los cambios que tiene esta rama respecto a la rama main donde veníamos trabajando.

Manos a la obra

En la función lambda le agregamos una nueva configuración en el serverless.yml

    events:
      - http:
          path: call
          method: get
          private: true

Le agregamos un evento, dentro de ese evento que sea del tipo HTTP y dentro del tipo tres configuraciones mas , path(la ruta que queremos en la url), method(tipo de verbo http) y si es private o no que por default es false. En este punto aclaro que siempre publiquemos las APIs con algún tipo de seguridad, esta es la mas básica que tenemos sin embargo API Gateway tiene un amplio abanico de posibilidades para agregar seguridad a la API.

La segunda parte que encontramos distinta es también en el serverless.yml y también esta relacionada con la seguridad y el apiKey propiamente dicho, le especificamos que queremos que nos cree un apiKey y lo almacene en nuestra cuenta de AWS asociado a este proyecto.

  apiGateway:
    apiKeys:
      - ocr-tesseract-apikey

Deploy

Finalmente pasamos a realizar el deploy como en los dos articulos anteriores con el comando:

sls deploy --aws-profile you-profile --stage dev

Resultados

Prestemos atención a que la información que nos arroja el despliegue, tiene un elemento distinto a los anteriores despliegues nos da la información del apikey que necesitamos para invocar nuestra API

✔ Service deployed to stack serverless-aws-ocr-tesseract-demo-dev (75s)

api keys:
  ocr-tesseract-apikey: m22wyyvpU51PIlRiPv9zVXXXXXXXXXXX
endpoint: GET - https://yoqvXXXXX.execute-api.us-east-1.amazonaws.com/dev/call
functions:
  hello: serverless-aws-ocr-tesseract-demo-dev-hello (17 MB)

Monitor all your API routes with Serverless Console: run "serverless --console"

Cómo vemos nos ofrece un resultado para el ocr-tesseract-apikey, ahora con este valor podemos invocar nuestra Lambda a través de la API que acabamos de desplegar. Como comentario el Warning que nos muestra sera muy interesante para resolver en siguientes artículos de esta serie

curl -H 'x-api-key:m22wyyvpU51PIlRiPv9zVXXXXXXXXX'  https://yoqvXXXXX.execute-api.us-east-1.amazonaws.com/dev/call

Mild Splendour of the various-vested Night!
Mother of wildly-working visions! haill
I watch thy gliding, while with watery light
Thy weak eye glimmers through a fleecy veil;
And when thou lovest thy pale orb to shroud
Behind the gather’d blackness lost on high;
And when thou dartest from the wind-rent cloud
Thy placid lightning o’er the awaken’d sky.

Concluciones:

Agregamos un evento que dispara la ejecución de la lambda y captura la salida de la misma devolviéndonos el texto que se captura del archivo que pasamos como referencia en el articulo de lambda-101-parte-2. Agregamos seguridad a esa API y realizamos pruebas desde la terminal invocando la url con el api-key como parámetros, dejamos libre para que realicen una invocación sin el apiKey y verifiquen que resultado obtienen (Forbidden ... tal ves?).

Oscar Cortes