Neste tutorial, você criará uma função do Lambda que consome mensagens de uma fila do Amazon Simple Queue Service (Amazon SQS). A função do Lambda é executada sempre que uma nova mensagem é adicionada à fila. A função grava as mensagens em um fluxo do Amazon CloudWatch Logs. O diagrama a seguir mostrará os recursos da AWS que você usará para concluir o tutorial.

Para concluir este tutorial, execute as seguintes tarefas:
-
Crie uma função do Lambda que grave mensagens no CloudWatch Logs.
-
Criar uma fila do Amazon SQS.
-
Crie um mapeamento da origem do evento do Lambda. O mapeamento da origem do evento realiza a leitura da fila do Amazon SQS e invoca a função do Lambda quando uma nova mensagem é adicionada.
-
Teste a configuração ao adicionar mensagens à sua fila e ao monitorar os resultados no CloudWatch Logs.
Pré-requisitos
Se você ainda não instalou a AWS Command Line Interface, siga as etapas em Instalar ou atualizar a versão mais recente da AWS CLI para instalá-la.
O tutorial requer um terminal de linha de comando ou um shell para executar os comandos. No Linux e no macOS, use o gerenciador de pacotes e de shell de sua preferência.
nota
No Windows, alguns comandos da CLI do Bash que você costuma usar com o Lambda (como zip
) não são compatíveis com os terminais integrados do sistema operacional. Para obter uma versão do Ubuntu com o Bash integrada no Windows, instale o Subsistema do Windows para Linux
Criar a função de execução

Um perfil de execução é um perfil do AWS Identity and Access Management (IAM) que concede a uma função do Lambda permissão para acessar recursos e Serviços da AWS. Para permitir que a função realize a leitura de itens do Amazon SQS, anexe a política de permissões AWSLambdaSQSQueueExecutionRole.
Criar um perfil de execução e anexar uma política de permissões do Amazon SQS
-
Abra a página Funções
no console do IAM. -
Selecione Criar perfil.
-
Em Tipo de entidade confiável, escolha Serviços da AWS.
-
Em Caso de uso, escolha Lambda.
-
Escolha Próximo.
-
Na caixa de pesquisa Políticas de permissões, insira
AWSLambdaSQSQueueExecutionRole
. -
Selecione a política AWSLambdaSQSQueueExecutionRole e, em seguida, escolha Próximo.
-
Em Detalhes do perfil, para Nome do perfil, insira
lambda-sqs-role
e, em seguida, escolha Criar perfil.
Após a criação da função, anote o nome de recurso da Amazon (ARN) do seu perfil de execução. Você precisará dele em etapas posteriores.
Criar a função

Crie uma função do Lambda queprocessesuas mensagens do Amazon SQS. O código da função registra o corpo da mensagem do Amazon SQS no CloudWatch Logs.
Este tutorial usa o runtime do Node.js 18.x, mas também fornecemos exemplos de arquivos em outras linguagens de runtime. Você pode selecionar a guia na caixa a seguir para ver o código do runtime do seu interesse. O código JavaScript que você usará nesta etapa é o primeiro exemplo mostrado na guia JavaScript.
- SDK para .NET
-
nota
Há mais no GitHub. Encontre o exemplo completo e saiba como configurar e executar no repositório dos Exemplos sem servidor
. Consumir um evento do SQS com o Lambda usando .NET.
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 using Amazon.Lambda.Core; using Amazon.Lambda.SQSEvents; // Assembly attribute to enable the Lambda function's JSON input to be converted into a .NET class. [assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.SystemTextJson.DefaultLambdaJsonSerializer))] namespace SqsIntegrationSampleCode { public async Task FunctionHandler(SQSEvent evnt, ILambdaContext context) { foreach (var message in evnt.Records) { await ProcessMessageAsync(message, context); } context.Logger.LogInformation("done"); } private async Task ProcessMessageAsync(SQSEvent.SQSMessage message, ILambdaContext context) { try { context.Logger.LogInformation($"Processed message {message.Body}"); // TODO: Do interesting work based on the new message await Task.CompletedTask; } catch (Exception e) { //You can use Dead Letter Queue to handle failures. By configuring a Lambda DLQ. context.Logger.LogError($"An error occurred"); throw; } } }
Criar uma função do Lambda em Node.js
-
Crie um diretório para o projeto e depois mude para esse diretório.
mkdir sqs-tutorial cd sqs-tutorial
-
Copie o código JavaScript de amostra em um novo arquivo denominado
index.js
. -
Crie um pacote de implantação usando o comando
zip
a seguir.zip function.zip index.js
-
Crie uma função do Lambda usando o comando create-function
da AWS CLI. Para o parâmetro role
, insira o ARN da função de execução criada anteriormente.nota
A função do Lambda e a fila do Amazon SQS devem estar na mesma Região da AWS.
aws lambda create-function --function-name ProcessSQSRecord \ --zip-file fileb://function.zip --handler index.handler --runtime nodejs18.x \
--role arn:aws:iam::
111122223333
:role/lambda-sqs-role
Testar a função

