Funções Lambda como destinos - Elastic Load Balancing

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Funções Lambda como destinos

Você pode registrar suas funções Lambda como destinos e configurar uma regra de listener para encaminhar solicitações ao grupo de destino para sua função Lambda. Quando o load balancer encaminha a solicitação para um grupo de destino com uma função Lambda como um destino, ele invoca sua função Lambda e transmite o conteúdo da solicitação para a função Lambda, no formato JSON.

Limits

  • A função do Lambda e o grupo de destino devem estar na mesma conta e na mesma região.

  • O tamanho máximo do corpo da solicitação que você pode enviar para uma função Lambda é de 1 MB. Para limites de tamanho relacionados, consulteLimites de cabeçalho HTTP.

  • O tamanho máximo da resposta JSON que a função Lambda pode enviar é de 1 MB.

  • Os WebSockets não são compatíveis. Solicitações de atualização são rejeitadas com um código HTTP 400.

  • As Local Zones não são suportadas.

Para uma demonstração, consulteO destino do Lambda no Application Load Balancer.

Preparar a função do Lambda

As recomendações a seguir se aplicam se você estiver usando sua função Lambda com um Application Load Balancer.

Permissões para invocar a função do Lambda

Se criar o grupo de destino e registrar a função Lambda usando o AWS Management Console, o console adicionará as permissões necessárias à sua política de função Lambda em seu nome. Caso contrário, depois de criar o grupo de destino e registrar a função usando aAWS CLI, você deve usar aExd-permissõesPara conceder ao Elastic Load Balancing permissão para invocar sua função Lambda. Recomendamos que você inclua o parâmetro --source-arn para restringir a invocação da função ao grupo de destino especificado.

aws lambda add-permission \ --function-name lambda-function-arn-with-alias-name \ --statement-id elb1 \ --principal elasticloadbalancing.amazonaws.com \ --action lambda:InvokeFunction \ --source-arn target-group-arn

Versionamento da função do Lambda

É possível registrar uma função Lambda por grupo de destino. Para garantir que você possa alterar sua função Lambda e que o load balancer sempre invoque a versão atual da função Lambda, crie um alias de função e inclua o alias no ARN da função ao registrar a função Lambda com o load balancer. Para obter mais informações, consulteAWS Lambdaversionamento de funções e aliaseseMudança de tráfego usando aliasesnoAWS LambdaGuia do desenvolvedor.

Tempo-limite da função

O load balancer aguarda até que sua função Lambda responda ou expire. Recomendamos que você configure o tempo-limite da função Lambda com base no tempo de execução esperado. Para obter informações sobre o valor de tempo-limite padrão e como alterá-lo, consulteBasicAWS Lambdaconfiguração da função. Para obter informações sobre o valor de tempo-limite máximo que você pode configurar, consulteAWS Lambdalimites.

Criar um grupo-alvo para a função Lambda

Crie um grupo de destino, que é usado no roteamento da solicitação. Se o conteúdo da solicitação corresponder a uma regra de listener com uma ação para encaminhá-la para esse grupo de destino, o load balancer invocará a função Lambda registrada.

New console

Para criar um grupo de destino e registrar a função Lambda usando o novo console

  1. Abra o console do Amazon EC2 em https://console.aws.amazon.com/ec2/.

  2. No painel de navegação, em LOAD BALANCING, selecione Grupos de destino.

  3. Selecione Criar grupo de destino.

  4. para oEscolha um tipo de destino, selecioneFunção do Lambda.

  5. Em Nome do grupo de destino, digite um nome para o novo grupo de destino.

  6. (Opcional) Para habilitar as verificações de integridade do, escolhaHabilitar onoVerificações de integridadeseção.

  7. (Opcional) Adicione uma ou mais tags, da seguinte forma:

    1. Expanda a seção Tags.

    2. Escolha Adicionar tag.

    3. Digite a chave de tag e o valor da tag.

  8. Escolha Next (Próximo).

  9. Especifique uma única função do Lambda ou omita esta etapa e especifique uma função do Lambda posteriormente.

  10. Selecione Criar grupo de destino.

Old console

