Przedstawiamy routing zdarzeń między regionami z Amazon EventBridge

10 maja 2021

Korzystając z Amazon EventBridge, od teraz możesz kierować wydarzenia z dowolnego komercyjnego regionu AWS Region do innych obsługiwanych regionów.

Początkowa lista obsługiwanych regionów docelowych prezentuje się w następujący sposób: wschodnie stany USA (Północna Wirginia), zachodnie stany USA (Oregon), Europa (Irlandia). Poniższy artykuł tłumaczy, w jaki sposób skonfigurować routing zdarzeń między regionami i na podstawie przykładu przedstawia, w jaki sposób możesz to wdrożyć do konta AWS.

Amazon EventBridge umożliwia programistom kierowanie zdarzeń między usługami AWS, zintegrowanymi aplikacjami typu „oprogramowanie jako usługa” (SaaS), a także Twoimi własnymi aplikacjami. To może okazać się pomocne w oddzieleniu aplikacji i tworzeniu bardziej rozszerzalnych i łatwych w utrzymaniu architektur. Wraz z tą nową funkcją możesz od teraz kierować zdarzenia w regionach przy użyciu tego samego modelu, który jest używany do kierowania zdarzeń do już istniejących celów.

To znacznie ułatwia opracowywanie obciążeń multiregionalnych i może służyć do:

  • scentralizowania swoich wydarzeń AWS w jednym regionie do celów audytu i monitorowania. Na przykład możesz przechwytywać wszystkie zdarzenia obciążenia pracą z wielu regionów globalnych w stanie USA-wschód w celu raportowania zgodności;
  • wywołania asynchronicznych przepływów pracy w innym regionie ze zdarzenia źródłowego. Na przykład możesz zrównoważyć obciążenie z regionu docelowego, kierując zdarzenia do innego regionu;
  • replikowania zdarzeń ze źródła do regionów docelowych, aby ułatwić synchronizację danych w magazynach danych pomiędzy regionami.

Jak działa routing między regionami

Serie zdarzeń kierują zdarzenia przy użyciu reguł, które dopasowują zdarzenia do wzorców i kierują do określonych targetów. Aby kierować zdarzenie z Event Bus w jakimkolwiek Regionie, należy utworzyć regułę i zdefiniować, do której magistrali zdarzeń ma być kierowane. Obecnie możesz kierować je do dowolnej magistrali zdarzeń w trzech obsługiwanych regionach. Serie zdarzeń Event Bus między regionami mogą znajdować się na tym samym koncie AWS lub na różnych kontach AWS.

cross region AWS

Używanie magistrali między regionami działa w ten sam sposób, jak wykorzystywanie magistrali między kontami jako targetów. Aby dodać magistralę do innego regionu jak target do reguły należy:

1. Przejść do konsoli EventBridge. Wybrać Utwórz regułę

2. Podać nazwę i wzorzec, a następnie wybrać źródłową magistralę zdarzeń

3. W panelu Wybierz target:

Event Bus konfiguracja

    1. W polu Target wybierz Event bus in a different account or Region
    2. W przypadku magistrali zdarzeń wprowadź ARN docelowej magistrali zdarzeń
    3. Zachowaj wybraną opcję Create a new role for this specific resource. Tworzy to niezbędne uprawnienia IAM, aby umożliwić regule umieszczanie zdarzeń na magistrali docelowej

4. Wybierz Zapisz.

Zdarzenia, które pasują do reguły, są następnie dostarczane do docelowej magistrali zdarzeń między regionami. Dostarczone zdarzenie jest identyczne jak oryginalne zdarzenie i nie zawiera żadnych dodatkowych metadanych ani atrybutów.

Jeśli używasz interfejsu CLI do skonfigurowania targetu, musisz ręcznie utworzyć rolę IAM, która zapewnia uprawnienie reguły do kierowania do magistrali docelowej. Ta rola powinna obejmować strategię, która zezwala na akcję event:PutEvents dla magistrali docelowej:

JSON
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "events:PutEvents" ], "Resource": [ "arn:aws:events:us-east-1:123456789012:event-bus/*" ] } ] }

Musisz także włączyć events.amazonaws.com jako zaufany podmiot  w roli IAM:

JSON

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "events.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

Magistrala docelowa wymaga także reguły do przetworzenia zdarzenia, w innym przypadku zdarzenie zostanie odrzucone. Możesz utworzyć regułę na magistrali docelowej, aby skierować zdarzenie do funkcji AWS Lambda, kolejek Amazon SQS, miejsc docelowych API lub innego dostępnego targetu.

Tworzenie reguły routing między regionami w AWS CloudFormation

