Usar o Lambda com o Amazon MQ
nota
Se você deseja enviar dados para um destino que não seja uma função do Lambda ou enriquecer os dados antes de enviá-los, consulte Amazon EventBridge Pipes (Pipes do Amazon EventBridge).
O Amazon MQ é um serviço gerenciado de agente de mensagem para o Apache ActiveMQ
O Amazon MQ também pode gerenciar instâncias do Amazon Elastic Compute Cloud (Amazon EC2) em seu nome instalando agentes do ActiveMQ ou RabbitMQ e fornecendo diferentes topologias de rede e outras necessidades de infraestrutura.
Você pode usar uma função do Lambda para processar registros do seu agente de mensagens do Amazon MQ. O Lambda invoca sua função por meio de um mapeamento de fontes de eventos, um recurso do Lambda que lê mensagens de seu agente e invoca a função de modo síncrono.
Atenção
Os mapeamentos da origem do evento do Lambda processam cada evento ao menos uma vez, podendo haver o processamento duplicado de registros. Para evitar possíveis problemas relacionados a eventos duplicados, é altamente recomendável tornar o código da função idempotente. Para saber mais, consulte Como tornar minha função do Lambda idempotente
O mapeamento de fontes de eventos do Amazon MQ tem as seguintes restrições de configuração:
-
Simultaneidade: as funções do Lambda que usam um mapeamento de origem do evento do Amazon MQ têm uma configuração padrão de simultaneidade máxima. Para o ActiveMQ, o serviço Lambda limita o número de ambientes de execução simultâneos a cinco por mapeamento da origem do evento do Amazon MQ. Para o RabbitMQ, o número de ambientes de execução simultânea é limitado a um por mapeamento da origem do evento do Amazon MQ. Mesmo que você altere as configurações de simultaneidade reservada ou provisionada da função, o serviço Lambda não disponibilizará mais ambientes de execução. Para solicitar um aumento na simultaneidade máxima padrão para um único mapeamento da origem do evento do Amazon MQ, entre em contato com o AWS Support tendo a UUID do mapeamento da origem do evento e também a região. Como os aumentos são aplicados no nível do mapeamento da origem do evento específico, não no nível da conta ou da região, você precisa solicitar manualmente um aumento de escalação para cada mapeamento da origem do evento.
Contas cruzadas: o Lambda não é compatível com o processamento de contas cruzadas. Não é possível usar o Lambda para processar registros de um agente de mensagens do Amazon MQ que esteja em uma Conta da AWS diferente.
-
Autenticação: para o ActiveMQ, somente o SimpleAuthenticationPlugin
do ActiveMQ é compatível. Para RabbitMQ, somente oPLAIN Mecanismo de autenticação é compatível. Os usuários devem usar o AWS Secrets Manager para gerenciar suas credenciais. Para obter mais informações sobre a autenticação do ActiveMQ, consulteIntegração de corretores ActiveMQ com LDAPnoGuia do desenvolvedor do Amazon MQ. -
Cota de conexão: os agentes têm um número máximo de conexões permitidas por protocolo de nível de transmissão de dados. Essa cota é baseada no tipo de instância do agente. Para obter mais informações, consulte o .Operadoresseção doCotas no Amazon MQnoGuia do desenvolvedor do Amazon MQ.
-
Conectividade: você pode criar agentes em uma Virtual Private Cloud (VPC) pública ou privada. Para VPCs privadas, sua função do Lambda precisa acessar a VPC para receber mensagens. Para obter mais informações, consulte Configuração da segurança de rede mais adiante nesta seção.
-
Destinos de eventos: somente destinos de fila são compatíveis. No entanto, você pode usar um tópico virtual, que se comporta como um tópico internamente enquanto interage com o Lambda como uma fila. Para obter mais informações, consulte Virtual Destinations
no site do Apache ActiveMQ e Virtual Hosts no site do RabbitMQ. -
Topologia de rede: para o ActiveMQ, somente um agente de instância única ou em espera é aceito por mapeamento de fontes de eventos. Para o RabbitMQ, apenas um agente de instância única ou implantação de cluster é aceito por mapeamento de fonte de eventos. Os agentes de instância única requerem um endpoint de failover. Para obter mais informações sobre esses modos de implantação do agente, consulteArquitetura de operador do MQeArquitetura de MQ do RabbitnoGuia do desenvolvedor do Amazon MQ.
-
Protocolos — Os protocolos suportados dependem do tipo de integração do Amazon MQ.
Para integrações do ActiveMQ, o Lambda consome mensagens usando o protocolo OpenWire/Java Message Service (JMS). Nenhum outro protocolo é compatível para o consumo de mensagens. Dentro do protocolo JMS, somente
TextMessage
e BytesMessage
são compatíveis. O Lambda também é compatível com propriedades personalizadas do JMS. Para obter mais informações sobre o protocolo OpenWire, consulte OpenWire no site do Apache ActiveMQ. Para integrações RabbitMQ, o Lambda consome mensagens usando o protocolo AMQP 0-9-1. Nenhum outro protocolo é compatível para o consumo de mensagens. Para obter mais informações sobre a implementação do protocolo AMQP 0-9-1 pelo RabbitMQ, consulteAMQP 0-9-1 Guia de referência completo
no site do RabbitMQ.
O Lambda oferece suporte automaticamente às versões mais recentes do ActiveMQ e RabbitMQ que não têm suporte no Amazon MQ. Para obter as versões compatíveis mais recentes, consulteNotas de versão do Amazon MQnoGuia do desenvolvedor do Amazon MQ.
nota
Por padrão, o Amazon MQ tem uma janela de manutenção semanal para agentes. Durante essa janela de tempo, os agentes não estão disponíveis. Para agentes sem espera, o Lambda não é possível processar nenhuma mensagem durante essa janela.
Tópicos
Entender o grupo de consumidores do Lambda para o Amazon MQ
Para interagir com o Amazon MQ, o Lambda cria um grupo de consumidores que pode ler a partir de seus agentes do Amazon MQ. O grupo de consumidores é criado com o mesmo ID que um UUID de mapeamento da fonte de eventos.
Para fontes de evento do Amazon MQ, o Lambda divide os registros em lotes e os envia para sua função em uma única carga útil. Para controlar o comportamento, é necessário configurar a janela de lotes e o tamanho do lote. O Lambda extrai mensagens até processar o tamanho máximo da carga útil de 6 MB, a janela de lotes expirar ou o número de registros atingir o tamanho total do lote. Para ter mais informações, consulte Comportamento de lotes.
O grupo de consumidores recupera as mensagens como um BLOB de bytes, as codifica em base64 para uma única carga útil JSON e depois invoca a função. Se sua função retorna um erro para qualquer uma das mensagens em um lote, o Lambda tenta novamente todo o lote de mensagens até que o processamento seja bem-sucedido ou as mensagens expiram.
nota
Embora as funções do Lambda normalmente tenham um limite máximo de tempo de 15 minutos, os mapeamentos da origem dos eventos para o Amazon MSK, o Apache Kafka autogerenciado, o Amazon DocumentDB e o Amazon MQ para ActiveMQ e RabbitMQ são compatíveis somente com funções com limites máximos de tempo limite de 14 minutos. Essa restrição garante que o mapeamento da origem do evento possa solucionar adequadamente os erros de função e repetições.
Você pode monitorar o uso da simultaneidade de uma determinada função usando a métrica ConcurrentExecutions
no Amazon CloudWatch. Para obter mais informações sobre a simultaneidade, consulte Configurar a simultaneidade reservada para uma função.
exemplo Eventos de registro do Amazon MQ
nota
No exemplo RabbitMQ,pizzaQueue
é o nome da fila do RabbitMQ e/
é o nome do host virtual. Ao receber mensagens, a origem do evento lista as mensagens empizzaQueue::/
.