サーバーレス

60 を超える Google Cloud ソースのイベントで Cloud Run をトリガーする

#serverless

※この投稿は米国時間 2020 年 10 月 30 日に、Google Cloud blog に投稿されたものの抄訳です。

フルマネージド サービスである Cloud Run を使用すると、スケーラブルで拡張可能なマイクロサービス ベースのアプリケーションを作成できます。とはいえ、分散されたマイクロサービス間でのイベントベースな通信の設定は、実装、カスタマイズ、メンテナンスに困難を伴う場合があります。

本日は、60 を超える Google Cloud ソースから Cloud Run をトリガーできる新しいイベント機能、Eventarc について発表いたします。現在プレビュー版の Eventarc では、イベント ドリブン アプリケーションを簡単に構築し、イベントの取り込み、配信、セキュリティ、認可、オブザーバビリティ、エラー処理に対応可能です。

Eventarc を使用すると、Cloud Storage、BigQuery、Firestore、その他 60 を超える Google Cloud ソースから発信されるイベントに従って、動画分析、ファイル変換、新規ユーザーの登録、アプリケーションのモニタリング、その他数百もの重要なユースケースに対応できます。

Eventarc は以下のことが可能です。

  • 60 以上の Google Cloud ソースから Cloud Audit Logs 経由でイベントを受信する。

  • Pub/Sub にメッセージをパブリッシュしてカスタムソースからイベントを受信する。コードでイベントを送信して、マイクロサービス間でシグナルをやりとりできます。

  • ソースに関係なく、すべてのイベントを CloudEvents 標準準拠とし、一貫したデベロッパー エクスペリエンスを確保する。

  • 最低料金なしでオンデマンドのスケーラビリティを利用する。

このサービスは、5 つの Google Cloud ロケーションでご利用いただけます。対象ロケーションは今後さらに拡大される予定です。Eventarc 独自の API と CLI のほか、Cloud Run の UI 内からもアクセスできます。

主なユースケース

Eventarc によって、Cloud Run 上のアプリケーションでさまざまなユースケースが実現できるようになります。以下に例を挙げます。

  • Cloud Storage イベントから Cloud Audit Logs 経由でデータ処理パイプラインをトリガーする。

  • BigQuery イベント(Cloud Audit Logs 経由)を使用して、ジョブが完了するたびに Cloud Run でダウンストリーム処理を開始する。

  • カスタムソース(Cloud Pub/Sub へのパブリッシュ)からのイベントを使用してマイクロサービス間でシグナルをやりとりすることで、標準化された同一のインフラストラクチャであらゆるサービス間の非同期調整に対応する。

Eventarc の動作

Cloud Run を使用すると、サーバーレス プラットフォームでワークロードを実行することができます。Eventarc を Cloud Run と併用すると、イベントフローを管理するための標準化されたインフラストラクチャが提供されるため、優れたアプリケーションの構築に専念できます。

実際に Eventarc の動作を見てみましょう。このデモアプリ(github で詳細を確認)は、画像処理パイプラインを作成し、Cloud Storage イベントを Cloud Audit Logs 経由でさまざまなサービスに接続します。画像が入力バケットに保存されると、パイプラインは安全でない画像を除外したうえで画像からラベルを抽出してサイズ変更し、最後に透かしを追加します。最終的に、サイズ変更され透かしとラベルが付いた画像が出力バケットに保存されます。

Eventarc in action.jpg

ただし、パイプライン内のサービスは相互に直接通信しないため、イベントを使用してサービス間を「関連付け」て相互調整を可能にします。

event wrie up.jpg

アクションの詳細リストと、アクションを実行する順序を github でご確認ください。ここでは、イベントに関連する重要なステップをいくつか取り上げます。

ハイライト 1: フィルタ サービスが Cloud Storage から Cloud Audit Logs 経由でイベントを受信するトリガーを作成する

cloud audit logs.gif

ハイライト 2: フィルタ サービスのコードでイベントを処理する

この例では、イベントで提供される詳細が必要です。詳細は、HTTP ヘッダーとリクエストの本文から提供され、CloudEvents SDKGoogle Events ライブラリを併用して簡単に「マーシャリングを解除」(展開)できます。この例では C# を使用します。

CloudEvents SDK を使用してイベントを読み取ります。

  public async Task<CloudEvent> Read(HttpContext context)
{
     var cloudEvent = await context.Request.ReadCloudEventAsync();
     // ...
}
Parse the bucket and object name from the AuditLog in CloudEvent Data using Google Events library for C#:
//"protoPayload" : {"resourceName":"projects/_/buckets/events-atamel-images-input/objects/atamel.jpg}";
var logEntryData = CloudEventConverters.ConvertCloudEventData<LogEntryData>(cloudEvent);
var tokens = logEntryData.ProtoPayload.ResourceName.Split('/');
var bucket = tokens[3];
var name = tokens[5];

ハイライト 3: Cloud Pub/Sub に書き込んで Resizer サービスにシグナルを送る

Resizer のトリガーによって管理される Pub/Sub トピックに書き込むことで、Resizer サービスへのサービス シグナルをフィルタします。

  var topicName = new TopicName(_projectId, topicId);
var publisher = await PublisherClient.CreateAsync(topicName);
await publisher.PublishAsync(eventData);

これで、一通りの機能を備えた画像処理パイプラインが完成しました。これにより、イベントを使用して Cloud Storage バケットをさまざまなサービスに接続し、Google Cloud の標準ツールを使用して相互に関連付けることができます。

次のステップ

Eventarc と Cloud Run を組み合わせると、標準化されたイベントベースのアーキテクチャを簡単に構築でき、基盤となるインフラストラクチャの管理が不要になります。ただし、これはほんの一部にすぎません。Eventarc を Google Cloud 向けのフル機能のイベント サービスにするために取り組んでおりますので、公式発表をお待ちください。Cloud Run を使用した Google Events の詳細については、Next 2020 のこちらの講演をご覧ください。使用を開始するには、クイックスタート ガイドに沿って操作してください。

-プロダクト マネージャー Prashant Gulati、デベロッパー アドボケイト Mete Atamel