Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

460
Views
¿Cómo arrojar un código de error HTTP con AWS Lambda usando Lambda Proxy?

Creé una función de AWS Lambda usando Python 3.8 con un disparador de Lambda Proxy API Gateway: Puerta de enlace API

De hecho, es posible devolver códigos de error HTTP personalizados:

 def lambda_handler(event, context): return { 'statusCode': 400, 'body': json.dumps('This is a bad request!') }

Sin embargo, algunos ejemplos en línea (por ejemplo, 1 , 2 ) simplemente generan una excepción para devolver el error con un mensaje personalizado. Si se lanza una excepción en el controlador como se muestra a continuación, el servidor devuelve un 502 ya que la respuesta no está en el formato esperado para la integración de proxy :

 def lambda_handler(event, context): raise Exception('This is an exception!')

Creo que los ejemplos se basan en algunas plantillas de respuesta de integración y no utilizan la integración de proxy. ¿Es posible lograr lo mismo con Lambda Proxy? Me gustaría evitar capturar excepciones globalmente en el controlador de Lambda para crear respuestas de error personalizadas.

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

DurandA: creo que tiene toda la razón: el enfoque simplificado de integración de Lambda Proxy se basa en que detecte sus excepciones y devuelva el formato estandarizado:

 def lambda_handler(event, context): return { 'statusCode': 400, 'body': json.dumps('This is a bad request!') }

La función de integración de Lambda Proxy simplificada se anunció en una publicación de blog de septiembre de 2016 , pero uno de los ejemplos que citó se publicó anteriormente, en una publicación de blog de junio de 2016 , cuando el método de respuesta de integración más complicado era la única forma. Tal vez te hayas topado con un ejemplo desactualizado.

También publicó un enlace a la documentación del producto para el manejo de errores , en la parte superior de la sección que cubre la función de integración de proxy de Lambda, dice:

Con la integración del proxy de Lambda, se requiere que Lambda devuelva una salida con el siguiente formato:

 { "isBase64Encoded" : "boolean", "statusCode": "number", "headers": { ... }, "body": "JSON string" }

Aquí hay un ejemplo de trabajo que devuelve un HTTP 400 con el mensaje "¡Esta es una excepción!" utilizando la integración de proxy Lambda.

 import json def exception_handler(e): # exception to status code mapping goes here... status_code = 400 return { 'statusCode': status_code, 'body': json.dumps(str(e)) } def lambda_handler(event, context): try: raise Exception('This is an exception!') return { 'statusCode': 200, 'body': json.dumps('This is a good request!') } except Exception as e: return exception_handler(e)

Salida de lo anterior:

 $ http https://**********.execute-api.us-east-2.amazonaws.com/test HTTP/1.1 400 Bad Request Connection: keep-alive Content-Length: 23 Content-Type: application/json Date: Sun, 23 Feb 2020 05:06:59 GMT X-Amzn-Trace-Id: Root=1-********-************************;Sampled=0 x-amz-apigw-id: **************** x-amzn-RequestId: ********-****-****-****-************ "This is an exception!"

Comprendo su frustración por no querer crear un controlador de excepciones personalizado. Afortunadamente, solo tiene que crear un solo controlador que envuelva su función lambda_handler. ¡Le deseamos todo lo mejor!

over 4 years ago · Santiago Trujillo Report

0

Hasta donde yo sé, usar el lenguaje incorporado en Exceptions no funcionará porque API Gateway espera un formato de respuesta preciso, que es un JSON. Lo que puede hacer es generar la excepción para que pueda iniciar sesión en CloudWatch, pero luego envuélvalo dentro de un objeto JSON para que también pueda devolverlo al cliente si es necesario. Realmente creo que esto debería ser posible de inmediato, ya que con los servicios de ECS puede hacerlo (utilizo algunos servicios en .NET Core y cuando ocurre una excepción, obtengo el código de estado apropiado como respuesta, sin hacer trabajo adicional)

over 4 years ago · Santiago Trujillo Report

0

Para casos simples, el enfoque genérico de Chuck T. probablemente esté bien. Pero si tiene un flujo de trabajo complejo con varias funciones de Lambda coordinadas y una máquina de estado de AWS, puede usar una estrategia más flexible que se describe aquí .

  1. En sus funciones, cree muchas clases de excepción personalizadas simples como esta: class SecretAccessFailedException(Exception): pass.
  2. Genere esas excepciones personalizadas según sea necesario.
  3. Captúrelos en su máquina de estado y procéselos con flexibilidad.
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!