Invoque sua função do Lambda manualmente usando o comando da invoke
AWS CLI e um evento do Amazon SQS de amostra.
Invocar a função do Lambda com um evento de amostra
-
Salve o JSON a seguir como um arquivo denominado
input.json
. Esse JSON simula um evento que o Amazon SQS pode enviar para a função do Lambda, no qual"body"
contém a mensagem real da fila. Neste exemplo, a mensagem é"test"
.exemplo Evento do Amazon SQS
Este é um evento de teste, portanto, você não precisa alterar a mensagem ou o número da conta.
{ "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-1:111122223333:my-queue", "awsRegion": "us-east-1" } ] }
-
Execute o comando invoke
da AWS CLI apresentado a seguir. Esse comando retorna os logs do CloudWatch na resposta. Para obter mais informações sobre recuperação de logs, consulte Acesso aos logs com a AWS CLI. aws lambda invoke --function-name ProcessSQSRecord --payload file://input.json out --log-type Tail \ --query 'LogResult' --output text --cli-binary-format raw-in-base64-out | base64 --decode
A opção cli-binary-format será necessária se você estiver usando a AWS CLI versão 2. Para que essa seja a configuração padrão, execute
aws configure set cli-binary-format raw-in-base64-out
. Para obter mais informações, consulte A AWS CLI comporta opções de linha de comando globais no Guia do usuário da AWS Command Line Interface versão 2. -
Encontre o log
INFO
na resposta. É aqui que a função do Lambda registra em log o corpo da mensagem. Você deve ver logs semelhantes a este:2023-09-11T22:45:04.271Z 348529ce-2211-4222-9099-59d07d837b60 INFO Processed message test 2023-09-11T22:45:04.288Z 348529ce-2211-4222-9099-59d07d837b60 INFO done
Criar uma fila do Amazon SQS

Crie uma fila do Amazon SQS que a função do Lambda possa usar como uma fonte de eventos. A função do Lambda e a fila do Amazon SQS devem estar na mesma Região da AWS.
Para criar uma fila
-
Abra o console do Amazon SQS
. -
Selecione Criar fila.
-
Insira um nome para a fila. Deixe todas as outras opções nas configurações padrão.
-
Selecione Criar fila.
Depois de criar a fila, anote seu ARN. Você precisará dele na próxima etapa, quando for associar a fila à função do Lambda.
Configurar a origem de evento

Conecte a fila do Amazon SQS à função do Lambda ao criar um mapeamento da origem do evento. O mapeamento da origem do evento realiza a leitura da fila do Amazon SQS e invoca a função do Lambda quando uma nova mensagem é adicionada.
Para criar um mapeamento entre a fila do Amazon SQS e a função do Lambda, use o comando create-event-source-mapping
aws lambda create-event-source-mapping --function-name ProcessSQSRecord --batch-size 10 \ --event-source-arn arn:aws:sqs:
us-east-1:111122223333:my-queue
Para obter uma lista dos mapeamentos da origem dos eventos, use o comando list-event-source-mappings
aws lambda list-event-source-mappings --function-name ProcessSQSRecord
Envie uma mensagem de teste

Enviar uma mensagem do Amazon SQS para a função do Lambda
-
Abra o console do Amazon SQS
. -
Escolha a fila que você criou anteriormente.
-
Escolha Enviar e receber mensagens.
-
Em Corpo da mensagem, insira uma mensagem de teste, como “esta é uma mensagem de teste”.
-
Escolha Send Message (Enviar mensagem).
O Lambda pesquisa a fila para atualizações. Quando há uma nova mensagem, o Lambda invoca a sua função com esses novos dados de evento da fila. Caso o manipulador de função retorne sem exceções, o Lambda considera a mensagem processada com êxito e começa a realizar a leitura de novas mensagens na fila. Após o processamento com sucesso, uma mensagem,o Lambda a exclui automaticamente da fila. Se o manipulador gera uma exceção, o Lambda considera que o batch de mensagens não foi processado com êxito e o Lambda invoca novamente a função com o mesmo batch de mensagens.
Verificar os logs do CloudWatch

Confirmar que a função processou a mensagem
Abra a página Funções
do console do Lambda. -
Escolha a função ProcessSQSRecord.
-
Escolha Monitor.
-
Escolha Visualizar logs do CloudWatch.
-
No console do CloudWatch, escolha o Fluxo de logs para a função.
-
Encontre o log
INFO
. É aqui que a função do Lambda registra em log o corpo da mensagem. Você deve visualizar a mensagem que enviou da fila do Amazon SQS. Exemplo: .2023-09-11T22:49:12.730Z b0c41e9c-0556-5a8b-af83-43e59efeec71 INFO
Processed message this is a test message.
Limpe os recursos
Agora você pode excluir os recursos criados para este tutorial, a menos que queira mantê-los. Excluindo os recursos da AWS que você não está mais usando, você evita cobranças desnecessárias em sua Conta da AWS.
Para excluir a função de execução
-
Abra a página Roles
(Funções) no console do IAM. -
Selecione a função de execução que você criou.
-
Escolha Excluir.
-
Insira o nome do perfil no campo de entrada de texto e escolha Delete (Excluir).
Como excluir a função do Lambda
-
Abra a página Functions
(Funções) no console do Lambda. -
Selecione a função que você criou.
-
Selecione Ações, Excluir.
-
Digite
confirm
no campo de entrada de texto e escolha Delete (Excluir).
Para excluir a fila do Amazon SQS
-
Faça login no AWS Management Console e abra o console do Amazon SQS em https://console.aws.amazon.com/sqs/
. -
Selecione a fila que você criou.
-
Escolha Excluir.
-
Digite
confirm
no campo de entrada de texto. -
Escolha Excluir.