AWSイベントブリッジを用いたアイスクリームフレーバーピッカー


分散型マイクロサービスアーキテクチャでは、それぞれのサービスを行い、それぞれのサービスが他のサービスと相互作用する.まず最初に、各サービスは独立しており、変更をより速く展開することができます.しかし、アプリケーションが成長を開始すると、それは全体のアプリケーションを堅く結合するサービス間の相互作用の多くを持つ傾向がある.
このブログでは、どのようなイベントブリッジがあるのか、どのようにしてマイクロサービスアーキテクチャの欠点を克服するのかを見ていきます.

マイクロサービス物語


クライアントは注文サービスに要求をし、順番に配送サービスに要求を送る.配達サービスは注文サービスへの成功した応答として201を返します、そして、オーダーサービスはクライアントに応答を送ります.私たちはすべてここから始まります、そして、各々のサービスが互いから切り離されるように見えます.

注文サービスでそれらを統合するより多くのサービスを加えるとき、何が起こりますか.現在、あなたが見るように、オーダーサービスはより多くの責任を持ちます.

オーダーサービスは各サービスで調整しなければなりません.リトライシナリオがあれば、オーダーサービスはそれらを処理しなければなりません.サービスのうちの1つが更新されるとき、オーダーサービスは同じものを更新する必要があります.私たちが新しいサービスと注文サービスを加えるならば、この新しいサービスを知らないでしょうか?方法については、トランザクションを反転?サービスの一つが利用できない場合はどうでしょう.だから今、我々は複雑な状況にある.MicroServiceは私たちの友人のように見えません.

イベントブリッジ


Amazon EventBridgeは、さまざまなソースからデータをアプリケーションに接続するためのServerless Eventバスサービスです.イベントはEventBridgeの中心であり、イベントは観測可能です.以前は、マイクロサービスアーキテクチャでは、APIを持っていましたが、どのサービスに対してどのサービスを指示するのでしょうか.しかし、イベントが観測可能である今、我々はちょうどいくつかの変更がイベントバスに起こったことを通知します.他の消費者は、イベントバスを聞くことができますし、自分のユースケースに基づいて行動を取る.

私たちが見るように、順序が置かれたとき、イベントはイベントブリッジに引き起こされます.在庫サービスのような他の消費者は在庫をチェックし、配達サービスは配送をチェックします.我々はまた、同じイベントブリッジを購読し、イベントに興味を持っていない他の消費者を持つことができますので、彼らはどんな行動を取ることはありません.そこで,マイクロサービスアーキテクチャで見たタイトな結合を最小化した.
イベントブリッジはまた、多くのSaaSベースのアプリケーションとサードパーティ製アプリケーションとの統合をサポートしています.また、ラムダ関数、ステップ関数のような他のAWSサービスにイベントを送信するサポートしています.