Korzystając z AWS CloudFormation lub AWS Serverless Application Model (AWS SAM), możesz wdrażać magistrale EventBridge, reguły i polityki korzystając z IaC, czyli infrastruktury jako kodu. Aby utworzyć regułę w magistrali zdarzeń, która kieruje zdarzenia między regionami, najpierw utwórz zasób AWS::Events::Rule:

YAML

Resources:
  EventRuleRegion1: 
    Type: AWS::Events::Rule
    Properties: 
      Description: "Routes to us-east-1 event bus"
      EventBusName: "MyBusName"
      State: "ENABLED"
      EventPattern: 
        source:
          - 'MyTestApp'
        detail:
          - 'MyTestAppDetail'
      Targets: 
        - Arn: "arn:aws:events:us-east-1:123456789012:event-bus/CrossRegionDestinationBus"
          Id: " CrossRegionDestinationBus"
          RoleArn: !GetAtt EventBridgeIAMrole.Arn

Następnie utwórz zasób AWS::IAM::Role, który umożliwia EventBridge umieszczanie zdarzeń na magistrali docelowej w regionie docelowym.

YAML

EventBridgeIAMrole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: 2012-10-17
        Statement:
        - Effect: Allow
          Principal:
            Service:
              !Sub events.amazonaws.com
          Action: sts:AssumeRole
      Path: /
      Policies:
      - PolicyName: PutEventsDestinationBus
        PolicyDocument:
          Version: 2012-10-17
          Statement:
          - Effect: Allow
            Action:
            - events:PutEvents
            Resource:
            - "arn:aws:events:us-east-1:123456789012:event-bus/CrossRegionDestinationBus"

Ograniczanie dostępu do tych, którzy mogą kierować wydarzenia między Regionami

W przypadku routingu zdarzeń między regionami podstawą jest zawsze rola IAM skonfigurowana jako część targetu w regionie źródłowym. Możesz także kierować wydarzenia do międzyregionalnych magistrali w innych kontach AWS. Ta część artykułu przedstawia, w jaki sposób zmniejszyć dostęp, aby ograniczyć to, które z jednostek mogą kierować zdarzenia do docelowej magistrali między regionami.

Zezwalanie tylko zdefiniowanym regułom na wysyłanie zdarzeń między Regionami

Możesz zdefiniować zasady oparte na zasobach, korzystając z operatora warunkowego ArnEquals w celu ograniczenia uprawnień do podzbioru reguł. Ten warunek może być używany w zasadach magistrali zdarzeń lub w zasadach IAM.

Na przykład – następująca zasada zezwala regułom z magistrali zdarzeń w dwóch regionach (us-west-2 i me-south-1) na koncie 111122223333 na wysyłanie zdarzeń do magistrali docelowej na koncie 444455556666 (us-east-1):

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowRulesForCrossRegionEvents",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::444455556666:root"
      },
      "Action": "events:PutEvents",
      "Resource": "arn:aws:events:us-east-1:111122223333:event-bus/CrossRegionBus",
      "Condition": {
        "ArnEquals": {
          "aws:SourceArn": [
            "arn:aws:events:us-west-2:444455556666:rule/CrossRegionBus/SendToUSE1AnotherAccount",
            "arn:aws:events:me-south-1:444455556666:rule/CrossRegionBus/SendToUSE1AnotherAccount"
          ]
        }
      }
    }
  ]
}

Zezwalanie tylko niektórym regionom z zatwierdzonych kont AWS

W podobny sposób możesz użyć zasad IAM dołączonych do docelowej magistrali zdarzeń, aby ograniczyć regiony i konta, które mogą wysyłać obiekty docelowe między regionami. Na przykład – ta zasada umożliwia kierowanie zdarzeń z dwóch regionów (us-west-2 and me-south-1) z konta 444455556666 do magistrali zdarzeń o nazwie CrossRegionBus na koncie 111122223333 (us-east-1):

JSON

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowEventsFromTwoRegions",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam:444455556666:root"
      },
      "Action": "events:PutEvents",
      "Resource": "arn:aws:events:us-east-1:111122223333:event-bus/CrossRegionBus",
      "Condition": {
        "ArnEquals": {
          "aws:SourceArn": [
            "arn:aws:events:us-west-2:*:*",
            "arn:aws:events:me-south-1:*:*"
          ]
        }
      }
    }
  ]
}

Odmowa dostępu zdarzeniom z określonych regionów

Następująca zasada, dołączona do magistrali międzyregionowej konta 111122223333, odmawia dostępu zdarzeniom z określonych Regionów. Polityka posiada dwa oświadczenia. Pierwsze zezwala na wszystkie zdarzenia z konta 444455556666, a druga dodaje wyraźną odmowę dla wszystkich wydarzeń z us-west-2.

