コンテンツに移動
デベロッパー

Eventarc と Workflows の統合

2021年6月14日
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 サービスに送信できます。

https://storage.googleapis.com/gweb-cloudblog-publish/images/eventarc-architecture.max-2000x2000.png

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 メッセージがワークフローの実行をトリガーしたことが確認できます。

https://storage.googleapis.com/gweb-cloudblog-publish/images/workflows-logs.max-1400x1400_1.max-1200x1200.png

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

投稿先