AWS Lambda
Guia do desenvolvedor

Uso do AWS Lambda com o Amazon SQS

Você pode usar uma função do AWS Lambda para processar mensagens em uma fila padrão do Amazon Simple Queue Service (Amazon SQS). Com o Amazon SQS, você pode descarregar tarefas de um componente do aplicativo enviando-as a uma fila e processando-as de forma assíncrona.

O Lambda sonda a fila e invoca sua função de forma síncrona com um evento que contém a fila de mensagens. O Lambda lê mensagens em lotes e invoca sua função uma vez para cada lote. Quando sua função processa com êxito um lote, o Lambda exclui suas mensagens da fila.

exemplo Evento de mensagem do Amazon SQS

{ "Records": [ { "messageId": "059f36b4-87a3-44ab-83d2-661975830a7d", "receiptHandle": "AQEBwJnKyrHigUMZj6rYigCgxlaS3SLy0a...", "body": "test", "attributes": { "ApproximateReceiveCount": "1", "SentTimestamp": "1545082649183", "SenderId": "AIDAIENQZJOLO23YVJ4VO", "ApproximateFirstReceiveTimestamp": "1545082649185" }, "messageAttributes": {}, "md5OfBody": "098f6bcd4621d373cade4e832627b4f6", "eventSource": "aws:sqs", "eventSourceARN": "arn:aws:sqs:us-east-2:123456789012:my-queue", "awsRegion": "us-east-2" }, { "messageId": "2e1424d4-f796-459a-8184-9c92662be6da", "receiptHandle": "AQEBzWwaftRI0KuVm4tP+/7q1rGgNqicHq...", "body": "test", "attributes": { "ApproximateReceiveCount": "1", "SentTimestamp": "1545082650636", "SenderId": "AIDAIENQZJOLO23YVJ4VO", "ApproximateFirstReceiveTimestamp": "1545082650649" }, "messageAttributes": {}, "md5OfBody": "098f6bcd4621d373cade4e832627b4f6", "eventSource": "aws:sqs", "eventSourceARN": "arn:aws:sqs:us-east-2:123456789012:my-queue", "awsRegion": "us-east-2" } ] }

O Lambda usa a sondagem longa para pesquisar uma fila até que ela se torne ativa. Quando as mensagens estão disponíveis, o Lambda lê até 5 lotes e os envia para sua função. Se as mensagens ainda estiverem disponíveis, o Lambda aumentará o número de processos de leitura de lotes em até 60 instâncias adicionais por minuto. O número máximo de lotes que podem ser processados simultaneamente por um mapeamento da origem do evento é 1000.

Quando o Lambda lê um lote, as mensagens permanecem na fila, mas são ocultadas durante o tempo limite de visibilidade da fila. Se a função processar com êxito um lote, o Lambda excluirá as mensagens da fila. Se a função for limitada, retornar um erro ou não responder, a mensagem ficará visível novamente. Todas as mensagens em um lote com falha retornam à fila e, portanto, seu código de função deve ser capaz de processar a mesma mensagem várias vezes sem efeitos colaterais.

Configurar uma fila para uso com o Lambda

Crie uma fila padrão do Amazon SQS para servir como uma fonte de eventos para sua função do Lambda. Depois, configure a fila para permitir que a sua função do Lambda processe cada lote de eventos — e para o Lambda tentar novamente em resposta a erros de limitação à medida que a escala aumenta.

Para permitir que a sua função tenha tempo para processar cada lote de registros, defina o tempo limite de visibilidade da fila de origem para pelo menos 6 vezes o tempo limite configurado na sua função. O tempo extra permite que o Lambda repita o processo se a execução da sua função for limitada enquanto sua função está processando um lote anterior.

Se uma mensagem falhar no processamento várias vezes, o Amazon SQS poderá enviá-la para uma fila dead-letter. Configure uma fila de mensagens mortas na sua fila de origem para reter mensagens que falharam no processamento para resolução de problemas. Defina o maxReceiveCount na política de redirecionamento da fila como pelo menos 5 para evitar o envio de mensagens para a fila dead-letter devido à limitação.

nota

Certifique-se de configurar a fila dead-letter na fila de origem, e não na função do Lambda. A fila dead-letter que você configura em uma função é usada para a fila de invocação assíncrona da função, e não para filas de origem de evento.

Permissões da função de execução

O Lambda precisa das seguintes permissões para gerenciar mensagens em sua fila do Amazon SQS. Adicione-as à função de execução da sua função.

Para obter mais informações, consulte Função de execução do AWS Lambda.

Configurar uma fila como uma origem de eventos

Crie um mapeamento de fonte do evento para orientar o Lambda a enviar itens da sua fila para uma função do Lambda. Você pode criar vários mapeamentos da fonte do evento para processar itens de várias filas com uma única função. Quando o Lambda invoca a função de destino, o evento pode conter vários itens, até um tamanho de lote máximo configurável.

Para configurar sua função para leitura a partir do Amazon SQS no console do Lambda, crie um gatilho SQS.

Para criar um gatilho

  1. Abra a página Functions (Funções) do console do Lambda.

  2. Escolha uma função.

  3. Em Designer, escolha Add trigger (Adicionar gatilho).

  4. Escolha um tipo de gatinho.

  5. Configure as opções necessárias e, em seguida, escolha Add (Adicionar).

O Lambda oferece suporte às seguintes opções das fontes de evento do Amazon SQS.

Opções de fonte do evento

  • Fila do SQS – A fila do Amazon SQS de onde ler os registros.

  • Tamanho do lote – O número de itens a serem lidos da fila em cada lote, até 10. O evento pode conter um número menor de itens se o lote que o Lambda ler da fila tiver um número menor de itens.

  • Enabled (Habilitado) – Desabilitar a fonte de eventos para interromper o processamento de itens.

Para gerenciar a configuração da fonte do evento posteriormente, escolha o gatilho no designer.

Configure o tempo limite de sua função para permitir tempo suficiente para processar um lote inteiro de itens. Se os itens levarem muito tempo para serem processados, escolha um tamanho de lote menor. Um tamanho de lote grande pode melhorar a eficiência de cargas de trabalho muito rápidas ou com muita sobrecarga. No entanto, se a sua função retornar um erro, todos os itens no lote retornarão à fila. Se você configurar a simultaneidade reservada em sua função, defina um mínimo de 5 execuções simultâneas para reduzir a chance de erros de limitação quando o Lambda invoca sua função.

APIs do mapeamento da fonte de eventos

Para gerenciar os mapeamentos de origem de eventos com a AWS CLI ou o AWS SDK, use as seguintes APIs.

O exemplo a seguir usa a AWS Command Line Interface para mapear uma função chamada my-function para uma fila do Amazon SQS especificada pelo nome de recurso da Amazon (ARN), com um tamanho de lote de 5

$ aws lambda create-event-source-mapping --function-name my-function --batch-size 5 \ --event-source-arn arn:aws:sqs:us-east-2:123456789012:my-queue { "UUID": "2b733gdc-8ac3-cdf5-af3a-1827b3b11284", "BatchSize": 5, "EventSourceArn": "arn:aws:sqs:us-east-2:123456789012:my-queue", "FunctionArn": "arn:aws:lambda:us-east-2:123456789012:function:my-function", "LastModified": 1541139209.351, "State": "Creating", "StateTransitionReason": "USER_INITIATED" }