Para criar um grupo de destino e registrar a função Lambda usando o console antigo

  1. Abra o console do Amazon EC2 em https://console.aws.amazon.com/ec2/.

  2. No painel de navegação, em LOAD BALANCING, selecione Grupos de destino.

  3. Selecione Criar grupo de destino.

  4. Em Nome do grupo de destino, digite um nome para o novo grupo de destino.

  5. Para Target type (Tipo de destino), selecione Lambda function (Função Lambda).

  6. Em Lambda function (Função Lambda), siga um destes procedimentos

    • Selecionar a função Lambda

    • Criar uma nova função Lambda e selecioná-la

    • Registrar a função Lambda depois de criar o grupo de destino

  7. (Opcional) Para habilitar as verificações de integridade, escolha Health check (Verificação de integridade), Enable (Habilitar).

  8. Escolha Create (Criar).

Para criar um grupo de destino e cancelar o registro da função Lambda usando a AWS CLI

Use os comandos create-target-group e register-targets.

Receba eventos do load balancer

O load balancer oferece suporte a invocações do Lambda para solicitações por protocolos HTTP e HTTPS. O load balancer envia um evento no formato JSON. O load balancer adiciona os seguintes cabeçalhos a todas as solicitações: X-Amzn-Trace-Id, X-Forwarded-For, X-Forwarded-Port e X-Forwarded-Proto.

Se ocontent-encodingO cabeçalho está presente, o load balancer Base64 codifica o corpo e define o corpo e defineisBase64Encodedparatrue.

