O tópico a seguir fornece orientações para a solução de erros e problemas que podem ser encontrados durante o uso de AWS LambdaIntegrações do com APIs HTTP.
Problema: minha API com uma integração do Lambda retorna {"message":"Internal Server Error"}
Para solucionar o erro interno do servidor, adicione a $context.integrationErrorMessage
variável de registro em log ao formato de log e visualize os logs da API HTTP. Para conseguir isso, faça o seguinte:
Como criar um grupo de logs usando o AWS Management Console
Abra o console do CloudWatch em https://console.aws.amazon.com/cloudwatch/
. -
Escolha Grupos de logs.
-
Escolha Criar grupo de logs.
-
Insira um nome para o grupo de logs e escolha Criar.
-
Anote o nome de recurso da Amazon (ARN) do grupo de logs. O formato do ARN é arn:aws:logs:
region
:account-id
:log-group:log-group-name
. O ARN do grupo de logs é necessário para habilitar o registro de acesso em logs para a API HTTP.
Como adicionar a variável de registro em log $context.integrationErrorMessage
Inicie uma sessão no console do API Gateway em https://console.aws.amazon.com/apigateway
. -
Escolha sua API HTTP.
-
Em Monitor, escolha Registro em log.
-
Selecione um estágio da API.
-
Escolha Editar e habilite o registro de acesso em logs.
-
Para o destino do log, insira o ARN do grupo de log que você criou na etapa anterior.
-
Em Formato de log, escolha CLF. O API Gateway cria um exemplo de formato de log.
-
Adicione
$context.integrationErrorMessage
ao final do formato de log. -
Escolha Save (Salvar).
Como visualizar os logs da API
-
Gere os logs. Use um navegador ou
curl
para invocar a API.$
curl https://api-id
.execute-api.us-west-2
.amazonaws.com/route
Inicie uma sessão no console do API Gateway em https://console.aws.amazon.com/apigateway
. -
Escolha sua API HTTP.
-
Em Monitor, escolha Registro em log.
-
Selecione o estágio da API para o qual você habilitou o registro em log.
-
Escolha View logs in CloudWatch (Exibir logs no CloudWatch).
-
Escolha o stream de logs mais recente para visualizar os logs da API HTTP.
-
A entrada de log deve ser semelhante à seguinte:
Como adicionamos $context.integrationErrorMessage
ao formato de log, vemos uma mensagem de erro nos logs que resume o problema.
Os logs podem incluir uma mensagem de erro diferente que indica que há um problema com o código de função do Lambda. Nesse caso, confira o código de função do Lambda e verifique se a função do Lambda retorna uma resposta no formato necessário. Se os logs não incluírem uma mensagem de erro, adicione $context.error.message
e $context.error.responseType
ao seu formato de log para obter mais informações para ajudar a solucionar problemas.
Nesse caso, os logs mostram que o API Gateway não tinham as permissões necessárias para invocar a função do Lambda.
Quando você cria uma integração do Lambda no console do API Gateway, este configura automaticamente as permissões para invocar a função do Lambda. Ao criar uma integração do Lambda usando a AWS CLI, AWS CloudFormation ou um SDK, você deve conceder permissões para o API Gateway invocar a função. Os comandos de exemplo da AWS CLI a seguir concedem permissões para diferentes rotas da API HTTP invocarem uma função do Lambda.
exemplo Exemplo: para o estágio $default
e a rota $default
de uma API HTTP
aws lambda add-permission \ --function-name
my-function
\ --statement-idapigateway-invoke-permissions
\ --action lambda:InvokeFunction \ --principal apigateway.amazonaws.com \ --source-arn "arn:aws:execute-api:us-west-2
:123456789012
:api-id
/\$default
/\$default
"
exemplo Exemplo: para o estágio prod
e a rota test
de uma API HTTP
aws lambda add-permission \ --function-name
my-function
\ --statement-idapigateway-invoke-permissions
\ --action lambda:InvokeFunction \ --principal apigateway.amazonaws.com \ --source-arn "arn:aws:execute-api:us-west-2
:123456789012
:api-id
/prod
/*/test
"
Confirme a política de função na guia Permissions (Permissões) do console do Lambda.
Tente invocar a API novamente. Você deverá ver a resposta da função do Lambda.