JSON

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowAllEventsFromAccount_444455556666 ",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam:444455556666:root"
      },
      "Action": "events:PutEvents",
      "Resource": "arn:aws:events:us-east-1:111122223333:event-bus/CrossRegionBus"
    },
    {
      "Sid": "DenyAllCrossRegionEventsFrom-us-west-2",
      "Effect": "Deny",
      "Principal": {
        "AWS": "*"
      },
      "Action": "events:PutEvents",
      "Resource": "arn:aws:events:us-east-1:111122223333:event-bus/CrossRegionBus",
      "Condition": {
        "ArnEquals": {
          "aws:SourceArn": [
            "arn:aws:events:us-west-2:*:*"
          ]
        }
      }
    }
  ]
}

Wdrażanie przykładowej aplikacji

Przykładowa aplikacja tworzy niestandardowe magistrale zdarzeń i inne zasoby w czterech regionach. Region źródłowy zawiera webhook, który pomaga zademonstrować funkcjonalność routingu:

wdrażanie przykładowej aplikacji w czterech regionach

  1. W regionie źródłowym punkt końcowy Amazon API Gateaway wywołuje funkcję Lambda, która umieszcza zdarzenie na magistrali zdarzeń. Używa parametru zapytania Region, aby przekazać docelowy region do ładunku zdarzenia;
  2. Wyróżnia się trzy reguły dotyczące niestandardowej magistrali zdarzeń w regionie źródłowym. Każda reguła filtruje atrybut Region, aby kierować do magistrali zdarzeń;
  3. Każdy region docelowy posiada niestandardową magistralę zdarzeń do odbierania zdarzeń między regionami. Istnieje również reguła, która kieruje te zdarzenia do funkcji Lambda w celu zarejestrowania danych wyjściowych.

Aby wdrożyć tę aplikację:

  1. Z terminala sklonuj GitHub repo i przejdź do katalogu rozwiązań: git clone https://github.com/aws-samples/serverless-patterns
    cd ./eventbridge-cross-region/eventbus-destination
  2. Najpierw wdróż docelowe magistrale zdarzeń w obsługiwanych regionach. Uruchom następującą komendę trzy razy, za każdym zastępując Region rozmieszczenia przez us-east-1, us-west-2 i eu-west-1:sam deploy --guided sam deploy --guided
  3. Następnie wdróż szablon regionu źródłowego, który z kolei wdraża niestandardową magistralę zdarzeń i element webhook. Wybierz dowolny region z wyjątkiem trzech regionów z kroku 2:cd ../eventbus-source
    sam deploy --guided cd ../eventbus-source sam deploy --guided
  4. Kiedy stos jest utworzony, zanotuj wartość wyjściową adresu URL interfejsu API CloudFormation from deploy stack

Aby przetestować routing zdarzeń:

  1. Użyj Curl lub Postman, aby wywołać punkt końcowy interfejsu API, zamieniając <> na us-east-1: API endpoint, replacing <<region code>> with us-east-1:
  2. Przejdź do konsoli Lambda w us-east-1. Wybierz funkcję zaczynającą się od „eventbridge-cross-region-destination”
  3. Wybierz Monitor tab, a następnie Wyświetl dzienniki CloudWatch
  4. Wybierz najnowszą transmisję, aby zobaczyć zdarzenie. Pokazuje region źródłowy w atrybucie regionu i region szczegółowy w atrybucie szczegółów detail attribute:
  5. Powtórz test, zmieniając parametr zapytania w punkcie końcowym interfejsu API z us-east-1 to us-west-2 i eu-west-1. Zweryfikuj dzienniki funkcji Lambda w tych regionach, aby zobaczyć, że zdarzenia zostały pomyślnie skierowane.

Wnioski

Dzięki routingowi zdarzeń między regionami w EventBridge od teraz możesz kierować zdarzenia z dowolnego regionu AWS do innych obsługiwanych regionów. Powyższy artykuł stanowił objaśnienie, jak skonfigurować routing zdarzeń między regionami w konsoli i interfejsie wiersza polecenia, a także wyjaśniono, jak ograniczyć dostęp do możliwości routingu.

Więcej bezserwerowych zasobów edukacyjnych znajdziesz na witrynie Serverless Land.

źródło: AWS

Case Studies
Referencje

Firma Hostersi pozwoliła nam osadzić ogólne zagadnienia programu Well Architected Framework w kontekście naszej firmy. Oszczędziło nam to wiele czasu i pozwoliło znaleźć lepiej dopasowane rozwiązania do specyfiki naszego biznesu. WAF był świetnym katalizatorem do wprowadzenie szeregu zmian w obszarze niezawodności, szybkości i bezpieczeństwa edrone. 

Piotr Stachowicz
CTO
W skrócie o nas
Specjalizujemy się w dostarczaniu rozwiązań IT w obszarach projektowania infrastruktury serwerowej, wdrażania chmury obliczeniowej, opieki administracyjnej i bezpieczeństwa danych.