Eventarc と Workflows の統合
Google Cloud Japan Team
※この投稿は米国時間 2021 年 5 月 28 日に、Google Cloud blog に投稿されたものの抄訳です。
以前のブログ投稿では、イベント ドリブン Cloud Run サービスのコレオグラフィーを可能にする Eventarc について説明し、サービスのオーケストレーションを実現する Workflows を紹介しました。
Eventarc と Workflows は、厳密なコレオグラフィーやオーケストレーションを必要とするアーキテクチャにおいて非常に便利なツールです。しかし、コレオグラフィーとオーケストレーションの両方を組み合わせたハイブリッド アーキテクチャが必要な場合もあります。
たとえば、Pub/Sub トピックへのメッセージによってインフラストラクチャの自動ワークフローをトリガーするユースケースや、Cloud Storage バケットへのファイル アップロードによって画像処理ワークフローをトリガーするユースケースが当てはまります。こうしたユースケースでは、イベントがトリガーになっていますが、実際の作業はオーケストレートされたワークフローとして行われます。
このようなハイブリッド アーキテクチャを Google Cloud で実装するにはどうすればよいでしょうか。その答えは、Eventarc と Workflows の統合にあります。
Eventarc トリガー
簡単にまとめると、Eventarc トリガーを使用すると、Audit Logs を通じて Google Cloud ソースから、または Pub/Sub を通じてカスタムソースからイベントを読み取り、Cloud Run サービスに送信できます。
Eventarc の制約は、現時点ではサポートされるターゲットが Cloud Run に限られる点です。今後、より多くのイベント ターゲットがサポート対象に追加される予定です。将来的には、Eventarc トリガーによって、異なるさまざまなソースのイベントを Workflows に直接ルーティングできるようにしたいと考えています。
現時点では、そのような Workflows 対応のトリガーがないので、Eventarc を Workflows に接続するためには多少の作業が必要になります。具体的には、Cloud Run サービスをプロキシとして仲介させ、ワークフローを実行する必要があります。
いくつか具体例を見ていきましょう。
Eventarc Pub/Sub と Workflows の統合
最初に、Pub/Sub メッセージでワークフローをトリガーする例を紹介します。
ワークフローを定義してデプロイする
まず、実行するワークフローを定義します。Pub/Sub メッセージ本文を単にデコードしてログに記録する workflows.yaml のサンプルをご覧ください。
Cloud Run サービスをデプロイしてワークフローを実行する
次に、このワークフローを実行するための Cloud Run サービスが必要になります。Workflows には実行用 API とクライアント ライブラリが用意されていて、任意の言語で使用できます。以下は、ノードの app.js ファイルから抜粋した実行コードのサンプルです。これは単に、受信した HTTP リクエスト ヘッダーと本文をワークフローに渡して実行するコードです。
環境変数として渡される Workflows 名とリージョンを使用して Cloud Run サービスをデプロイします。
Pub/Sub トピックを Cloud Run サービスに接続する
Cloud Run と Workflows が接続されたら、次のステップは、Eventarc Pub/Sub トリガーを作成して Pub/Sub トピックを Cloud Run サービスに接続することです。
これにより、内部で Pub/Sub トピックが作成され、以下のコマンドで接続できるようになります。
ワークフローをトリガーする
以上ですべての接続作業が完了したので、Eventarc によって作成されたトピックに Pub/Sub メッセージを送信するだけでワークフローをトリガーできます。
数秒後に Workflows ログにメッセージが表示され、Pub/Sub メッセージがワークフローの実行をトリガーしたことが確認できます。
Eventarc 監査ログストレージと Workflows の統合
次に、Cloud Storage バケット内のファイル作成イベントでワークフローをトリガーする例を紹介します。いくつかの違いはあるものの、Pub/Sub の例と同様のステップです。
ワークフローを定義してデプロイする
例として、バケットとファイル名をログに記録する以下の workflow.yaml を参考にすることができます。
Cloud Run サービスをデプロイしてワークフローを実行する
Cloud Run サービスで、CloudEvent SDK と Google Event ライブラリを使用して Eventarc から CloudEvent を読み取り、app.js からバケットとファイル名を抽出します。
ワークフローを実行するステップは Pub/Sub の例とほぼ同じです。HTTP リクエスト全体ではなく、バケットとファイルの名前のみをワークフローに渡す点だけが異なります。
Cloud Storage イベントを Cloud Run サービスに接続する
Cloud Storage イベントを Cloud Run サービスに接続するには、Eventarc Audit Logs トリガーを Cloud Storage のサービス名とメソッド名で作成します。
ワークフローをトリガーする
最後に、ファイルを作成してバケットにアップロードすれば、ワークフローをトリガーできます。
数秒後にバケットとオブジェクトの名前がワークフローのログに表示されます。
まとめ
このブログ投稿では、Eventarc の 2 種類の異なるイベントでワークフローをトリガーする方法を紹介しました。この逆を行うことももちろん可能です。つまり、Workflows から Pub/Sub メッセージ(connector_publish_pubsub.workflows.yaml を参照)を使って、または Workflows からバケットへのファイル アップロードを使って、Eventarc 経由で Cloud Run サービスをトリガーできます。
このブログ投稿で取り上げているコードはすべて eventarc-workflows-integration に含まれています。ご質問やご意見がございましたら、お気軽に Twitter で @meteatamel までお寄せください。
-デベロッパー アドボケイト Mete Atamel