Ir para o conteúdo

Como faço para resolver erros HTTP 502 das APIs REST do API Gateway com integração de proxy do Lambda?

4 minuto de leitura
0

Configurei a integração de proxy do Amazon API Gateway para funcionar com uma função do AWS Lambda. Quando chamo minha API REST, recebo um erro de configuração e um código de status HTTP 502.

Breve descrição

Se as permissões da sua função do Lambda estiverem incorretas ou a resposta à solicitação de API não estiver formatada corretamente, o API Gateway retornará um código de status HTTP 502.

Exemplo de mensagens de erro HTTP 502 conforme aparecem no Amazon CloudWatch Logs

Wed Aug 03 08:10:00 UTC 2022 : Execution failed due to configuration error:
WE Aug 03 09:10:00 UTC 2022 : Method completed with status: 502

-or-

Wed Aug 03 08:20:33 UTC 2022 : Lambda execution failed with status 200 due to customer function error: [Errno 13] Permission denied: '/var/task/lambda_function.py'. Lambda request id: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Wed Aug 03 08:20:33 UTC 2022 : Method completed with status: 502

Para que o API Gateway processe a resposta de uma função do Lambda, a função precisa retornar a saída de acordo com o seguinte formato JSON:

{
    "isBase64Encoded": true|false,
    "statusCode": httpStatusCode,
    "headers": { "headerName": "headerValue", ... },
    "body": "..."
}

Para obter mais informações, consulte Formato de saída de uma função do Lambda para integração de proxy.

Resolução

  1. Analise as métricas do CloudWatch da sua API REST com o painel de API no API Gateway.
    -or-
    Analise os eventos de log da sua API REST no console do Amazon CloudWatch.
  2. Nos logs, analise o formato da resposta da sua função do Lambda para a API. Se a resposta não estiver no formato JSON necessário, reformate-a.
  3. Verifique se a política de recursos da função do Lambda permite acesso para invocação da função com o API Gateway.
  4. Se a execução da função do Lambda falhar devido a um problema de permissão do pacote, verifique as permissões. Para mais informações, consulte Como soluciono os erros de “permission denied” ou “unable to import module” ao fazer o upload de um pacote de implantação do Lambda?
  5. Verifique se o nome e configuração do manipulador de funções do Lambda são válidos.
  6. Se a execução do Lambda falhar durante o runtime, verifique os logs da função do Lambda e atualize o código.
  7. Teste seu método de API REST no console do API Gateway.

Exemplo de função do Lambda em Node.js com a resposta formatada corretamente

Observação: as funções do Lambda em Node.js são compatíveis com manipuladores assíncronos e não assíncronos. O exemplo de função a seguir usa um manipulador assíncrono.

exports.handler = async (event) => {

    const responseBody = {
        "key3": "value3",
        "key2": "value2",
        "key1": "value1"
    };

    const response = {
        "statusCode": 200,
        "headers": {
            "my_header": "my_value"
        },
        "body": JSON.stringify(responseBody),
        "isBase64Encoded": false
    };

    return response;
};

Neste exemplo de resposta, há quatro campos:

  • statusCode é um número inteiro interpretado pelo API Gateway que é retornado ao chamador do método de API.
  • headers são coletados e, em seguida, enviados de volta com a resposta do API Gateway.
  • body deve ser convertido em uma string se você estiver retornando dados como JSON.
    Observação: é possível usar JSON.stringify para lidar com isso nas funções em Node.js. Outros runtimes exigem soluções diferentes, mas o conceito é o mesmo.
  • isBase64Encoded é um campo obrigatório se você estiver trabalhando com dados binários. Se você não usar esse campo, é uma prática recomendada definir o valor como FALSE.

Informações relacionadas

Configurar o registro em log do CloudWatch para uma API REST no API Gateway

Monitorar a execução da API REST com métricas do Amazon CloudWatch