Este blog ha explicado hasta ahora los siguientes conceptos para las aplicaciones sin servidor:

El tercer blog de la serie serverless explicará cómo crear un microservicio sencillo utilizando Amazon API Gateway, AWS Lambda y Couchbase. Leer blogs anteriores para obtener más información sobre AWS Lambda. Puerta de enlace API de Amazon es un servicio totalmente administrado que facilita a los desarrolladores la creación, publicación, mantenimiento, monitorización y protección de API a cualquier escala. Amazon API Gateway se encarga de todas las tareas relacionadas con la aceptación y el procesamiento de hasta cientos de miles de llamadas a API simultáneas, incluida la administración del tráfico, la autorización y el control del acceso, la monitorización y la administración de versiones de API. Estos son los componentes clave de esta arquitectura:
serverless-microservice

  • El cliente puede ser curl, AWS CLI, cliente Postman o cualquier otra herramienta/API que pueda invocar un endpoint REST.
  • API Gateway se utiliza para aprovisionar APIs. El recurso de nivel superior está disponible en la ruta /libros. HTTP GET y POST para el recurso.
  • Cada API activa una función Lambda. Se crean dos funciones Lambda, lista de libros para listar todos los libros disponibles y libro-crear para crear un nuevo libro.
  • Couchbase se utiliza como almacén de persistencia en EC2. Todos los documentos JSON se almacenan y recuperan de esta base de datos.

Empecemos.

Crear rol IAM

Los roles IAM tendrán políticas y relaciones de confianza que permitirán utilizar este rol en API Gateway y ejecutar la función Lambda. Vamos a crear un nuevo rol IAM:

--documento de política de funciones define el documento de política de relación de confianza que concede a una entidad permiso para asumir el rol. confianza.json está en github.com/arun-gupta/serverless/blob/master/aws/microservice/trust.json y parece:

Esta relación de confianza permite que las funciones Lambda y API Gateway asuman este rol durante la ejecución. Asocie políticas con este rol como:

política.json está en github.com/arun-gupta/serverless/blob/master/aws/microservice/policy.json y parece:

Esta generosa política permite cualquier permiso sobre los registros generados en CloudWatch para todos los recursos. Además, permite todos los permisos de Lambda y API Gateway para todos los recursos. En general, solo se daría la política requerida a recursos específicos.

Crear funciones lambda

Los pasos detallados para crear funciones Lambda se explican en FaaS sin servidor con AWS Lambda y Java. Vamos a crear las dos funciones Lambda necesarias en nuestro caso:

Un par de elementos clave a tener en cuenta en esta función son:

  • Función IAM microservicioRole creado en el paso anterior se especifica explícitamente aquí
  • El manipulador es org.sample.serverless.aws.couchbase.BucketGetAll clase. Esta clase consulta la base de datos Couchbase definida mediante la clase COUCHBASE_HOST variable de entorno.

Crea la segunda función Lambda:

El controlador de esta función es org.sample.serverless.aws.couchbase.BucketPost clase. Esta clase crea un nuevo documento JSON en la base de datos Couchbase identificado por COUCHBASE_HOST variable de entorno. El código fuente completo de estas clases se encuentra en github.com/arun-gupta/serverless/tree/master/aws/microservice/microservice-http-endpoint.

Recurso de la pasarela API

Crear una API con Amazon API Gateway y probarlaCrear una API para exponer una función Lambda proporcionan pasos detallados y explicaciones sobre cómo utilizar API Gateway y Lambda Functions para crear potentes sistemas backend. Este blog hará un rápido repaso de los pasos en caso de que desee cortar la persecución. Vamos a crear recursos de API Gateway.

  1. El primer paso es crear una API:

    Esto muestra la salida como:

    El valor de id es el ID de la API. En nuestro caso, es lb2qgujjif.
  2. Busca el ROOT ID de la API creada, ya que es necesario para la siguiente invocación a la CLI de AWS:

    Esto muestra la salida:

    Valor de id es el ID RAÍZ. También es el ID PARENT del recurso de nivel superior.
  3. Crear un recurso

    Esto muestra la salida:

    Valor de id es RESOURCE ID.

