Tópico do Amazon Managed Streaming for Apache Kafka como origem no EventBridge Pipes.
É possível usar o EventBridge Pipes para receber registros de um tópico do Amazon Managed Streaming for Apache Kafka (Amazon MSK). Opcionalmente, é possível filtrar ou aprimorar esses registros antes de enviá-los para um dos destinos disponíveis para processamento. Há configurações específicas para o Amazon MSK que podem ser escolhidas ao configurar um pipe. O EventBridge Pipes mantém a ordem dos registros do agente de mensagens ao enviar esses dados para o destino.
O Amazon MSK é um serviço totalmente gerenciado que pode ser usado na criação e a execução de aplicações que usam o Apache Kafka para processar dados de streaming. O Amazon MSK simplifica a configuração, a escalabilidade e o gerenciamento de clusters que executam o Apache Kafka. Com o Amazon MSK, é possível configurar sua aplicação para várias zonas de disponibilidade e para segurança com o AWS Identity and Access Management (IAM). O Amazon MSK é compatível com várias versões de código aberto do Kafka.
O Amazon MSK como uma origem funciona de forma semelhante ao uso do Amazon Simple Queue Service (Amazon SQS) ou do Amazon Kinesis. O EventBridge pesquisa internamente por novas mensagens da origem do evento e invoca, de forma síncrona, o destino. O EventBridge lê as mensagens em lotes e fornece estas para a sua função como uma carga útil de eventos. O tamanho máximo do lote é configurável. (O valor padrão é de 100 mensagens.)
Para origens de eventos baseadas em Apache Kafka, o EventBridge oferece suporte a parâmetros de controle de processamento, como janelas de processamento de lotes e tamanho do lote.
O EventBridge lê as mensagens sequencialmente para cada partição. Depois que o EventBridge processa cada lote, ele confirma os deslocamentos das mensagens nesse lote. Se o destino do pipe retornar um erro para qualquer uma das mensagens em um lote, o EventBridge tenta enviar novamente todo o lote de mensagens até que o processamento tenha êxito ou as mensagens expirem.
O EventBridge envia o lote de mensagens no evento ao invocar o destino. O payload do evento contém uma matriz de mensagens. Cada item de array contém detalhes do tópico do Amazon MSK e do identificador de partição, juntamente com um carimbo de data/hora e uma mensagem codificada em base64.
Eventos de exemplo
O exemplo de evento a seguir mostra as informações recebidas pelo pipe. É possível usar esse evento para criar e filtrar seus padrões de eventos ou para definir a transformação de entrada. Nem todos os campos podem ser filtrados. Para mais informações sobre quais campos podem ser filtrados, consulte Filtragem de eventos no Amazon EventBridge Pipes.
[ { "eventSource": "aws:kafka", "eventSourceArn": "arn:aws:kafka:sa-east-1:123456789012:cluster/vpc-2priv-2pub/751d2973-a626-431c-9d4e-d7975eb44dd7-2", "eventSourceKey": "mytopic-0", "topic": "mytopic", "partition": "0", "offset": 15, "timestamp": 1545084650987, "timestampType": "CREATE_TIME", "key":"abcDEFghiJKLmnoPQRstuVWXyz1234==", "value":"SGVsbG8sIHRoaXMgaXMgYSB0ZXN0Lg==", "headers": [ { "headerKey": [ 104, 101, 97, 100, 101, 114, 86, 97, 108, 117, 101 ] } ] } ]
Posição inicial de sondagem e fluxo
Esteja ciente de que a origem de fluxo durante a criação e as atualizações de pipes é, finamente, consistente.
Durante a criação do pipe, pode levar alguns minutos para a sondagem de eventos do fluxo iniciar.
Durante as atualizações de pipe para a configuração de sondagem de origem, pode levar alguns minutos para interromper e reiniciar a sondagem de eventos do fluxo.
Este comportamento significa que, se 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
.
Autenticação de cluster do MSK
O EventBridge precisa de permissão para acessar o cluster do Amazon MSK, recuperar registros e executar outras tarefas. O Amazon MSK oferece suporte a várias opções para controlar o acesso do cliente ao cluster do MSK. Para obter mais informações quando cada método de autenticação é usado, consulte Como o EventBridge escolhe um agente de bootstrap.
Opções de acesso ao cluster
Acesso não autenticado
É recomendado usar somente o acesso não autenticado para desenvolvimento. O acesso não autenticado só funcionará se a autenticação baseada em perfis do IAM estiver desativada para o cluster.
Autenticação SASL/SCRAM
O Amazon MSK é compatível com autenticação Simple Authentication e Security Layer/Salted Challenge Response Authentication Mechanism (SASL/SCRAM) com criptografia Transport Layer Security (TLS). Para que o EventBridge se conecte ao cluster, é necessário armazenar as credenciais de autenticação (credenciais de login) em um segredo do AWS Secrets Manager.
Para obter mais informações sobre o uso do Secrets Manager, consulte Autenticação de nome de usuário e senha com o AWS Secrets Manager, no Guia do Desenvolvedor do Amazon Managed Streaming para Apache Kafka.
O Amazon MSK não oferece suporte a autenticação SASL/PLAIN.
Autenticação baseada em função do IAM
Use o IAM para autenticar a identidade dos clientes que se conectam ao cluster do MSK. Se a autenticação do IAM estiver ativa no seu cluster do MSK, e um segredo para a autenticação não for fornecido, o EventBridge usará automaticamente a autenticação do IAM por padrão. Para criar e implantar políticas baseadas em funções ou usuários do IAM, use o console ou a API do IAM. Para obter mais informações, consulte IAM access control (Controle de acesso do IAM) no Guia do desenvolvedor do Amazon Managed Streaming for Apache Kafka.
Para permitir que o Lambda se conecte ao cluster do MSK, leia registros e execute outras ações necessárias, adicione as permissões a seguir ao perfil de execução do seu pipe.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kafka-cluster:Connect", "kafka-cluster:DescribeGroup", "kafka-cluster:AlterGroup", "kafka-cluster:DescribeTopic", "kafka-cluster:ReadData", "kafka-cluster:DescribeClusterDynamicConfiguration" ], "Resource": [ "arn:aws:kafka:
region
:account-id
:cluster/cluster-name
/cluster-uuid
", "arn:aws:kafka:region
:account-id
:topic/cluster-name
/cluster-uuid
/topic-name
", "arn:aws:kafka:region
:account-id
:group/cluster-name
/cluster-uuid
/consumer-group-id
" ] } ] }
É possível definir o escopo dessas permissões para abranger clusters, tópicos e grupos específicos. Para obter mais informações, consulte Amazon MSK Kafka actions (Ações do Amazon MSK Kafka) no Guia do desenvolvedor Amazon Managed Streaming for Apache Kafka.
Autenticação TLS mútua
O TLS mútuo (mTLS) fornece autenticação bidirecional entre o cliente e o servidor. O cliente envia um certificado ao servidor para que o servidor verifique o cliente, e o servidor envia um certificado ao cliente para que o cliente verifique o servidor.
No Amazon MSK, o EventBridge atua como o cliente. Um certificado de cliente (como um segredo no Secrets Manager) é configurado para autenticar o EventBridge com os agentes no seu cluster do MSK. O certificado do servidor deve ser assinado por uma autoridade de certificação (CA) no armazenamento de confiança da . O cluster do MSK envia um certificado de servidor ao EventBridge para autenticar os agentes com o EventBridge. O certificado do cliente deve ser assinado por uma CA que esteja no armazenamento de confiança da AWS.
O Amazon MSK não é compatível com certificados de servidor autoassinados, pois todos os agentes no Amazon MSK usam certificados públicos assinados por CAs do Amazon Trust Services
Para obter mais informações sobre o mTLS para o Amazon MSK, consulte Mutual TLS Authentication (Autenticação TLS mútua) no Guia do desenvolvedor Amazon Managed Streaming for Apache Kafka.
Configurar o segredo de mTLS
O segredo CLIENT_CERTIFICATE_TLS_AUTH requer um campo de certificado e um campo de chave privada. Para uma chave privada criptografada, o segredo requer uma senha de chave privada. Tanto o certificado como a chave privada devem estar no formato PEM.
nota
O EventBridge é compatível com algoritmos de criptografia de chave privada PBES1
O campo certificate (certificado) deve conter uma lista de certificados, começando pelo certificado do cliente, seguido por quaisquer certificados intermediários e terminando com o certificado raiz. Cada certificado deve iniciar em uma nova linha com a seguinte estrutura:
-----BEGIN CERTIFICATE----- <certificate contents> -----END CERTIFICATE-----
O Secrets Manager oferece suporte a segredos de até 65.536 bytes, que é espaço suficiente para cadeias de certificados longas.
A chave privada deve estar no formato PKCS #8
-----BEGIN PRIVATE KEY----- <private key contents> -----END PRIVATE KEY-----
Para uma chave privada criptografada, use a seguinte estrutura:
-----BEGIN ENCRYPTED PRIVATE KEY----- <private key contents> -----END ENCRYPTED PRIVATE KEY-----
O exemplo a seguir exibe o conteúdo de um segredo para autenticação mTLS usando uma chave privada criptografada. Para uma chave privada criptografada, inclua a senha da chave privada no segredo.
{ "privateKeyPassword": "testpassword", "certificate": "-----BEGIN CERTIFICATE----- MIIE5DCCAsygAwIBAgIRAPJdwaFaNRrytHBto0j5BA0wDQYJKoZIhvcNAQELBQAw ... j0Lh4/+1HfgyE2KlmII36dg4IMzNjAFEBZiCRoPimO40s1cRqtFHXoal0QQbIlxk cmUuiAii9R0= -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIFgjCCA2qgAwIBAgIQdjNZd6uFf9hbNC5RdfmHrzANBgkqhkiG9w0BAQsFADBb ... rQoiowbbk5wXCheYSANQIfTZ6weQTgiCHCCbuuMKNVS95FkXm0vqVD/YpXKwA/no c8PH3PSoAaRwMMgOSA2ALJvbRz8mpg== -----END CERTIFICATE-----", "privateKey": "-----BEGIN ENCRYPTED PRIVATE KEY----- MIIFKzBVBgkqhkiG9w0BBQ0wSDAnBgkqhkiG9w0BBQwwGgQUiAFcK5hT/X7Kjmgp ... QrSekqF+kWzmB6nAfSzgO9IaoAaytLvNgGTckWeUkWn/V0Ck+LdGUXzAC4RxZnoQ zp2mwJn2NYB7AZ7+imp0azDZb+8YG2aUCiyqb6PnnA== -----END ENCRYPTED PRIVATE KEY-----" }
Como o EventBridge escolhe um agente de bootstrap
O EventBridge escolhe um agente de bootstrap com base nos métodos de autenticação disponíveis no cluster e se for fornecido um segredo para autenticação. Se fornecer um segredo para mTLS ou SASL/SCRAM, o EventBridge escolherá esse método de autenticação automaticamente. Se não fornecer um segredo, o EventBridge selecionará o método de autenticação mais forte que estiver ativo no seu cluster. A seguinte ordem de prioridade na qual o EventBridge seleciona um agente, da autenticação mais forte para a mais fraca:
-
mTLs (segredo fornecido para mTLs)
-
SASL/SCRAM (segredo fornecido para SASL/SCRAM)
-
SASL IAM (nenhum segredo fornecido, e a autenticação do IAM está ativa)
-
TLS não autenticado (nenhum segredo fornecido, e a autenticação do IAM não está ativa)
-
Texto simples (nenhum segredo fornecido, e a autenticação do IAM e o TLS não autenticado não estão ativos)
nota
Se o EventBridge não conseguir se conectar ao tipo de agente mais seguro, o EventBridge não tentará se conectar a um tipo de agente diferente (mais fraco). Se quiser que o EventBridge escolha um tipo de agente mais fraco, desative todos os métodos de autenticação mais fortes no seu cluster.
Configuração de rede
O EventBridge deve ter acesso aos recursos do Amazon Virtual Private Cloud (Amazon VPC) associados ao cluster do Amazon MSK.
-
Para acessar a VPC do seu cluster do Amazon MSK, o EventBridge pode usar o acesso de saída à internet para as sub-redes da sua origem. Para sub-redes privadas, pode ser um gateway NAT ou o seu próprio NAT. Certifique-se de que o NAT tenha um endereço IP público e possa se conectar à Internet. Para sub-redes públicas, você deve usar endpoints da VPC (explicado abaixo).
-
O EventBridge Pipes também aceita a entrega de eventos por meio do AWS PrivateLink
, permitindo que você envie eventos de uma origem de eventos localizada em uma Amazon Virtual Private Cloud (Amazon VPC) a um destino do Pipes sem atravessar a internet pública. Você pode usar o Pipes para sondar de origens do Amazon Managed Streaming for Apache Kafka (Amazon MSK), do Apache Kafka autogerenciado e do Amazon MQ residentes em uma sub-rede privada sem a necessidade de implantar um gateway da internet, configurar regras de firewall ou configurar servidores proxy. Você também pode usar endpoints da VPC para atender a entregas provenientes de clusters do Kafka em sub-redes públicas. Para configurar um endpoint da VPC, consulte Create a VPC endpoint no Guia do usuário do AWS PrivateLink. Para o nome do serviço, selecione
com.amazonaws.
.region
.pipes-data
Configure os grupos de segurança da Amazon VPC com as seguintes regras (no mínimo):
-
Regras de entrada: permitir todo tráfego na porta do agente do Amazon MSK para os grupos de segurança especificados para sua origem.
-
Regras de saída: permitir todo o tráfego na porta 443 para todos os destinos. Permita todo tráfego na porta do agente do Amazon MSK para os grupos de segurança especificados para sua origem.
As portas do agente incluem:
9092 para texto simples
9094 para TLS
9096 para SASL
9098 para o IAM
nota
Sua configuração da Amazon VPC pode ser detectada pela API do Amazon MSK. Não é necessário defini-la durante a configuração.
ID de grupo de consumidores personalizável
Ao configurar o Apache Kafka como uma origem de eventos, é possível especificar um ID de grupo de consumidores. Este ID de grupo de consumidores é um identificador existente para o grupo de consumidores do Apache Kafka no qual deseja que a função do Lambda ingresse. É possível usar este atributo para migrar facilmente qualquer configuração de processamento em andamento de registros do Apache Kafka de outros consumidores para o EventBridge.
Se você especificar um ID de grupo de consumidores e houver outros pesquisadores ativos dentro desse grupo de consumidores, o Apache Kafka distribuirá mensagens entre todos os consumidores. Em outras palavras, o EventBridge não receberá todas as mensagens para o tópico do Apache Kafka. Se quiser que o EventBridge gerencie todas as mensagens do tópico, desative todos os outros pesquisadores desse grupo de consumidores.
Além disso, se especificar um ID de grupo de consumidores e o Apache Kafka encontrar um grupo de consumidores válido já existente com o mesmo ID, o EventBridge ignorará o parâmetro StartingPosition
no seu pipe. Em vez disso, o EventBridge 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 Apache 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 Apache Kafka. Após criar um pipe com o ID do grupo de consumidores especificado, não poderá atualizar este valor.
Ajuste de escala automático da origem do Amazon MSK
Ao criar inicialmente uma origem de eventos do Amazon MSK, o EventBridge aloca um consumidor para processar todas as partições no tópico do Apache Kafka. Cada consumidor conta com vários processadores em execução em paralelo para lidar com um aumento de workloads. O EventBridge aumenta ou reduz a escala verticalmente automaticamente do número de consumidores com base na workload. Para preservar a ordenação de mensagens em cada partição, o número máximo de consumidores é um consumidor por partição no tópico.
A cada um minuto, o EventBridge avalia o atraso de compensação do consumidor de todas as partições do tópico. Se o atraso for muito alto, a partição está recebendo mensagens mais rápido do que o EventBridge pode processá-las. Se necessário, o EventBridge adiciona ou remove os consumidores do tópico. O processo de escalabilidade de adicionar ou remover consumidores ocorre em até três minutos após a avaliação.
Se seu destino estiver sobrecarregado, o EventBridge reduz o número de consumidores. Essa ação reduz a workload no pipe, reduzindo o número de mensagens que os consumidores podem recuperar e enviar para o pipe.