Tutorial: usar o Lambda com o Amazon SQS
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 tem Conta da AWS, siga as etapas a seguir para criar um.
Para se cadastrar em uma Conta da AWS
Abra https://portal.aws.amazon.com/billing/signup
. Siga as instruções online.
Parte do procedimento de inscrição envolve receber uma chamada telefônica e inserir um código de verificação no teclado do telefone.
Quando você se cadastra em uma Conta da AWS, um Usuário raiz da conta da AWS é criado. O usuário raiz tem acesso a todos os Serviços da AWS e atributos na conta. Como prática recomendada de segurança, atribua o acesso administrativo a um usuário e use somente o usuário-raiz para executar tarefas que exigem acesso de usuário-raiz.
A AWS envia um e-mail de confirmação depois que o processo de cadastramento é concluído. A qualquer momento, é possível visualizar as atividades da conta atual e gerenciar sua conta acessando https://aws.amazon.com/
Depois de se cadastrar em uma Conta da AWS, proteja seu Usuário raiz da conta da AWS, habilite o AWS IAM Identity Center e crie um usuário administrativo para não usar o usuário raiz em tarefas cotidianas.
Proteger seu Usuário raiz da conta da AWS
-
Faça login no AWS Management Console
como o proprietário da conta ao escolher a opção Usuário raiz e inserir o endereço de e-mail da Conta da AWS. Na próxima página, insira sua senha. Para obter ajuda ao fazer login usando o usuário raiz, consulte Fazer login como usuário raiz no Guia do usuário do Início de Sessão da AWS.
-
Habilite a autenticação multifator (MFA) para o usuário raiz.
Para obter instruções, consulte Habilitar um dispositivo MFA virtual para o usuário raiz de sua conta da Conta da AWS (console) no Guia do usuário do IAM.
Criar um usuário com acesso administrativo
-
Habilitar o IAM Identity Center.
Para obter instruções, consulte Habilitar AWS IAM Identity Center no Guia do usuário do AWS IAM Identity Center.
-
No Centro de Identidade do IAM, conceda o acesso administrativo para um usuário.
Para obter um tutorial sobre como usar o Diretório do Centro de Identidade do IAM como fonte de identidade, consulte Configurar o acesso dos usuários com o Diretório do Centro de Identidade do IAM padrão no Guia do usuário do AWS IAM Identity Center.
Iniciar sessão como o usuário com acesso administrativo
-
Para fazer login com seu usuário do Centro de Identidade do IAM, use o URL de login que foi enviado ao seu endereço de e-mail quando você criou o usuário do Centro do Usuário do IAM.
Para obter ajuda com o login utilizando um usuário do Centro de Identidade do IAM, consulte Fazer login no portal de acesso da AWS, no Guia do usuário do Início de Sessão da AWS.
Atribuir acesso a usuários adicionais
-
No Centro de Identidade do IAM, crie um conjunto de permissões que siga as práticas recomendadas de aplicação de permissões com privilégio mínimo.
Para obter instruções, consulte Create a permission set no Guia do usuário do AWS IAM Identity Center.
-
Atribua usuários a um grupo e, em seguida, atribua o acesso de autenticação única ao grupo.
Para obter instruções, consulte Add groups no Guia do usuário do AWS IAM Identity Center.
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 serviços e recursos 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 Roles
(Funções) no console do IAM. -
Selecione Criar função.
-
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.
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 Send and receive messages (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.
-
Escolha Ações, Excluir.
-
Digite
delete
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.