El ID de API y el ID de RECURSO se utilizan para las invocaciones posteriores de la CLI de AWS.

API Gateway Método POST

Ahora que el recurso está creado, vamos a crear HTTP POST en este recurso.

  1. Crear un POST método

    para ver la respuesta:
  2. Establece la función Lambda como destino del método POST:

    Asegúrese de sustituir con el ID de su cuenta AWS. El ID de API y el ID de RECURSO de la sección anterior también se utilizan aquí. --uri se utiliza para especificar el URI de la entrada de integración. El formato del URI es fijo. Esta CLI mostrará el resultado como:
  3. Establecer tipo de contenido de la respuesta del método POST:

    para ver la respuesta:
  4. Establecer tipo de contenido de la respuesta de integración del método POST:

    para ver la respuesta:
  5. Despliegue de la API

    para ver la respuesta
  6. Conceder permiso para permitir que API Gateway invoque Lambda Function:

    Además, conceda permiso a la API desplegada:
  7. Prueba el método API:

    para ver la respuesta:

    Valor de estado es 200 e indica que la invocación se ha realizado correctamente. El valor de registro muestra la declaración de registro de CloudWatch Logs. También se pueden obtener registros detallados utilizando aws logs filter-log-events --log-group /aws/lambda/MicroservicePost.
  8. Este comando almacena un único documento JSON en Couchbase. Esto puede verificarse fácilmente utilizando el comando Herramienta CLI de Couchbase cbqConéctese al servidor Couchbase como:

    Crear un índice primario en por defecto ya que es necesario para consultar el bucket sin cláusulas:
  9. Escriba un N1QL para acceder a los datos:

    Los resultados muestran el documento JSON que fue almacenado por nuestra función Lambda.

API Gateway Método GET

Vamos a crear HTTP GET en el recurso:

  1. Crear un GET método:
  2. Establezca la función Lambda correcta como destino de GET:
  3. Establecer tipo de contenido de respuesta del método GET:
  4. Establecer tipo de contenido de la respuesta de integración del método GET:
  5. Conceder permiso para permitir que API Gateway invoque Lambda Function
  6. Conceder permiso a la API desplegada:
  7. Prueba el método:

    para ver la salida:

    Una vez más, el código de estado 200 muestra una invocación correcta. Se pueden obtener registros detallados utilizando aws logs filter-log-events --log-group /aws/lambda/MicroservicePost.

Este blog sólo muestra un simple POST y GET métodos. Otros métodos HTTP se pueden incluir muy fácilmente en este microservicio también.

Referencias de API Gateway y Lambda

Autor

Publicado por Arun Gupta, Vicepresidente, Defensa del Desarrollador, Couchbase

Arun Gupta es vicepresidente de promoción de desarrolladores en Couchbase. Ha creado y dirigido comunidades de desarrolladores durante más de 10 años en Sun, Oracle y Red Hat. Tiene una gran experiencia en liderar equipos multidisciplinares para desarrollar y ejecutar estrategias, planificar y ejecutar contenidos, campañas de marketing y programas. Anteriormente dirigió equipos de ingeniería en Sun y es miembro fundador del equipo Java EE. Gupta es autor de más de 2.000 entradas de blog sobre tecnología. Tiene una amplia experiencia como conferenciante en más de 40 países sobre innumerables temas y es una JavaOne Rock Star desde hace tres años consecutivos. Gupta también fundó el capítulo Devoxx4Kids en Estados Unidos y sigue promoviendo la educación tecnológica entre los niños. Autor de varios libros sobre tecnología, ávido corredor, trotamundos, campeón de Java, líder de JUG, miembro del Dream Team de NetBeans y capitán de Docker, es fácilmente accesible en @arungupta.

1 Comentarios

  1. Hola @Arun,

    ¿Podemos usar Couchbase NodeJs V2.6.3 SDK con lamda?

    Estamos recibiendo el siguiente error cuando intentamos con la última SDK.

    "errorMessage": "/var/lang/lib/libstdc++.so.6: versión `CXXABI_1.3.9′ no encontrada (requerida por /var/task/node_modules/couchbase/build/Release/couchbase_impl.node)",

Dejar una respuesta