Eu defini minha integração do Lambda no API Gateway usando uma variável de estágio. Por que recebo um “erro interno do servidor” e um código de status 500 quando invoco o método da API?

4 minuto de leitura
0

Eu configurei minha API do Amazon API Gateway para invocar uma função do AWS Lambda usando uma variável de estágio. Quando invoco o método da API, minha API retorna um “erro interno do servidor” e um código de status 500. Como resolvo o erro?

Breve descrição

Se a política baseada em recursos da sua função do Lambda não incluir permissões para sua API invocar a função, o API Gateway retornará uma mensagem de erro interno do servidor.

Se criar uma variável de estágio para chamar uma função por meio de sua API, você deverá adicionar as permissões necessárias fazendo o seguinte:

Observação: se você criar uma API do API Gateway com a integração padrão do Lambda usando o console do API Gateway, o console adicionará as permissões necessárias automaticamente.

Resolução

Observação: se você receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), verifique se está usando sua versão mais recente.

Revisar seus Amazon CloudWatch Logs para confirmar que o erro é causado pela falta de permissões

Para APIs REST e APIs de WebSocket

Revise seus logs de execução do API Gateway. Se você vir uma mensagem de erro semelhante a Permissões inválidas na função do Lambda, as permissões ausentes estão causando o erro. Para obter mais informações, consulte Como eu ativo o CloudWatch Logs para solucionar problemas com minha API REST API Gateway ou API WebSocket?

Para APIs HTTP

Revise seus logs de acesso ao API Gateway. Se você vir uma mensagem de erro que inclua Permissões inválidas, as permissões ausentes estão causando o erro. Para obter mais informações, consulte Configurar logs para uma API HTTP.

Observação: a variável de contexto integrationErrorMessage ($context.integrationErrorMessage) inclui a mensagem de erro a ser revisada.

Para atualizar a política do IAM baseada em recursos da sua função do Lambda para que ela conceda permissão de invocação ao API Gateway

Instruções do console do Lambda

Siga as instruções em Conceder acesso à função aos serviços da AWS.

Veja a seguir um exemplo de política baseada em recursos que concede permissão de invocação ao API Gateway:

{
    "Version": "2012-10-17",
    "Id": "default",
    "Statement": [
        {
            "Sid": "ServiceAllowListing",
            "Effect": "Allow",
            "Principal": {
              "Service": "apigateway.amazonaws.com"
            },
            "Action": "lambda:InvokeFunction",
            "Resource": "arn:aws:lambda:<AWS_Region>:<AWS_Account_Number>:function:<LambdaFunctionName>",
            "Condition": {
              "ArnLike": {
                "AWS:SourceArn": "arn:aws:execute-api:<AWS_Region>:<AWS_Account_Number>:<API_ID>"
              }
            }
        }
     ]
}

Instruções da AWS CLI

Execute o seguinte comando add-permission da AWS CLI:

Importante: substitua as variáveis a seguir antes de executar o comando:

aws lambda add-permission --function-name arn:aws:lambda:region:account-id:function:function-name --statement-id statement-id-guid --action lambda:InvokeFunction --source-arn arn:aws:execute-api:region:account-id:api-id/*/GET/lambdasv1

Para criar um perfil do IAM que o API Gateway possa assumir para invocar sua função do Lambda

Siga as instruções no modelo de permissões do API Gateway para invocar uma API.

Observação: para obter mais informações, consulte Controlar o acesso a uma API com permissões do IAM.


Informações relacionadas

Trabalhar com estágios para APIs HTTP

Configurar variáveis de estágio para uma implantação da API REST

Usar variáveis de estágio do Amazon API Gateway

Usar variáveis de estágio do API Gateway para gerenciar funções do Lambda

Criar uma API REST do API Gateway com integração do Lambda