Crie uma EventBridge conexão entre contas da Amazon em uma organização - Recomendações da AWS

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Crie uma EventBridge conexão entre contas da Amazon em uma organização

Sam Wilson e Robert Stone, Amazon Web Services

Resumo

Grandes sistemas distribuídos usam EventBridge a Amazon para comunicar mudanças de estado entre várias contas da Amazon Web Services (AWS) em uma AWS Organizations organização. No entanto, geralmente EventBridge é capaz de atingir apenas endpoints ou consumidores no mesmo Conta da AWS. A exceção consiste em um barramento de eventos em outra conta. Esse barramento de eventos é um destino válido. Para que eventos de um barramento de eventos em outra conta possam ser consumidos, esses eventos devem ser enviados do barramento de eventos da conta de origem para o barramento de eventos da conta de destino. Para evitar desafios ao gerenciar eventos críticos em aplicativos diferentes Contas da AWS, use a abordagem recomendada apresentada nesse padrão.

Esse padrão ilustra como implementar uma arquitetura orientada a eventos EventBridge que envolva vários Contas da AWS em uma organização. AWS Organizations O padrão usa o AWS Cloud Development Kit (AWS CDK) Toolkit e. AWS CloudFormation

EventBridge oferece um barramento de eventos sem servidor que ajuda você a receber, filtrar, transformar, rotear e entregar eventos. Um componente essencial das arquiteturas orientadas por eventos, EventBridge suporta a separação entre produtores de mensagens e consumidores dessas mensagens. Em uma única conta, isso é simples. Uma estrutura com várias contas requer considerações adicionais para que eventos no barramento de eventos de uma conta possam ser consumidos por outras contas na mesma organização.

Para obter informações sobre considerações específicas de conta para produtores e consumidores, consulte a seção Informações adicionais.

Pré-requisitos e limitações

Pré-requisitos

Versões do produto

O desenvolvimento e os testes deste padrão foram realizados com as seguintes ferramentas e versões:

  • AWS CDK Kit de ferramentas 2.126.0

  • Node.js 18.19.0

  • npm 10.2.3

  • Python 3.12

Esse padrão deve funcionar com qualquer versão da AWS CDK v2 ou npm. As versões do Node.js de 13.0.0 a 13.6.0 não são compatíveis com o AWS CDK.

Arquitetura

Arquitetura de destino

O diagrama apresentado a seguir ilustra o fluxo de trabalho da arquitetura para enviar um evento de uma conta e consumi-lo em outra conta.

O processo em três etapas para conectar a conta produtora de origem à conta consumidora de destino.

O fluxo de trabalho contém as seguintes etapas:

  1. A AWS Lambda função Producer na conta Source coloca um evento no barramento de EventBridge eventos da conta.

  2. A EventBridge regra entre contas encaminha o evento para um barramento de EventBridge eventos na conta de destino.

  3. O barramento de EventBridge eventos na conta de destino tem uma regra Lambda de destino que invoca a função Consumer Lambda.

Uma prática recomendada é empregar uma fila de mensagens não entregues (DLQ, na sigla em inglês) para gerenciar falhas nas invocações da função do Lambda com papel de consumidora. No entanto, a DLQ foi omitida desta solução para facilitar a compreensão. Para saber mais sobre como implementar uma DLQ em seus fluxos de trabalho e melhorar a capacidade de recuperação de falhas, consulte a postagem do blog Implementando padrões de tratamento de AWS Lambda erros.

Automação e escala

AWS CDK provisiona automaticamente a arquitetura necessária. EventBridge pode escalar para milhares de registros por segundo, dependendo do Região da AWS. Para obter mais informações, consulte a documentação de EventBridge cotas da Amazon.

Ferramentas

Serviços da AWS

  • AWS Cloud Development Kit (AWS CDK)é uma estrutura de desenvolvimento de software que ajuda você a definir e provisionar Nuvem AWS infraestrutura em código. Esse padrão usa o AWS CDK Toolkit, um kit de desenvolvimento em nuvem de linha de comando que ajuda você a interagir com seu AWS CDK aplicativo.

  • EventBridgeA Amazon é um serviço de ônibus de eventos sem servidor que ajuda você a conectar seus aplicativos com dados em tempo real de várias fontes. Por exemplo, AWS Lambda funções, endpoints de invocação HTTP usando destinos de API ou barramentos de eventos em outros. Contas da AWS

  • O AWS Lambda é um serviço de computação que ajuda a executar código sem exigir provisionamento ou gerenciamento de servidores. Ele executa o código somente quando necessário e dimensiona automaticamente, assim, você paga apenas pelo tempo de computação usado.

  • AWS Organizationsé um serviço de gerenciamento de contas que ajuda você a consolidar várias Contas da AWS em uma organização que você cria e gerencia centralmente.

Outras ferramentas

  • O Node.js é um ambiente de tempo de JavaScript execução orientado a eventos projetado para criar aplicativos de rede escaláveis.

  • O npm é um registro de software executado em um ambiente Node.js e usado para compartilhar ou emprestar pacotes e gerenciar a implantação de pacotes privados.

  • Python é uma linguagem de programação de computador de uso geral.

