Como faço para passar cabeçalhos personalizados por meio do API Gateway para uma função do Lambda com integração personalizada do Lambda (sem proxy)?

5 minuto de leitura
0

Quero configurar uma função do AWS Lambda por meio de integração personalizada (sem proxy) para processar cabeçalhos personalizados que são passados pela minha API Amazon API Gateway.

Breve descrição

Por padrão, uma função do Lambda processa somente o corpo da solicitação de método que ela recebe de uma solicitação de API do API Gateway. Para passar cabeçalhos personalizados de uma API do API Gateway para uma função do Lambda, use um modelo de mapeamento do corpo. A API primeiro envia a solicitação de API atualizada para uma função do Lambda para processar os cabeçalhos. Em seguida, a função do Lambda retorna um ou mais valores de cabeçalho da solicitação de API original.

Resolução

Configure as permissões de IAM necessárias

Siga as instruções em Controle o acesso a uma API REST com permissões do IAM.

Para testar esse procedimento, crie um perfil do AWS Identity and Access Management (AWS IAM) e anexe as políticas gerenciadas pela AWS do AmazonAPIGatewayInvokeFullAccess e AmazonAPIGatewayPushToCloudWatchLogs. Para obter mais informações, consulte as políticas gerenciadas pela AWS.

Crie uma função do Lambda para lidar com cabeçalhos personalizados da sua API do API Gateway

Conclua as seguintes etapas:

  1. Abra o console do Lambda.
  2. Escolha Criar função. A página Criar função é aberta com a opção Autor do zero selecionada.
  3. No painel Informações básicas, execute as seguintes ações:
    Em Nome da função, insira um nome que descreva a finalidade da sua função. Por exemplo: Cabeçalhos personalizados.
    Em Runtime, escolha Node.js 20.x.
  4. Em Permissões, expanda Alterar perfil de execução padrão.
  5. Escolha Usar uma função existente. Uma lista suspensa de funções existentes é exibida.
  6. Em Função existente, escolha a função de execução do Lambda que você criou anteriormente.
  7. Escolha Criar função.
  8. No painel Fonte do código, substitua o código index.mjs no painel do editor pelo código a seguir:
    export const handler = async (event, context, callback) => {
      callback(null, "The custom header " +event.headers["header1"] +" has been processed successfully by AWS Lambda via Amazon API Gateway");
    };
    Escolha Implantar.

Para obter mais informações, consulte Criação de funções do Lambda com o Node.js.

Criar uma API REST do API Gateway

Conclua as seguintes etapas:

  1. Abra o console do API Gateway.
  2. Escolha Criar API.
    -or-
    Se for a primeira vez que você usa o API Gateway, uma página que apresenta os recursos do API Gateway será exibida. Em API REST, escolha Criar.
  3. Na seção Criar API REST, escolha Nova API em Detalhes da API.
  4. Em Nome da API, insira um nome que descreva a finalidade da sua API. Por exemplo: SendtoLambda.
    (Opcional) Em Descrição, insira uma breve descrição da finalidade da sua API.
    Em Tipo de endpoint, escolha Regional.
  5. Escolha Criar API.

Configure o modelo de mapeamento de corpo e ponto de integração da sua API

Conclua as seguintes etapas:

  1. Abra o console do API Gateway.

  2. Escolha o nome da API que você criou anteriormente. A página Recursos da sua API é aberta.

  3. Na página Recursos, escolha Criar recurso.

  4. No painel Criar recurso, execute as seguintes ações:
    Em Nome do recurso, insira um nome que descreva o recurso. Por exemplo: Recurso de cabeçalhos.
    Escolha Criar recurso.

  5. Escolha o Recurso que você criou e, em seguida, escolha Criar método.

  6. No painel Criar método, execute as seguintes ações:
    Para o tipo de método, escolha POST na lista suspensa.
    Em Tipo de integração, escolha Função do Lambda.
    Confirme se a integração do proxy Lambda está desativada.
    Para a função do Lambda, escolha a região da AWS que hospeda sua função e, em seguida, insira o nome da função do Lambda ou o Amazon Resource Name (ARN).
    Selecione Criar método. Essa ação concede automaticamente a permissão do API Gateway para invocar sua função do Lambda.

  7. Escolha POST para o método de recurso que você criou na etapa anterior. No painel Execução do método, escolha Solicitação de integração.

  8. No painel Solicitação de integração, escolha Editar e execute as seguintes ações:
    Em Passagem do corpo da solicitação, escolha Quando não houver modelos definidos (recomendado).
    Expanda Modelos de mapeamento na parte inferior do painel.
    Escolha Adicionar modelo de mapeamento.
    Em Content-Type, insira application/json.

  9. No editor de Corpo do modelo, insira o seguinte:

    {
      "method": "$context.httpMethod",
      "body" : $input.json('$'),
      "headers": {
        #foreach($param in $input.params().header.keySet())
        "$param": "$util.escapeJavaScript($input.params().header.get($param))"
        #if($foreach.hasNext),#end
        #end
      }
    }
  10. Escolha Salvar.

Implantar sua API em um novo estágio

Conclua as seguintes etapas:

  1. Siga as instruções para implantar uma API REST em um estágio. Para obter mais informações, consulte Configurar um estágio para uma API REST no API Gateway.
  2. Escolha o botão Implantar API.
  3. Na janela pop-up Implantar API, insira um novo nome para o estágio e escolha Implantar.
  4. Expanda o estágio no painel Estágios para visualizar o recurso e o método que você criou nas etapas anteriores.
  5. Escolha POST para seu método de recurso e copie o URL de invocação para sua área de transferência.

Exemplo de URL de invocação da API REST

https://1a2bc3d456.execute-api.region.amazonaws.com/stageName/resourceName

Teste sua configuração

Para confirmar que sua API e sua função do Lambda estão processando cabeçalhos, execute o seguinte comando curl:

curl -H "Content-Type: application/json" -H "header1: value1" -X POST -d "{\"API_body\": \"This is the body\"}" https://restApiId.execute-api.region.amazonaws.com/stageName/resourceName

Observação: substitua pelo URL de invocação da sua API.

Exemplo de saída

"The custom header value1 has been processed successfully by AWS Lambda via Amazon API Gateway"

Observação: para instalar o curl no Windows, consulte Downloads no site do Git. Para obter mais informações sobre o curl, consulte o site do projeto curl.

Informações relacionadas

Configurar transformações de dados no API Gateway

Gerenciamento de permissões no AWS Lambda

Controle o acesso a uma API REST com permissões do IAM