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).
Tópicos
Adicionar o Amazon MSK como uma origem de evento
Para criar um mapeamento de origem de evento, adicione o Amazon MSK como um acionador de função do Lambda usando o console do Lambda, um AWS SDK
Esta seção descreve como criar um mapeamento de origens de eventos usando o console do Lambda e oAWS CLI.
Pré-requisitos
-
Um cluster do Amazon MSK e um tópico do Kafka. Para obter mais informações, consulte Conceitos básicos do uso do Amazon MSK no Guia do desenvolvedor do Amazon Managed Streaming for Apache Kafka.
-
Uma função de execução com permissão para acessar os recursos da AWS que seu cluster do MSK usa.
ID de grupo de consumidores personalizável
Ao configurar o Kafka como uma origem de eventos, você pode especificar um ID de grupo de consumidores. Esse ID de grupo de consumidores é um identificador existente para o grupo de consumidores do Kafka no qual você deseja que a função do Lambda ingresse. Você pode usar esse recurso para migrar facilmente qualquer configuração de processamento em andamento de registros do Kafka de outros consumidores para o Lambda.
Se você especificar um ID de grupo de consumidores e houver outros pesquisadores ativos dentro desse grupo de consumidores, o Kafka distribuirá mensagens entre todos os consumidores. Em outras palavras, o Lambda não receberá todas as mensagens para o tópico do Kafka. Se você quiser que o Lambda gerencie todas as mensagens do tópico, desative todos os outros pesquisadores desse grupo de consumidores.
Além disso, se você especificar um ID de grupo de consumidores e o Kafka encontrar um grupo de consumidores válido já existente com o mesmo ID, o Lambda ignorará o parâmetro StartingPosition
no mapeamento de origem de eventos. Em vez disso, o Lambda começará a processar registros de acordo com o deslocamento confirmado do grupo de consumidores. Se você especificar um ID de grupo de consumidores e o Kafka não conseguir encontrar um grupo de consumidores existente, o Lambda configurará a origem de eventos com a StartingPosition
especificada.
O ID do grupo de consumidores que você especificar deverá ser exclusivo entre todas as origens de eventos do Kafka. Após criar um mapeamento de origem de eventos do Kafka com o ID do grupo de consumidores especificado, você não poderá atualizar esse valor.
Adicionar um gatilho do Amazon MSK (console)
Siga estas etapas para adicionar seu cluster do Amazon MSK e um tópico do Kafka como um acionador para sua função do Lambda.
Para adicionar um acionador do Amazon MSK à sua função do Lambda (console)
-
Abra a página Functions
(Funções) no console do Lambda. -
Escolha o nome da função do Lambda.
-
Em Visão geral da função, escolha Adicionar gatilho.
-
Em Trigger configuration (Configuração do acionador), faça o seguinte:
-
Selecione o tipo de acionador MSK.
-
Em Cluster do MSK, selecione seu cluster.
-
Em Batch size (Tamanho do lote), insira o número máximo de mensagens a serem recebidas em um único lote.
-
Em Batch window (Janela de lote), insira o tempo máximo em segundos usado pelo Lambda para coletar os registros antes de invocar a função.
-
Em Topic name (Nome do tópico), insira um nome para o tópico do Kafka.
-
(Opcional) em Consumer group ID (ID do grupo de consumidores), insira o ID de um grupo de consumidores do Kafka no qual ingressar.
-
(Opcional) Em Posição inicial, escolha Mais recente para começar a realizar a leitura do fluxo a partir do registro mais recente, Horizonte de corte para começar no registro mais antigo disponível ou No carimbo de data e hora para especificar um carimbo de data e hora para começar a realizar a leitura.
-
(Opcional) Em Authentication (Autenticação), escolha a chave secreta para autenticar com os agentes no cluster do MSK.
-
Para criar o gatilho em um estado desativado para teste (recomendado), desmarque Ativar gatilho. Ou, para habilitar o gatilho imediatamente, selecione Ativar gatilho.
-
-
Para criar o acionador, selecione Add (Adicionar).
Adicionando um gatilho do Amazon MSK (AWS CLI)
Use os comandos de exemplo a seguir da AWS CLI para criar e visualizar um acionador do Amazon MSK para sua função do Lambda.
Criar um trigger usando a AWS CLI
exemplo : criar um mapeamento da origem de eventos para o cluster que usa autenticação do IAM
O exemplo a seguir usa o comando create-event-source-mappingmy-kafka-function
em um tópico do Kafka chamado AWSKafkaTopic
. A posição inicial do tópico está definida como LATEST
. Quando o cluster usa a autenticação baseada em perfil do IAM, você não precisa de um objeto SourceAccessConfiguration. Exemplo:
aws lambda create-event-source-mapping \ --event-source-arn
arn:aws:kafka:us-east-1:111122223333:cluster/my-cluster/fc2f5bdf-fd1b-45ad-85dd-15b4a5a6247e-2
\ --topicsAWSKafkaTopic
\ --starting-positionLATEST
\ --function-namemy-kafka-function
exemplo : criar um mapeamento da origem de eventos para o cluster que usa autenticação SASL/SCRAM
Se o cluster usar autenticação SASL/SCRAM, você precisa incluir um objeto SourceAccessConfiguration que especifique SASL_SCRAM_512_AUTH
e um ARN secreto do Secrets Manager.
aws lambda create-event-source-mapping \ --event-source-arn
arn:aws:kafka:us-east-1:111122223333:cluster/my-cluster/fc2f5bdf-fd1b-45ad-85dd-15b4a5a6247e-2
\ --topicsAWSKafkaTopic
\ --starting-positionLATEST
\ --function-namemy-kafka-function
--source-access-configurations'[{"Type": "SASL_SCRAM_512_AUTH","URI": "arn:aws:secretsmanager:us-east-1:111122223333:secret:my-secret"}]'
exemplo : criar um mapeamento da origem de eventos para o cluster que usa autenticação mTLS
Se o cluster usar autenticação mTLS, você precisa incluir um objeto SourceAccessConfiguration que especifique CLIENT_CERTIFICATE_TLS_AUTH
e um ARN secreto do Secrets Manager.
aws lambda create-event-source-mapping \ --event-source-arn
arn:aws:kafka:us-east-1:111122223333:cluster/my-cluster/fc2f5bdf-fd1b-45ad-85dd-15b4a5a6247e-2
\ --topicsAWSKafkaTopic
\ --starting-positionLATEST
\ --function-namemy-kafka-function
--source-access-configurations'[{"Type": "CLIENT_CERTIFICATE_TLS_AUTH","URI": "arn:aws:secretsmanager:us-east-1:111122223333:secret:my-secret"}]'
Para obter mais informações, consulte o .CreateEventSourceMappingDocumentação de referência da API.
Visualizar o status usando a AWS CLI
O exemplo a seguir usa o comando get-event-source-mapping
aws lambda get-event-source-mapping \ --uuid
6d9bce8e-836b-442c-8070-74e77903c815
Parâmetros de configuração do Amazon MSK
Todos os tipos de origem de evento Lambda compartilham o mesmoCreateEventSourceMappingeUpdateEventSourceMappingOperações de API do. No entanto, apenas alguns dos parâmetros se aplicam ao Amazon MSK.
Parâmetro | Obrigatório | Padrão | Observações |
---|---|---|---|
AmazonManagedKafkaEventSourceConfig |
N |
Contém o campo ConsumerGroupId, que assume, por padrão, um valor exclusivo. |
Pode definir apenas em Criar |
BatchSize |
N |
100 |
Máximo: 10.000. |
DestinationConfig |
N |
N/D |
Capturar lotes descartados para uma origem de eventos do Amazon MSK |
Habilitado |
N |
Verdadeiro |
|
EventSourceArn |
S |
N/D |
Pode definir apenas em Criar |
FilterCriteria |
N |
N/D |
|
FunctionName |
S |
N/D |
|
KMSKeyArn |
N |
N/D |
|
MaximumBatchingWindowInSeconds |
N |
500 ms |
|
ProvisionedPollersConfig |
N |
|
|
SourceAccessConfigurations |
N |
Sem credenciais do |
Credenciais de autenticação SASL/SCRAM ou CLIENT_CERTIFICATE_TLS_AUTH (MutualTLS) para a fonte do evento |
StartingPosition |
S |
N/D |
AT_TIMESTAMP, TRIM_HORIZON, ou LATEST Pode definir apenas em Criar |
StartingPositionTimestamp |
N |
N/D |
Obrigatório se StartingPosition estiver definido como AT_TIMESTAMP |
Tags |
N |
N/D |
|
Tópicos |
S |
N/D |
Nome do tópico do Kafka Pode definir apenas em Criar |
Criar mapeamentos da origem do evento entre contas
Você pode usar a conectividade privada com várias VPCs para conectar uma função do Lambda a um cluster DO MSK provisionado em outra Conta da AWS. A conectividade com várias VPCs usa AWS PrivateLink, que mantém todo o tráfego na rede da AWS.
nota
Você não pode criar mapeamentos da origem do evento entre contas para clusters do MSK sem servidor.
Para criar um mapeamento da origem de eventos entre contas, primeiro você precisa configurar a conectividade com várias VPCs para o cluster do MSK. Ao criar o mapeamento da origem de eventos, use o ARN da conexão VPC gerenciada, em vez do ARN do cluster, conforme mostrado nos exemplos a seguir. A operação CreateEventSourceMapping também difere dependendo do tipo de autenticação usado pelo cluster do MSK.
exemplo : criar um mapeamento da origem de eventos entre contas para o cluster que usa autenticação do IAM
Quando o cluster usa a autenticação baseada em perfil do IAM, você não precisa de um objeto SourceAccessConfiguration. Exemplo:
aws lambda create-event-source-mapping \ --event-source-arn arn:aws:kafka:
us-east-1:111122223333
:vpc-connection/444455556666/my-cluster-name/51jn98b4-0a61-46cc-b0a6-61g9a3d797d5-7
\ --topics AWSKafkaTopic \ --starting-position LATEST \ --function-name my-kafka-function
exemplo : criar um mapeamento da origem de eventos entre contas para o cluster que usa autenticação SASL/SCRAM
Se o cluster usar autenticação SASL/SCRAM, você precisa incluir um objeto SourceAccessConfiguration que especifique SASL_SCRAM_512_AUTH
e um ARN secreto do Secrets Manager.
Há duas maneiras de usar segredos para mapeamentos da origem do evento entre contas do Amazon MSK com autenticação SASL/SCRAM:
-
Crie um segredo na conta da função do Lambda e sincronize-o com o segredo do cluster. Crie uma rotação para manter os dois segredos sincronizados. Essa opção permite controlar o segredo pela conta da função.
-
Use o segredo associado ao cluster do MSK. Esse segredo deve permitir o acesso entre contas à conta da função do Lambda. Para obter mais informações, consulte Permissões para segredos do AWS Secrets Manager para usuários em uma conta diferente.
aws lambda create-event-source-mapping \ --event-source-arn arn:aws:kafka:
us-east-1:111122223333
:vpc-connection/444455556666/my-cluster-name/51jn98b4-0a61-46cc-b0a6-61g9a3d797d5-7
\ --topics AWSKafkaTopic \ --starting-position LATEST \ --function-name my-kafka-function \ --source-access-configurations'[{"Type": "SASL_SCRAM_512_AUTH","URI": "arn:aws:secretsmanager:us-east-1:444455556666:secret:my-secret"}]'
exemplo : criar um mapeamento da origem de eventos entre contas para o cluster que usa autenticação mTLS
Se o cluster usar autenticação mTLS, você precisa incluir um objeto SourceAccessConfiguration que especifique CLIENT_CERTIFICATE_TLS_AUTH
e um ARN secreto do Secrets Manager. O segredo pode ser armazenado na conta do cluster ou na conta da função do Lambda.
aws lambda create-event-source-mapping \ --event-source-arn arn:aws:kafka:
us-east-1:111122223333
:vpc-connection/444455556666/my-cluster-name/51jn98b4-0a61-46cc-b0a6-61g9a3d797d5-7
\ --topics AWSKafkaTopic \ --starting-position LATEST \ --function-name my-kafka-function \ --source-access-configurations'[{"Type": "CLIENT_CERTIFICATE_TLS_AUTH","URI": "arn:aws:secretsmanager:us-east-1:444455556666:secret:my-secret"}]'
Usar um cluster do Amazon MSK como uma origem de eventos
Quando você adiciona seu cluster do Apache Kafka ou do Amazon MSK como um gatilho para a função do Lambda, o cluster é usado como uma origem de eventos.
O Lambda lê os dados de eventos dos tópicos do Kafka que você especifica como Topics
em uma solicitação CreateEventSourceMapping com base na StartingPosition
especificada. Após o processamento bem-sucedido, seu tópico do Kafka é confirmado no cluster do Kafka.
Se você especificar StartingPosition
como LATEST
, o Lambda começará a ler da mensagem mais recente em cada partição pertencente ao tópico. Como pode haver algum atraso após a configuração do acionador antes de o Lambda começar a ler as mensagens, o Lambda não lerá nenhuma mensagem produzida durante a janela.
O Lambda lê as mensagens sequencialmente para cada partição de tópico do Kafka. Uma única carga do Lambda pode conter mensagens de várias partições. Quando mais registros estiverem disponíveis, o Lambda continuará processando-os em lotes, com base no valor de BatchSize
especificado na solicitação CreateEventSourceMapping, até que a função atinja o tópico.
Depois que o Lambda processa cada lote, ele confirma os deslocamentos das mensagens nesse lote. 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. É possível enviar registros que apresentaram falha em todas as tentativas a um destino em caso de falha para processamento posterior.
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.
Posições iniciais de sondagem e fluxo
Esteja ciente de que a sondagem do fluxo durante a criação e as atualizações do mapeamento da origem do evento é, finalmente, consistente.
-
Durante a criação do mapeamento da origem do evento, pode levar alguns minutos para a sondagem de eventos do fluxo iniciar.
-
Durante as atualizações do mapeamento da origem do evento, pode levar alguns minutos para interromper e reiniciar a sondagem de eventos do fluxo.
Esse comportamento significa que, se você especificar LATEST
como posição inicial do fluxo, o mapeamento da origem do evento poderá perder eventos durante a criação ou as atualizações. Para garantir que nenhum evento seja perdido, especifique a posição inicial do fluxo como TRIM_HORIZON
ou AT_TIMESTAMP
.
Métricas do Amazon CloudWatch
O Lambda emite a métrica OffsetLag
enquanto sua função processa registros. O valor dessa métrica é a diferença de deslocamento entre o último registro gravado no tópico da origem de eventos do Kafka e o último registro que o grupo de consumidores da função processou. Você pode usar OffsetLag
para estimar a latência entre o momento em que um registro é adicionado e o momento em que o grupo de consumidores o processa.
Uma tendência crescente em OffsetLag
pode indicar problemas com pesquisadores no grupo de consumidores da função. Para ter mais informações, consulte Uso de métricas do CloudWatch com o Lambda.
Comportamento de escalabilidade do throughput de mensagens para mapeamentos da origem de eventos do Amazon MSK
Você pode escolher entre dois modos de comportamento de escalabilidade do throughput de mensagens para o mapeamento da origem de eventos do Amazon MSK:
Modo padrão (sob demanda)
Quando você cria inicialmente uma origem de eventos do Amazon MSK, o Lambda aloca um número padrão de pesquisadores de eventos para processar todas as partições no tópico do Kafka. O Lambda aumenta ou diminui automaticamente o número de pesquisadores de eventos com base na carga de mensagens.
A cada um minuto, o Lambda avalia o atraso de deslocamento de todas as partições do tópico. Se o atraso de deslocamento for muito alto, a partição está recebendo mensagens mais rápido do que o Lambda pode processá-las. Se necessário, o Lambda adiciona ou remove os pesquisadores de eventos do tópico. Esse processo de ajuste de escala automático para adicionar ou remover pesquisadores de eventos ocorre em até três minutos após a avaliação.
Se a função do Lambda de destino sofrer um controle de utilização, o Lambda reduzirá o número de pesquisadores de eventos. Essa ação reduz a workload na função, reduzindo o número de mensagens que os pesquisadores de eventos podem recuperar e enviar para a função.
Configuração do modo provisionado
Para workloads em que você precisa ajustar o throughput do mapeamento da origem de eventos, você pode usar o modo provisionado. No modo provisionado, você define limites mínimos e máximos para a quantidade de pesquisadores de eventos provisionados. Esses pesquisadores de eventos provisionados são dedicados ao mapeamento da origem do evento e podem lidar com picos inesperados de mensagens por meio do ajuste de escala automático responsivo. Recomendamos que você use o modo provisionado para workloads do Kafka que tenham requisitos rigorosos de performance.
No Lambda, um pesquisador de eventos é uma unidade computacional capaz de lidar com até 5 MBps de throughput. Como referência, suponha que sua origem de eventos produza uma carga útil média de 1 MB e que a duração média da função seja de 1 segundo. Se a carga útil não passar por nenhuma transformação (como filtragem), um único pesquisador oferece suporte a um throughput de 5 MBps e 5 invocações simultâneas do Lambda. O uso do modo provisionado incorre em custos adicionais. Para estimativas de preços, consulte Preços do AWS Lambda
nota
Ao usar o modo provisionado, você não precisa criar endpoints de VPC do AWS PrivateLink nem conceder as permissões associadas como parte da sua configuração de rede.
No modo provisionado, o intervalo de valores aceitos para o número mínimo de pesquisadores de eventos (MinimumPollers
) está entre 1 e 200, inclusive. O intervalo de valores aceitos para o número máximo de pesquisadores de eventos (MaximumPollers
) está entre 1 e 2.000, inclusive. O valor de MaximumPollers
deve ser maior que ou igual ao valor de MinimumPollers
. Além disso, para manter o processamento ordenado nas partições, o Lambda limita o valor de MaximumPollers
ao número de partições no tópico.
Para obter mais detalhes sobre como escolher valores mínimo e máximo apropriados de pesquisadores de eventos, consulte Práticas recomendadas e considerações ao usar o modo provisionado.
Você pode configurar o modo provisionado para o mapeamento da origem de eventos do Amazon MSK usando o console ou a API do Lambda.
Para configurar o modo provisionado para um mapeamento da origem de eventos do Amazon MSK existente (console)
-
Abra a página Funções
do console do Lambda. -
Escolha a função com o mapeamento da origem de eventos do Amazon MSK para o qual você deseja configurar o modo provisionado.
-
Escolha Configuração e, em seguida, escolha Acionadores.
-
Escolha o mapeamento da origem de eventos do Amazon MSK para o qual você deseja configurar o modo provisionado e, em seguida, escolha Editar.
-
Em Configuração de mapeamento da origem do evento, escolha Configurar modo provisionado.
-
Para Pesquisadores de eventos mínimos, insira um valor entre 1 e 200. Se você não especificar um valor, o Lambda vai atribuir o valor padrão de 1.
-
Para Pesquisadores de eventos máximos, insira um valor entre 1 e 2.000. Esse valor deve ser maior ou igual ao seu valor para Pesquisadores de eventos mínimos. Se você não especificar um valor, o Lambda vai atribuir o valor padrão de 200.
-
-
Escolha Salvar.
Você pode configurar o modo provisionado programaticamente usando o objeto ProvisionedPollerConfig em seu EventSourceMappingConfiguration. Por exemplo, o comando da CLI UpdateEventSourceMapping a seguir configura um valor de 5 para MinimumPollers
e um valor de 100 para MaximumPollers
.
aws lambda update-event-source-mapping \ --uuid a1b2c3d4-5678-90ab-cdef-EXAMPLE11111 \ --provisioned-poller-config '{"MinimumPollers": 5, "MaximumPollers": 100}'
Depois de configurar o modo provisionado, você pode observar o uso de pesquisadores de eventos para sua workload monitorando a métrica ProvisionedPollers
. Para ter mais informações, consulte Métricas de mapeamento da origem do evento.
Para desativar o modo provisionado e retornar ao modo padrão (sob demanda), você pode usar o seguinte comando da CLI UpdateEventSourceMapping:
aws lambda update-event-source-mapping \ --uuid a1b2c3d4-5678-90ab-cdef-EXAMPLE11111 \ --provisioned-poller-config '{}'
Práticas recomendadas e considerações ao usar o modo provisionado
A configuração ideal de pesquisadores de eventos mínimos e máximos para o mapeamento da origem de eventos depende dos requisitos de performance da sua aplicação. Recomendamos que você inicie por um mínimo padrão de pesquisadores de eventos para definir o perfil de performance básico. Ajuste sua configuração com base nos padrões de processamento de mensagens observados e no perfil de performance desejado.
Para workloads com tráfego intenso e necessidades rigorosas de performance, aumente o número mínimo de pesquisadores de eventos para lidar com picos repentinos de mensagens. Para determinar os pesquisadores de eventos mínimos necessários, considere as mensagens de sua workload por segundo e o tamanho médio da carga útil e use a capacidade de throughput de um único pesquisador de eventos (até 5 MBps) como referência.
Para manter o processamento ordenado em uma partição, o Lambda limita o máximo de pesquisadores de eventos ao número de partições no tópico. Além disso, o número máximo de pesquisadores de eventos para os quais o mapeamento da origem de eventos pode ser escalado depende das configurações de simultaneidade da função.
Ao ativar o modo provisionado, atualize suas configurações de rede para remover os endpoints de VPC do AWS PrivateLink e as permissões associadas.