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. Como faço para resolver o problema?

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

-ou-

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.
-ou-
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 à 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.    Depois de fazer suas alterações, é possível testar 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: você pode 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