Se ocontent-encodingcabeçalho não está presente, a codificação Base64 depende do tipo de conteúdo. Para os seguintes tipos, o balanceador de carga envia o corpo como está e defineisBase64Encodedparafalse: text/*, application/json, application/javascript e application/xml. Caso contrário, o load balancer Base64 codifica o corpo e defineisBase64Encodedparatrue.

O comando a seguir é um exemplo de evento.

{ "requestContext": { "elb": { "targetGroupArn": "arn:aws:elasticloadbalancing:region:123456789012:targetgroup/my-target-group/6d0ecf831eec9f09" } }, "httpMethod": "GET", "path": "/", "queryStringParameters": {parameters}, "headers": { "accept": "text/html,application/xhtml+xml", "accept-language": "en-US,en;q=0.8", "content-type": "text/plain", "cookie": "cookies", "host": "lambda-846800462-us-east-2.elb.amazonaws.com", "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6)", "x-amzn-trace-id": "Root=1-5bdb40ca-556d8b0c50dc66f0511bf520", "x-forwarded-for": "72.21.198.66", "x-forwarded-port": "443", "x-forwarded-proto": "https" }, "isBase64Encoded": false, "body": "request_body" }

Responder ao load balancer

A resposta da função do Lambda deve incluir o status de codificação Base64, o código do status e os cabeçalhos. É possível omitir o corpo.

Para incluir um conteúdo binário no corpo da resposta, você deve codificar o conteúdo em Base64 e definir isBase64Encoded como true. O load balancer decodifica o conteúdo para recuperar o conteúdo binário e o envia ao cliente no corpo da resposta HTTP.

O load balancer não manterá cabeçalhos hop-by-hop, como Connection ou Transfer-Encoding. É possível omitir o cabeçalho Content-Length porque o load balancer o calcula antes de enviar respostas aos clientes.

A seguir, um exemplo de resposta de uma função Lambda.

{ "isBase64Encoded": false, "statusCode": 200, "statusDescription": "200 OK", "headers": { "Set-cookie": "cookies", "Content-Type": "application/json" }, "body": "Hello from Lambda (optional)" }

Para modelos de função do Lambda que funcionam com Application Load Balancers, consulteApplication Load Balancer (balanceador de carga)no github. Como alternativa, abra aConsole do Lambda, crie uma função e selecione uma das opções a seguir naAWS Serverless Application Repository:

  • ALB-lambda-Target-HelloWorld

  • ALB-Lambda-Target-UploadFiletoS3

  • ALB-Lambda-Target-BinaryResponse

  • ALB-Lambda-Target-WhatisMyIP

Cabeçalhos de vários valores

Se as solicitações de um cliente ou respostas de uma função do Lambda contiverem cabeçalhos de vários valores ou contiverem o mesmo cabeçalho várias vezes, ou parâmetros de consulta com vários valores para a mesma chave, você poderá habilitar o suporte para a sintaxe de cabeçalho de vários valores. Após habilitar cabeçalhos de vários valores, os cabeçalhos e os parâmetros de consulta trocados entre o load balancer e a função do Lambda usam matrizes em vez de strings. Se você não habilitar a sintaxe de cabeçalho de vários valores e um cabeçalho ou um parâmetro de consulta tiver vários valores, o load balancer usará o último valor recebido.

Solicitações com cabeçalhos de vários valores

Os nomes dos campos usados ​​para cabeçalhos e parâmetros de string de consulta diferem dependendo da ativação de cabeçalhos de vários valores para o grupo de destino.

A solicitação de exemplo a seguir tem dois parâmetros de consulta com a mesma chave:

http://www.example.com?&myKey=val1&myKey=val2

Com o formato padrão, o load balancer usa o último valor enviado pelo cliente e envia um evento que inclui parâmetros de string de consulta que usam queryStringParameters. Por exemplo:

"queryStringParameters": { "myKey": "val2"},

Se você ativar cabeçalhos de vários valores, o load balancer usará os dois valores de chave enviados pelo cliente e enviará um evento que inclui parâmetros de string de consulta usando multiValueQueryStringParameters. Por exemplo:

"multiValueQueryStringParameters": { "myKey": ["val1", "val2"] },

Da mesma forma, suponha que o cliente envie uma solicitação com dois cookies no cabeçalho:

"cookie": "name1=value1", "cookie": "name2=value2",

Com o formato padrão, o load balancer usa o último cookie enviado pelo cliente e envia um evento que inclui cabeçalhos que usam headers. Por exemplo:

"headers": { "cookie": "name2=value2", ... },

Se você ativar cabeçalhos de vários valores, o load balancer usará os dois cookies enviados pelo cliente e enviará um evento que inclui cabeçalhos que usam multiValueHeaders. Por exemplo:

"multiValueHeaders": { "cookie": ["name1=value1", "name2=value2"], ... },

Se os parâmetros de consulta forem codificados em URL, o load balancer não os decodificará. Decodifique-os na função do Lambda.

Respostas com cabeçalhos de vários valores

Os nomes dos campos usados ​​para cabeçalhos diferem dependendo da ativação de cabeçalhos de vários valores para o grupo de destino. Você deve usar multiValueHeaders, se tiver ativado cabeçalhos de vários valores e headers de outra forma.

Com o formato padrão, é possível especificar um único cookie:

{ "headers": { "Set-cookie": "cookie-name=cookie-value;Domain=myweb.com;Secure;HttpOnly", "Content-Type": "application/json" }, }

Se você habilitar os cabeçalhos de vários valores, será necessário especificar vários cookies da seguinte maneira:

{ "multiValueHeaders": { "Set-cookie": ["cookie-name=cookie-value;Domain=myweb.com;Secure;HttpOnly","cookie-name=cookie-value;Expires=May 8, 2019"], "Content-Type": ["application/json"] }, }

Permitir cabeçalhos de vários valores

Você pode habilitar ou desabilitar cabeçalhos de vários valores para um grupo de destino com o tipo de destino lambda.

New console

Para habilitar cabeçalhos de vários valores usando o novo console

  1. Abra o console do Amazon EC2 em https://console.aws.amazon.com/ec2/.

  2. No painel de navegação, em LOAD BALANCING, selecione Grupos de destino.

  3. Escolha o nome do grupo de destino para abrir sua página de detalhes.

  4. NoDetalhes do grupo doguia, na guiaAtributos.seção, selecioneEdite.

  5. Selecione ou desmarqueCabeçalhos de vários valores.

  6. Selecione Save changes.

Old console

Para habilitar cabeçalhos de vários valores usando o console antigo

  1. Abra o console do Amazon EC2 em https://console.aws.amazon.com/ec2/.

  2. No painel de navegação, em LOAD BALANCING, selecione Grupos de destino.

  3. Selecione o grupo de destino.

  4. Na guia Descrição, selecione Editar atributos.

  5. Em Multi value headers (Cabeçalhos de vários valores), selecione Enable (Ativar).

  6. Escolha Save (Salvar).

Para habilitar cabeçalhos de vários valores usando a AWS CLI

Use o comando modify-target-group-attributes com o atributo lambda.multi_value_headers.enabled.

Permitir verificações de integridade

Por padrão, as verificações de integridade estão desabilitadas para grupos de destino do tipo lambda. Você pode habilitar verificações de integridade para implementar o failover de DNS com o Amazon Route 53. A função Lambda pode verificar a integridade de um serviço de downstream antes de responder à solicitação de verificação de integridade. Se a resposta da função Lambda indicar uma falha na verificação de integridade, esta será passada para o Route 53. Você pode configurar o Route 53 para executar o failover para uma pilha de aplicativos de backup.

Você será cobrado por verificações de integridade como por qualquer invocação da função Lambda.

A seguir, o formato do evento de verificação de integridade enviado à sua função Lambda. Para verificar se um evento é um evento de verificação de integridade, verifique o valor do campo do agente de usuário. O agente de usuário para verificações de integridade é ELB-HealthChecker/2.0.

{ "requestContext": { "elb": { "targetGroupArn": "arn:aws:elasticloadbalancing:region:123456789012:targetgroup/my-target-group/6d0ecf831eec9f09" } }, "httpMethod": "GET", "path": "/", "queryStringParameters": {}, "headers": { "user-agent": "ELB-HealthChecker/2.0" }, "body": "", "isBase64Encoded": false }
New console

Para habilitar verificações de integridade para um grupo de destino usando o novo console

  1. Abra o console do Amazon EC2 em https://console.aws.amazon.com/ec2/.

  2. No painel de navegação, em LOAD BALANCING, selecione Grupos de destino.

  3. Escolha o nome do grupo de destino para abrir sua página de detalhes.

  4. NoDetalhes do grupo doguia, na guiaConfigurações de verificação de integridadeSeção, escolhaEdite.

  5. para oVerificações de integridade, selecioneHabilitar o.

  6. Selecione Save changes.

Old console

Para habilitar verificações de integridade para um grupo de destino usando o console antigo

  1. Abra o console do Amazon EC2 em https://console.aws.amazon.com/ec2/.

  2. No painel de navegação, em LOAD BALANCING, selecione Grupos de destino.

  3. Selecione o grupo de destino.

  4. Na guia Health checks (Verificações de integridade), selecione Edit health check (Editar verificação de integridade).

  5. Em Health check (Verificação de integridade), selecione Enable (Ativar).

  6. Escolha Save (Salvar).

Para habilitar verificações de integridade para um grupo de destino usando a AWS CLI

Use o comando modify-target-group com a opção --health-check-enabled.

Cancelar o registro da função do Lambda

Se não precisar mais enviar tráfego para sua função Lambda, você poderá cancelar o registro. Depois de cancelar o registro de uma função Lambda, as solicitações em andamento falham com erros HTTP 5XX.

Para substituir uma função Lambda, recomendamos criar um grupo de destino, registrar a nova função com o novo grupo de destino e atualizar as regras do listener para usar o novo grupo de destino em vez do existente.

New console

Para cancelar o registro da função Lambda usando o novo console

  1. Abra o console do Amazon EC2 em https://console.aws.amazon.com/ec2/.

  2. No painel de navegação, em LOAD BALANCING, selecione Grupos de destino.

  3. Escolha o nome do grupo de destino para abrir sua página de detalhes.

  4. Na guia Targets (Destinos), selecione Deregister (Cancelar registro).

  5. Quando a confirmação for solicitada, escolha Cancelar registro.

Old console

Para cancelar o registro da função Lambda usando o console antigo

  1. Abra o console do Amazon EC2 em https://console.aws.amazon.com/ec2/.

  2. No painel de navegação, em LOAD BALANCING, selecione Grupos de destino.

  3. Selecione o grupo de destino.

  4. Na guia Targets (Destinos), selecione Deregister (Cancelar registro).

  5. Quando a confirmação for solicitada, escolha Cancelar registro.

Para cancelar o registro da função Lambda usando a AWS CLI

Use o comando deregister-targets.