Repositório de código

O código desse padrão está disponível no repositório GitHub cross-account-eventbridge-in-organization.

Práticas recomendadas

Para conhecer as melhores práticas ao trabalhar com EventBridge, consulte os seguintes recursos:

Épicos

TarefaDescriptionHabilidades necessárias

Configure as credenciais locais para a conta de origem e para a conta de destino.

Consulte Setting up new configuration and credentials e escolha o método de autenticação e de credencial mais adequado ao seu ambiente.

Importante

Certifique-se de configurar a autenticação da conta AWS CLI de origem e da conta de destino.

Estas instruções partem do pressuposto de que você já configurou dois perfis da AWS localmente: sourceAccount e destinationAccount.

Desenvolvedor de aplicativos

Inicialize os dois Contas da AWS.

Para inicializar as contas, execute os seguintes comandos:

cdk bootstrap --profile sourceAccount cdk bootstrap --profile destinationAccount
Desenvolvedor de aplicativos

Clone o código do padrão.

Para clonar o repositório, execute o seguinte comando:

git clone git@github.com:aws-samples/aws-cdk-examples.git

Em seguida, altere o diretório para a pasta do projeto recém-clonada:

cd aws-cdk-examples/python/cross-account-eventbridge-in-organization
Desenvolvedor de aplicativos
TarefaDescriptionHabilidades necessárias

Modifique cdk.json com seus detalhes AWS Organizations e da conta.

Na pasta raiz do projeto, realize as seguintes alterações em cdk.json:

  • organization_id: o ID do Organizations das contas envolvidas na implantação

  • event_bus_name: CrossAccount, podendo ser renomeado

  • rules[].targets[].arn‒ O Conta da AWS ID da conta consumidora (conta de destino)

Desenvolvedor de aplicativos

Implante os ProducerStack recursos.

Execute o seguinte comando usando o diretório raiz do projeto:

cdk deploy ProducerStack --profile sourceAccount

Quando solicitado, aceite as novas funções do IAM e outras permissões relacionadas à segurança criadas por meio de. AWS CloudFormation

Desenvolvedor de aplicativos

Verifique se os ProducerStack recursos estão implantados.

Para verificar os recursos, faça o seguinte:

  1. Em Console de gerenciamento da AWS Para a conta Source, escolha CloudFormation.

  2. Na lista de pilhas, escolha ProducerStack.

  3. Na guia Informações da pilha, verifique se o status da pilha é CREATE_COMPLETE. Opcionalmente, acesse a guia Recursos para conferir os recursos configurados.

Desenvolvedor de aplicativos
TarefaDescriptionHabilidades necessárias

Implante os ConsumerStack recursos.

Execute o seguinte comando usando o diretório raiz do projeto:

cdk deploy ConsumerStack --profile destinationAccount

Quando solicitado, aceite as novas funções do IAM e outras permissões relacionadas à segurança criadas por meio de. CloudFormation

Desenvolvedor de aplicativos

Verifique se os ConsumerStack recursos estão implantados

  1. No console da conta de destino, escolha CloudFormation.

  2. Na lista de pilhas, escolha ConsumerStack.

  3. Na guia Informações da pilha, verifique se o status da pilha é CREATE_COMPLETE. Opcionalmente, acesse a guia Recursos para conferir os recursos configurados.

Desenvolvedor de aplicativos
TarefaDescriptionHabilidades necessárias

Invoque a função do Lambda com perfil de produtora.

  1. No console da conta de origem, selecione Lambda.

  2. Na lista de funções, escolha ProducerStack- ProducerLambda XXXX (XXXX representa uma sequência de caracteres gerada automaticamente pelo AWS CDK).

  3. Selecione a guia Testar.

  4. No seção Evento de teste, selecione Testar.

    O conteúdo da área de texto JSON do evento pode ser qualquer JSON válido que será fornecido à função do Lambda como carga útil. Neste caso, o JSON fornecido por padrão atende às necessidades.

  5. Verifique se a mensagem Executing function: succeeded aparece em um banner verde acima da seção Evento de teste.

Desenvolvedor de aplicativos

Verifique se o evento foi recebido.

  1. No console da conta de destino, selecione Lambda.

  2. Na lista de funções, escolha ConsumerStack- ConsumerLambda XXXX (XXXX representa uma sequência de caracteres gerada automaticamente pelo AWS CDK).

  3. Escolha a guia Monitor (Monitorar).

  4. Na seção Monitor, escolha Exibir CloudWatch registros.

  5. Na nova guia aberta, escolha o fluxo de logs correspondente ao fluxo de logs mais recente.

  6. Verifique se uma instrução de log, como a seguinte, aparece:

    [DEBUG]    2024-04-08T19:08:10.091Z    9c16844a-f9de-444d-b621-86afe64d4cc8    Event: {'version':'0', 'id':'0b9faa96-973f-8be2-ecf8-75e4f328b980', 'detail-type':'TestType', 'source':'Producer', 'account':'XXXXXXXXXXXX', 'time':'2024-04-08T19:08:09Z', 'region':'us-east-1', 'resources': [], 'detail': {'key1':'value1', 'key2':'value2', 'key3':'value3'}}

