Invocar URLs de função do Lambda
Um URL de função é um endpoint HTTP(S) dedicado para a função do Lambda. Você pode criar e configurar um URL de função no console do Lambda ou na API do Lambda.
dica
O Lambda oferece duas maneiras de invocar sua função por meio de um endpoint HTTP: URLs de função e Amazon API Gateway. Se não tiver certeza de qual é o melhor método para seu caso de uso, consulte Seleção de um método para invocar a função do Lambda usando uma solicitação HTTP.
Ao criar um URL de função, o Lambda gera automaticamente um endpoint de URL exclusivo para você. Após a criação de um URL de função, o endpoint de URL nunca muda. Os endpoints de URLs de função têm o seguinte formato:
https://<url-id>.lambda-url.<region>.on.aws
nota
Os URLs da função não são compatíveis com as seguintes Regiões da AWS: Ásia-Pacífico (Hyderabad) (ap-south-2), Ásia-Pacífico (Melbourne) (ap-southeast-4), Ásia-Pacífico (Malásia) (ap-southeast-5), Ásia-Pacífico (Nova Zelândia) (ap-southeast-6), Ásia-Pacífico (Tailândia) (ap-southeast-7), Ásia-Pacífico (Taipei) (ap-east-2), Oeste do Canadá (Calgary) (ca-west-1), Europa (Espanha) (eu-south-2), Europa (Zurique) (eu-central-2), Israel (Tel Aviv) (il-central-1), e Oriente Médio (EAU) (me-central-1).
Os URLs de função são habilitados para pilha dupla, sendo compatíveis com IPv4 e IPv6. Após configurar o URL de função, você pode invocar a função por meio de seu endpoint HTTP(S) via um navegador da Web, curl, Postman ou qualquer cliente HTTP. Para invocar um URL da função, você deve ter permissões lambda:InvokeFunctionUrl e lambda:InvokeFunction. Para obter mais informações, consulte Controle de acesso.
Noções básicas sobre invocação de URL de função
Se o URL de função usar o tipo de autenticação, AWS_IAMvocê deve assinar cada solicitação HTTP usando a {AWS Signature Version 4 (SigV4)}. Ferramentas como Postman
Se não usar uma ferramenta para assinar as solicitações HTTP ao URL de função, você deverá assinar manualmente cada solicitação usando o SigV4. Quando o URL de função recebe uma solicitação, o Lambda também analisa a assinatura do Sigv4. O Lambda só processa a solicitação se as assinaturas corresponderem. Para obter instruções sobre como assinar manualmente as solicitações com o SigV4, consulte Assinar solicitações da AWS com o Signature versão 4, no Guia Referência geral da Amazon Web Services.
Se o URL de função usar o tipo de autenticação NONE, você não precisará assinar as solicitações usando o Sigv4. Você pode invocar a função usando um navegador da Web, curl, Postman ou qualquer cliente HTTP.
Para testar simples solicitações GET à função, use um navegador da Web. Por exemplo, se o URL de função for https://abcdefg.lambda-url.us-east-1.on.aws e aceitar um parâmetro de string message, o URL de solicitação pode ser semelhante a este:
https://abcdefg.lambda-url.us-east-1.on.aws/?message=HelloWorld
Para testar outras solicitações HTTP, como uma solicitação POST, você pode usar uma ferramenta como curl. Por exemplo, se quiser incluir alguns dados JSON em uma solicitação POST ao URL de função, você poderá usar o seguinte comando curl:
curl -v 'https://abcdefg.lambda-url.us-east-1.on.aws/?message=HelloWorld' \ -H 'content-type: application/json' \ -d '{ "example": "test" }'
Cargas úteis de solicitações e respostas
Quando um cliente chama o URL de função, o Lambda mapeia a solicitação para um objeto de evento antes de passá-la para a função. A resposta da função é então mapeada para uma resposta HTTP que o Lambda envia de volta ao cliente por meio do URL de função.
Os formatos de evento de solicitação e resposta seguem o mesmo esquema do formato de carga útil do Amazon API Gateway versão 2.0.
Formato de carga útil de solicitação
Uma carga útil de solicitação tem a seguinte estrutura:
{ "version": "2.0", "routeKey": "$default", "rawPath": "/my/path", "rawQueryString": "parameter1=value1¶meter1=value2¶meter2=value", "cookies": [ "cookie1", "cookie2" ], "headers": { "header1": "value1", "header2": "value1,value2" }, "queryStringParameters": { "parameter1": "value1,value2", "parameter2": "value" }, "requestContext": { "accountId": "123456789012", "apiId": "<urlid>", "authentication": null, "authorizer": { "iam": { "accessKey": "AKIA...", "accountId": "111122223333", "callerId": "AIDA...", "cognitoIdentity": null, "principalOrgId": null, "userArn": "arn:aws:iam::111122223333:user/example-user", "userId": "AIDA..." } }, "domainName": "<url-id>.lambda-url.us-west-2.on.aws", "domainPrefix": "<url-id>", "http": { "method": "POST", "path": "/my/path", "protocol": "HTTP/1.1", "sourceIp": "123.123.123.123", "userAgent": "agent" }, "requestId": "id", "routeKey": "$default", "stage": "$default", "time": "12/Mar/2020:19:03:58 +0000", "timeEpoch": 1583348638390 }, "body": "Hello from client!", "pathParameters": null, "isBase64Encoded": false, "stageVariables": null }
| Parameter | Descrição | Exemplo |
|---|---|---|
|
|
A versão do formato de carga útil para esse evento. Atualmente, os URLs de função do Lambda são compatíveis com o formato de carga útil versão 2.0. |
|
|
|
URLs de função não usam esse parâmetro. O Lambda define isso como |
|
|
|
O caminho da solicitação. Por exemplo, se o URL de solicitação for |
|
|
|
A string bruta que contém os parâmetros de string de consulta da solicitação. Os caracteres compatíveis incluem |
|
|
|
Uma matriz contendo todos os cookies enviados como parte da solicitação. |
|
|
|
A lista de cabeçalhos de solicitação, apresentada como pares chave-valor. |
|
|
|
Os parâmetros de consulta para a solicitação. Por exemplo, se o URL de solicitação for |
|
|
|
Um objeto que contém informações adicionais sobre a solicitação, como o |
|
|
|
O ID da Conta da AWS do proprietário da função. |
|
|
|
O ID do URL de função. |
|
|
|
URLs de função não usam esse parâmetro. O Lambda define isso como |
|
|
|
Um objeto que contém informações sobre a identidade do chamador, se o URL de função usar o tipo de autenticação |
|
|
|
A chave de acesso da identidade do chamador. |
|
|
|
O ID da Conta da AWS da identidade do chamador. |
|
|
|
O ID (ID do usuário) do chamador. |
|
|
|
URLs de função não usam esse parâmetro. O Lambda define isso como |
|
|
|
O ID da organização da entidade principal associado à identidade do chamador. |
|
|
|
O nome do recurso da Amazon (ARN) do usuário da identidade do chamador. |
|
|
|
O ID de usuário da identidade do chamador. |
|
|
|
O nome do domínio do URL de função. |
|
|
|
O prefixo do domínio do URL de função. |
|
|
|
Um objeto que contém detalhes sobre a solicitação HTTP. |
|
|
|
O método HTTP usado na solicitação. Os valores válidos incluem |
|
|
|
O caminho da solicitação. Por exemplo, se o URL de solicitação for |
|
|
|
O protocolo da solicitação. |
|
|
|
O endereço IP de origem da conexão TCP imediata que está fazendo a solicitação. |
|
|
|
O valor do cabeçalho da solicitação User-Agent. |
|
|
|
O ID da solicitação da invocação. Você pode usar esse ID para logs de invocações relacionadas à função. |
|
|
|
URLs de função não usam esse parâmetro. O Lambda define isso como |
|
|
|
URLs de função não usam esse parâmetro. O Lambda define isso como |
|
|
|
O timestamp da solicitação. |
|
|
|
O timestamp da solicitação, no horário da era UNIX. |
|
|
|
O corpo da solicitação. Se o tipo de conteúdo da solicitação for binário, o corpo será codificado na base 64. |
|
|
|
URLs de função não usam esse parâmetro. O Lambda define isso como |
|
|
|
|
|
|
|
URLs de função não usam esse parâmetro. O Lambda define isso como |
|
Formato de carga útil de resposta
Quando a função retorna uma resposta, o Lambda analisa a resposta e converte-a em uma resposta HTTP. As cargas úteis de resposta de função têm o seguinte formato:
{ "statusCode": 201, "headers": { "Content-Type": "application/json", "My-Custom-Header": "Custom Value" }, "body": "{ \"message\": \"Hello, world!\" }", "cookies": [ "Cookie_1=Value1; Expires=21 Oct 2021 07:48 GMT", "Cookie_2=Value2; Max-Age=78000" ], "isBase64Encoded": false }
O Lambda infere o formato de resposta para você. Se a função do Lambda retornar JSON válido e não retornar um statusCode, o Lambda pressupõe o seguinte:
-
statusCodeis200.nota
Os
statusCodeválidos vão de 100 a 599. -
content-typeisapplication/json. -
bodyé a resposta da função. -
isBase64Encodedisfalse.
Os exemplos a seguir mostram como a saída da função do Lambda é mapeada para a carga útil da resposta e como a carga útil da resposta é mapeada para a resposta HTTP final. Quando o cliente invoca o URL de função, ele vê a resposta HTTP.
Exemplo de saída para uma resposta de string
| Saída da função do Lambda | Saída de resposta interpretada | Resposta HTTP (o que o cliente vê) |
|---|---|---|
|
|
|
Exemplo de saída para uma resposta em JSON
| Saída da função do Lambda | Saída de resposta interpretada | Resposta HTTP (o que o cliente vê) |
|---|---|---|
|
|
|
Exemplo de saída para uma resposta personalizada
| Saída da função do Lambda | Saída de resposta interpretada | Resposta HTTP (o que o cliente vê) |
|---|---|---|
|
|
|
Cookies
Para retornar cookies da função, não adicione manualmente cabeçalhos set-cookie. Em vez disso, inclua os cookies no objeto de carga útil da resposta. O Lambda interpreta isso automaticamente e adiciona-os como cabeçalhos set-cookie na resposta HTTP, como no exemplo a seguir.
| Saída da função do Lambda | Resposta HTTP (o que o cliente vê) |
|---|---|
|
|