Event Driven Architecture とは? Cloud Run と Eventarc を活用した Google Cloud (GCP)での実装例やデモンストレーションまで一挙紹介!
- Cloud Monitoring
- Cloud Run
- Eventarc
本記事は、2021年9月15日に開催された Google の公式イベント「オープンクラウドサミット」において、 Google Cloud のアプリケーションモダナイゼーションスペシャリストである塚越啓介氏が講演された「 Cloud Run と Eventarc による Event Driven Architecture 入門」のレポート記事となります。
今回は Google Cloud (GCP)の Cloud Run と Eventarc を活用した Event Driven Architecture の構築方法についてご説明します。各サービスの概要説明に加えて、 Eventarc のデモンストレーションも紹介していますので、ぜひ最後までご覧ください。
なお、本記事内で使用している画像に関しては、オープンクラウドサミット「 Cloud Run と Eventarc による Event Driven Architecture 入門」を出典元として参照しております。
それでは、早速内容を見ていきましょう。
目次
なぜイベントなのか?
なぜ 今 Event Driven Architecture なのか?
今、 Event Driven Architecture が注目を集めている理由として、以下の3つが挙げられます。
- Microservices
- Data consistency
- Loosely coupled
それぞれについて、詳しく見ていきましょう。
Microservices
イベント駆動型のシステムは古くから存在していましたが、マイクロサービスやコンテナの台頭により、イベント駆動型のシステムを構築する必要性が再燃しました。
Data consistency
イベント駆動型システムは、マイクロサービスがそれぞれ独自のデータベースを持つことで生じるデータの一貫性の問題を解決するのに役立ちます。
Loosely coupled
「if this-then that」システムを提供し、疎結合のマイクロサービスを接続するのにも役立ちます。
Event Driven Architecture とは?
Event Driven Architecture とは、マイクロサービスが状態変化(イベント)に対応するためのソフトウェア設計パターンです。発生したことの記録や、変更・削除ができない不変のファクトをキャプチャ、必要に応じて何度でも使用可能といった特性が存在します。
Event Driven Architecture のメリット
Event Driven Architecture のメリットとして、シンプルな点が挙げられます。「 if this-then that 」の形でシステムを構築できるため、一つ一つのサービスの役割を明確にし、シンプルに保ちやすくなります。
また、サービス毎に独立してデプロイやスケールができ、プッシュ型のメッセージングを実行できるため、リアルタイムな処理を実現可能になります。
イベントデータのオープンな仕様
CloudEvents ( cloudevents.io )は、イベントデータを一般的な方法で記述するための仕様です。この仕様は Cloud Native Computing Foundation ( CNCF )の Serverless Working Group によって編成されています。
加えて、イベントデータを扱いやすくするための CloudEvents SDK も提供されており、2021年9月時点では、 C# 、 Go 、 Java 、 Javascript 、 PHP 、 Python 、 Ruby 、 Rust などが挙げられます。
Google Cloud での実装例
Cloud Pub/Sub とは?
Cloud Pub/Sub は、イベントを処理するサービスとイベントを生成するサービスを切り離す非同期メッセージングサービスです。 Pull モードと Push モードでのスケーラブルで順序指定されたメッセージを配信し、0から数百GB / 秒までに対応する自動スケーリング機能を備えています。
さらに、高い可用性やパーティションのない自動スケーリング、自動プロビジョニングが提供されており、フィルタリングやデッドレタートピック、指数バックオフなど、アプリケーションの簡素化に役立つ様々な機能が搭載されている点が大きな特徴となっています。
Cloud Run とは?
Cloud Run はサーバーレスで提供されているサービスであり、フルマネージドなコンテナの実行環境です。コマンド1つでサービスのデプロイから外部公開まで可能であり、 VPC やロードバランサーなど下回りのインフラを気にする必要もないため、開発者はアプリケーション開発に集中することができます。
また、サービスをデプロイした瞬間から、メトリクスやロギングの収集を自動的に開始する点が大きな特徴の一つとなっています。 Cloud Monitoring / Logging とネイティブに連携しており、設定を別途行う必要はありません。
Cloud Run に関心のある方は以下の記事がオススメです。
2021最新機能を搭載した Cloud Run で高次元なセキュリティ対策を実現!
Google Cloud での実装例
サムネイル生成アプリ の同期的な実装
下図はアプリがサムネイル画像を生成するシナリオの例を示したものです。アプリはクライアントから画像ファイルを受け取り、サムネイルを生成します。そして、サムネイルとオリジナル画像を両方とも Cloud Storage に保存し、レスポンスを返します。
サムネイル生成アプリをイベントドリブンな形にする
はじめに、クライアントから画像を Cloud Storage に直接送信し、ファイルが配置されたことが Pub/Sub に通知されます。そして、イベントコンシューマーが Pub/Sub のトピックをサブスクライブしてメッセージを受け取った後、サムネイルを生成して Cloud Storage にアップロードします。
Eventarc によるトリガーの実装
Eventarc とは?
Eventarc は Google Cloud (GCP)で利用できるイベント機能です。 Eventarc を活用することで、各 Event source と Cloud Run を CloudEvents 形式で 繋ぎ、イベントドリブンなアーキテクチャを構成することができます。
90を超える Google Cloud (GCP)のソースから Cloud Audit Logs のエントリを使用して Cloud Run をトリガーでき、カスタムアプリケーションからのイベントは Pub/Sub を使用してイベント通知メッセージを送信します。
イベントによるトリガーのパターン
イベントによるトリガーのパターンには、大きく分けて以下の2つがあります。
Pub/Sub と Eventarc ( CloudEvents 準拠)
Eventarc トリガーのフィルタ条件で指定された Pub/Sub トピックにメッセージが公開されると、イベントが Cloud Run をトリガーします。カスタムアプリケーションからトリガー用途で利用します。
Cloud Audit Logs と Eventarc ( CloudEvents 準拠)
Eventarc トリガーのフィルタ条件に一致する Audit Log が作成されると、イベントが Cloud Run をトリガーします。 Google Cloud (GCP)サービスの各種イベントをトリガーする用途で利用します。
Eventarc トリガーの作成
Eventarc トリガーの作成に関しては、 Cloud Run サービスの「トリガー」タブからサービスとイベントを選択することで Audit Log Trigger を作ることができます。 Pub/Sub トリガーを使用する場合は、 Pub/Sub トピックを選択することでトリガーを作成可能です。また、 gcloud コマンドで作成することもできます。
Eventarc トリガーの管理
Eventarc トリガーの管理については、 Eventarc にどのようなトリガーが設定されているのかを確認できます。また、トリガーの詳細情報(トリガーの宛先、一致条件、名前)を見ることもでき、トリガーを削除することも可能です。以下、コマンド例を掲載しています。
イベントレシーバの実装
Cloud Run サービスは、イベントを含む HTTP リクエストを CloudEvents 形式で受信します。レシーバサービスが HTTP 2xx レスポンスを送信すると成功とみなされます。それ以外は失敗とみなされ、イベントが再送信されます。また、 CloudEvents SDK を使用することで HTTP リクエストを言語固有の CloudEvent オブジェクトに変換することができます。
Eventarc のデモンストレーション
ここからは、実際の画面で Eventarc のデモンストレーションを行います。今回は Cloud Audit Log のソースから Cloud Run をトリガーする手順をご説明します。
1.アプリケーションのビルド
以下、 Google Cloud (GCP)のコンソール画面です。 Google Cloud Storage のファイルが置かれたタイミングでトリガーし、 Cloud Run を実行するというシンプルなトリガー作成のデモンストレーションになります。
今回はデモンストレーション用にビルド済みの状態となっています。アプリケーションの部分は非常にシンプルであり、リクエストを受け取ってヘッダーを確認した際に ce-subject があるかどうかを判断し、なければエラーを返します。成功した場合はログを吐き出して200を返すというものになります。これがレジストリに登録されている状態となっており、画面上部の「サービスの作成」をクリックしてデプロイしていきます。
2.サービス名の入力
画面が遷移したらサービス名を入力して「次へ」をクリックします。
3.リビジョン構成の設定
リビジョン構成の部分はビルド済みのものを選択して「次へ」をクリックします。
これでデプロイを行うと通常の Cloud Run のデプロイになります。今回はサンプルなので認証なしでリクエストを受けられるようにしていますが、通常はセキュリティの観点から必要に応じて設定を考える必要があります。
4.トリガーの設定
ここからはトリガー設定に進んでいきます。まずはトリガーの名前を入力し、次にイベントの選択を行います。イベントの選択では Cloud Pub/Sub か AuditLog を選ぶことができます。今回は AuditLog の Google Cloud Storage のイベントをキックしたいので、「 storage.objects.create 」を選択します。これは Google Cloud Storage にオブジェクトが置かれたタイミングでキックするための設定です。
また、特定のバケットだけトリガーしたい場合や特定のオブジェクトだけトリガーしたい場合など、細かいルールもこの画面から設定することができます。
5.Cloud Run のデプロイ
各種設定が完了した後に「保存」をクリックすれば、 Cloud Run がデプロイされてトリガー作成が完了します。なお、トリガーが作成されるまでには少し時間がかかりますので注意してください。
6.作成したトリガーの確認
トリガー作成の手順は以上となりますが、作成したトリガーは管理画面から確認可能です。今回は時間の関係上、まったく同じ内容のトリガーを事前に作成しておきました。
次に Google Cloud Storage に遷移して、既に置いてあるバケットにオブジェクトを入れるとイベントがトリガーされます。ここでは任意のオブジェクトを選択してアップロードすることが可能です。
その後、 Cloud Run に遷移してトリガーされたことを確認します。作成したトリガーを選択して「ログ」を見ることでトリガーを確認することができます。
このように、 Google Cloud (GCP)を活用することで、直感的かつ簡単にイベントのトリガー設定を行うことが可能になります。
Cloud Run と Eventarc に関する FAQ
Q.Cloud Functions との違いは何ですか?
A.Cloud Run の方が使えるリソースが大きく、 Cloud Functions は小さい処理に向いています。そのため、自社が行う処理の内容次第で、適切なサービスを使い分けることが大切です。
Q.リトライやエラーハンドリングはどのように実装するのがオススメですか?
A.アプリケーションのサブスクライバーの構成として、正しいときに正常値を返して、それ以外の場合はエラーを返すような仕組みを作っておくと良いと思われます。
Q.Firebase と Cloud Run は連携できますか?
A.連携可能です。例えば、 Firebase hosting というホスティングサービスがありますが、このホスティングから Cloud Run にリダイレクトし、パスベースのルーティングを実現することができます。
まとめ
本記事では、 Google Cloud (GCP)の Cloud Run と Eventarc を活用した Event Driven Architecture の構築方法についてご説明しました。内容をご理解いただけましたでしょうか?
Event Driven Architecture を活用することで、「 if this-then that 」の形でシステムを構築できるため、一つ一つのサービスの役割を明確にし、シンプルに保ちやすくなります。また、サービス毎に独立して、デプロイやスケールができ、プッシュ型のメッセージングを実行できるため、リアルタイムな処理を実現可能になります。
さらに、 Eventarc と Cloud Run による実装により、 CloudEvents というオープンな仕様に沿った形でイベントのやりとりができます。 CloudEvents SDK によりイベントレシーバーを効率的に実装でき、 AuditLog と連携することで Google Cloud (GCP)の様々なイベントをトリガーにできます。
Cloud Run や Eventarc を使うためには Google Cloud (GCP)を契約する必要がありますが、 Google Cloud (GCP)を導入するのであればトップゲートがオススメです。
弊社トップゲートでは、Google Cloud (GCP) 利用料3%OFFや支払代行手数料無料、請求書払い可能などGoogle Cloud (GCP)をお得に便利に利用できます。さらに専門的な知見を活かし、
- Google Cloud (GCP)支払い代行
- システム構築からアプリケーション開発
- Google Cloud (GCP)運用サポート
- Google Cloud (GCP)に関する技術サポート、コンサルティング
など幅広くあなたのビジネスを加速させるためにサポートをワンストップで対応することが可能です。
Google Workspace(旧G Suite)に関しても、実績に裏付けられた技術力やさまざまな導入支援実績があります。あなたの状況に最適な利用方法の提案から運用のサポートまでのあなたに寄り添ったサポートを実現します!
Google Cloud (GCP)、またはGoogle Workspace(旧G Suite)の導入をご検討をされている方はお気軽にお問い合わせください。
メール登録者数3万件!TOPGATE MAGAZINE大好評配信中!
Google Cloud(GCP)、Google Workspace(旧G Suite) 、TOPGATEの最新情報が満載!