Como faço para resolver erros HTTP 502 das APIs REST do API Gateway com integração de proxy do Lambda?
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
Conteúdo relevante
- AWS OFICIALAtualizada há um ano
- AWS OFICIALAtualizada há 2 anos
- AWS OFICIALAtualizada há 2 anos