Desenvolvedor de aplicativos
TarefaDescriptionHabilidades necessárias

Destrua os ConsumerStack recursos.

Se você estiver usando este padrão como teste, limpe os recursos implantados para evitar custos adicionais.

Execute o seguinte comando usando o diretório raiz do projeto:

cdk destroy ConsumerStack --profile destinationAccount

Você receberá uma solicitação para confirmar a exclusão da pilha.

Desenvolvedor de aplicativos

Destrua os ProducerStack recursos.

Execute o seguinte comando usando o diretório raiz do projeto:

cdk destroy ProducerStack --profile sourceAccount

Você receberá uma solicitação para confirmar a exclusão da pilha.

Desenvolvedor de aplicativos

Solução de problemas

ProblemaSolução

Nenhum evento foi recebido na conta de destino.

  1. Verifique se o ID do Organizations fornecido está correto.

  2. Verifique se a conta de origem faz parte da organização fornecida.

  3. Verifique se as regras do barramento de eventos na conta de origem correspondem às informações corretas na conta de destino.

A invocação de uma função do Lambda usando o console retorna o seguinte erro:

User: arn:aws:iam::123456789012:user/XXXXX is not authorized to perform: lambda:Invoke

Entre em contato com seu Conta da AWS administrador para receber as permissões de lambda:Invoke ação apropriadas na função ProducerStack-ProducerLambdaXXXX Lambda.

Recursos relacionados

Referências

Tutoriais e vídeos

Mais informações

Regra do produtor

Na conta Source, um barramento de EventBridge eventos é criado para aceitar mensagens dos produtores (conforme mostrado na seção Arquitetura). Uma regra, juntamente com as permissões do IAM correspondentes, é criada nesse barramento de eventos. As regras têm como alvo o barramento de EventBridge eventos na conta de destino com base na seguinte cdk.json estrutura:

"rules": [ { "id": "CrossAccount", "sources": ["Producer"], "detail_types": ["TestType"], "targets": [ { "id": "ConsumerEventBus", "arn": "arn:aws:events:us-east-2:012345678901:event-bus/CrossAccount" } ] } ]

Para cada barramento de eventos consumidor, o padrão de eventos e o barramento de eventos de destino devem ser incluídos.

Padrão de evento

Os padrões de eventos filtram a quais eventos esta regra se aplicará. Para as finalidades deste exemplo, as origens de eventos e os detail_types dos registros identificam quais eventos serão transmitidos do barramento de eventos da conta de origem para o barramento de eventos da conta de destino.

Barramento de eventos de destino

Esta regra é destinada a um barramento de eventos que existe em outra conta. É necessário fornecer o arn (nome do recurso da Amazon) completo para identificar de forma exclusiva o barramento de eventos de destino, e o id é o identificador lógico usado pelo AWS CloudFormation. O barramento de eventos de destino não precisa existir de fato no momento da criação da regra de destino.

Considerações específicas sobre a conta de destino

Na conta de destino, um barramento de EventBridge eventos é criado para receber mensagens do barramento de eventos da conta de origem. Para permitir que os eventos sejam publicados usando a conta de origem, é necessário criar uma política baseada em recursos:

{ "Version": "2012-10-17", "Statement": [{ "Sid": "AllowOrgToPutEvents", "Effect": "Allow", "Principal": "*", "Action": "events:PutEvents", "Resource": "arn:aws:events:us-east-2:012345678901:event-bus/CrossAccount", "Condition": { "StringEquals": { "aws:PrincipalOrgID": "o-XXXXXXXXX" } } }] }

Conceder a permissão events:PutEvents é particularmente importante, pois ela autoriza qualquer conta da mesma organização a publicar eventos para este barramento de eventos. Ao definir aws:PrincipalOrgId como o ID da organização, as permissões necessárias são garantidas.

Padrão de evento

Você pode modificar o padrão de eventos fornecido conforme as necessidades do seu caso de uso:

rule = events.Rule( self, self.id + 'Rule' + rule_definition['id'], event_bus=event_bus, event_pattern=events.EventPattern( source=rule_definition['sources'], detail_type=rule_definition['detail_types'], ) )

A fim de evitar processamento desnecessário, o padrão de eventos deve especificar que somente os eventos a serem processados pela conta de destino sejam transmitidos para o barramento de eventos da conta de destino.

Política baseada em recursos

Este exemplo usa o ID da organização para controlar quais contas têm permissão para enviar eventos para o barramento de eventos da conta de destino. Considere usar uma política mais restritiva, como especificar a conta de origem.

EventBridge cotas

Considere as seguintes cotas:

  • O limite de cotas padrão é de 300 regras por barramento de eventos. Esse número pode ser expandido, se necessário, mas atende à maioria dos casos de uso.

  • Cinco destinos, por regra, é o máximo permitido. Recomendamos que os arquitetos de aplicações empreguem uma regra distinta para cada conta de destino, a fim de permitir um controle mais detalhado sobre o padrão de eventos.