Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

458
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda