subnetids runtimes keys deploy aws aws-lambda aws-api-gateway serverless-framework

aws-lambda - keys - serverless runtimes



Lambda Integration vs. Lambda Proxy: Pros y Contras (3)

No hay proxy.

Tengo varias implementaciones de SLS en producción, algunas generando ingresos, algunas como herramientas internas. Yo exclusivamente uso ningún proxy. No quiero confiar en las estructuras de AWS para mi aplicación, así que si dejamos de ser amigos, puedo migrar sin mucho dolor.

En cuanto a los Pros del proxy, los considero como contras, ya que se siente que usted también tiene y la estafa como profesional. Lo he visto todo antes "vamos a movernos súper rápido". Sí, necesitamos ser ágiles y movernos rápidamente, pero no a costa de pensar. Consigo esto con mis ingenieros todo el tiempo, una cosa es ser escasa en documentación y diseñar otra para decir "locos a la planificación permite solo codificar". Así es como se arrincona a sí mismo, sin importar qué tan rápido llegue al mercado. Sin proxy (y un poco de planificación temprana para la estructura de su proyecto y quizás algún buen pensamiento de DDD) es bastante simple migrar desde AWS en caso de que el mundo se queme.

Además de esto, me resulta muy difícil conseguir nuevos cuerpos al día con AWS. Una vez que lo sabes, todo está lleno pero los desarrolladores son desarrolladores, no ingenieros de infraestructura (aquellos de nosotros que hacemos ambos son sorprendentemente raros). Retirarse ayuda a las personas a ser productivas a medida que comienzan su viaje desalentador por el rabithole. Prefiero mi código codificador que necesito preocuparme por CFN cada 20 minutos.

¿Cuáles crees que son los pros y los contras de usar la integración de Lambda con y sin la función de proxy en AWS API Gateway (y más específicamente, al usar el marco sin servidor)? Esto es lo que pienso hasta ahora:

Integración Lambda con Proxy

  • Pro : Uno puede crear prototipos y codificar rápidamente sin preocuparse por todos los detalles de configuración necesarios (y reinventar algunas ruedas como mapeos genéricos de plantillas, etc.).
  • Pro : Es realmente fácil devolver cualquier código de estado y encabezados personalizados, mientras que al mismo tiempo hay una forma genérica de leer el cuerpo, los encabezados, los parámetros, de la solicitud.
  • Contras : todo se hace en código, por lo que la documentación de autogeneración es un poco más difícil. Las dependencias (encabezados, modelos, códigos de estado devueltos) están "ocultas" en el código.

Integración Lambda sin Proxy

  • Con : Implica mucho más trabajo para configurarlo, y esta configuración puede estar duplicada en diferentes recursos.
  • Pro : permite desacoplar lo que la lambda recibe y devuelve, y cómo se asigna a diferentes códigos de estado HTTP, encabezados y cargas útiles.
  • Pro : Muy útil porque estipula por adelantado lo que devuelve, y lo que requiere en términos de encabezados y cargas útiles.
  • Pro : El trabajo duro al configurar todo es útil a largo plazo porque uno puede exportarlo todo a Swagger, por lo que otros pueden usarlo para generar diferentes SDK para él.

¿Cuáles son tus pensamientos? ¿Usas generalmente Proxy Lambda o integraciones Lambda simples? ¿Que prefieres y porque?

EDITAR : Hasta el momento, me inclino a elegir siempre no usar las funciones de proxy debido a las razones mencionadas (desacoplamiento y afirmación de dependencias, encabezados, códigos de estado, etc.) por adelantado.


Parece que AWS recomienda elegir Lambda Proxy Integration para el nuevo desarrollo de API .

Nota

La integración personalizada de Lambda, anteriormente conocida como integración de Lambda, es una tecnología heredada. Le recomendamos que utilice la integración de proxy de Lambda para cualquier API nueva. Para obtener más información, consulte Crear una API de puerta de enlace API con la integración de Proxy Lambda

Entiendo que es mucho más "rápido" (a corto plazo) activar un punto final de API y la integración lambda mediante la integración de proxy en lugar de la integración personalizada, pero me sorprende que sea la recomendación para el desarrollo de todas las API / Lambda en el futuro. :

  • Me imaginé a la puerta de enlace de la API como responsable de manejar los "detalles de HTTP". El uso de Proxy Integration obliga (al menos un subconjunto de) esa responsabilidad a la función Lambda. (es decir, saber interpretar y decidir sobre encabezados HTTP, parámetros de consulta, códigos de estado, etc.)
  • Al hacer eso, siento que confunde la responsabilidad de respaldar la función Lambda: Lambda ahora necesita manejar la lógica "empresarial" para la que está haciendo, y también la interpretación de los valores HTTP entrantes y decidir la respuesta HTTP saliente. valores.
  • Por supuesto, podría implementar una capa de función Lambda adicional para abstraer los detalles de HTTP, pero ¿no es eso lo que se supone que hace la puerta de enlace API?
  • Reduce la capacidad de reutilizar cualquier función Lambda dada en un contexto que no sea ​​el servicio de solicitudes HTTP, a menos que los clientes no HTTP formateen la solicitud como si fuera una solicitud HTTP.

También comenzamos con Proxy, ya que realmente se sintió rápido al poner en marcha un montón de funciones. Pronto nos dimos cuenta de que creamos un acoplamiento bastante estrecho con la forma en que el Proxy nos obliga a leer la entrada y la salida de escritura, y que nuestra función no debería saber sobre esto y debería tener interfaces más claras y sencillas. Y luego quisimos comenzar a organizar algunas de esas funciones con las funciones paso a paso de AWS y fue entonces cuando nos dimos cuenta de que habíamos creado funciones que realmente solo funcionan con la integración Proxy . No con las funciones escalonadas, y ciertamente no se pueden migrar fácilmente.

Ya no hay proxy.