イベントブリッジの主な利点

  • アプリケーションのデカップリング
  • 簡易イベントルーティング
  • 有効性の向上
  • 第三者統合
  • イベントブリッジで使用される用語

  • イベント-イベントの変更を示します.これはAWSサービス、サードパーティサービス、または独自のカスタムアプリケーションのいずれかで変更することができます.
  • イベントバス-イベントバスはイベントを受け取ります.ルールを作成するときは、特定のイベントバスと関連づけ、そのイベントバスによって受信されたイベントにのみ一致します.デフォルトでは、AWSアカウントはAWSサービスからイベントを受け取るデフォルトイベントバスを持っています.我々はイベントを受け取るためにカスタムイベントのバスを作成することができます.また、サードパーティ製アプリケーションからイベントを受け取るためにパートナーイベントバスを作成することができます.
  • ルール-ルールの着信イベントに一致し、さらに処理のための特定のターゲットにそれらをルーティングします.つのルールは複数のターゲットにルーティングできます.ルールの処理は、任意の順序ではなく、彼らも並列処理することができます.ルールは、ターゲットサービスに送信されたJSONをフィルタリングまたは強化することもできます.
  • target -ターゲットはイベントの処理を行うものです.ターゲットはラムダ関数、ステップ関数状態機械、または任意の組み込みターゲットです.ターゲットはJSON形式でイベントを受け取ります.
  • アイスクリーム風味ピッカー


    我々はどのようにイベントバスを作成することができます参照してください、ルールとターゲットを定義するICecreamフレーバーピッカーを使用してください.

    ステップ関数はEventBridgeをトリガーするために使用されます.EventBridgeは、特定のラムダ関数を実行する規則を定義します.ステップ関数への入力がバナナであるならば、EventBridgeバナナ規則は実行されます.ステップ関数への入力がアーモンドであるならば、EventBridgeアーモンド規則は実行します.

    ステップ関数の作成

  • 名前を持つ状態機械を作成します.
  • 次のようにステップ関数を定義します.
  • {
      "Comment": "A Ice Cream Flavor Chooser",
      "StartAt": "Create IceCream flavor",
      "States": {
        "Create IceCream flavor": {
          "Type": "Pass",
          "Next": "Flavor Choose"
        },
        "Flavor Choose": {
          "Type": "Choice",
          "Choices": [
            {
              "Variable": "$.icecreamFlavor.nut",
              "StringEquals": "almond",
              "Next": "Almond Flavor"
            },
            {
              "Variable": "$.icecreamFlavor.nut",
              "StringEquals": "banana",
              "Next": "Banana Flavor"
            }
          ],
          "Default": "DefaultState"
        },
        "Almond Flavor": {
          "Type": "Task",
          "Resource": "arn:aws:states:::events:putEvents",
          "Parameters": {
            "Entries": [
              {
                "Detail.$": "$.icecreamFlavor",
                "DetailType": "almond_flavor",
                "EventBusName": "Ice_cream_flavour",
                "Source": "IcecreamFlavor"
              }
            ]
          },
          "End": true
        },
        "Banana Flavor": {
          "Type": "Task",
          "Resource": "arn:aws:states:::events:putEvents",
          "Parameters": {
            "Entries": [
              {
                "Detail.$": "$.icecreamFlavor",
                "DetailType": "banana_flavor",
                "EventBusName": "Ice_cream_flavour",
                "Source": "IcecreamFlavor"
              }
            ]
          },
          "End": true
        },
        "DefaultState": {
          "Type": "Fail",
          "Cause": "No Matches!"
        }
      }
    }
    
    選択された風味のタイプに応じて、それはイベントを特定のイベント規則に置きます.

    EventBusとイベント規則を作成する


    イベントバスはさまざまなソースからイベントを受け取り、あなたのアカウントのルールにマッチします.
  • 名前を使用してイベントバスを作成する
  • 名前を使用してルールを作成する
  • カスタムパターンを選択します
  • {
      "source": ["IcecreamFlavor"],
      "detail-type": ["almond_flavor"]
    }
    
  • ターゲットラムダ関数を選択します.
  • 名前を使用してルールを作成する
  • カスタムパターンを選択します
  • {
      "source": ["IcecreamFlavor"],
      "detail-type": ["banana_flavor"]
    }
    
  • ターゲットラムダ関数を選択します.
  • ラムダ関数の作成

  • ラムダ関数を作成します
  • インデックスのコードを変更します.以下のJS.
  • exports.handler = async (event) => {
      console.log(event);
      var nutType = event.detail.nut;
      console.log("The type of Flavor is: ", nutType);
      return nutType;
    };
    

    アプリケーションのテスト

  • 次のアーモンドJSONをICecreamflavourstateachineステップ関数に送りましょう
  • {
      "icecreamFlavor": {
        "nut": "almond"
      }
    }
    
    我々が実行を始めるとき、我々はそれがアーモンド・イベント橋規則を引き継ぐのを見ます.

    イベントIDも見ますae9a19c8-72d7-e5e9-1fa0-87c3f4666faa , この関数を使用してアーモンドダックスのicecreamラムダ関数を呼び出します.
  • 次のバナナJSONをICecreamflavourstateachineステップ関数に送りましょう
  • {
      "icecreamFlavor": {
        "nut": "banana"
      }
    }
    
    実行を開始すると、以下に示すように、バナナイベントブリッジ規則をトリガーします.

    イベントIDも見ますfcbfbe74-8a05-00fe-6aa5-01793b4c2c1f , BananaRenicecreamラムダ関数が呼び出されることを確認することができます.

    結論


    このブログのポストでは、どのようなイベントブリッジがどのようにルールを作成し、ルールにパターンを適用する方法を見た.我々は、ステップ機能、イベントブリッジ、およびラムダ関数を使用してICEREREAMフレーバーピッカーの例のアプリケーションを見てきました.イベントブリッジについてもっと知るために、ステップ関数とラムダ関数は公式ドキュメントにhttps://docs.aws.amazon.com/ .