サーバーレス

Cloud Run for Anthos で Kubernetes マイクロサービスにイベント機能が実現

#serverless

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

Google Kubernetes Engine(GKE)でマイクロサービスを構築すると、アプリケーションを構築する際に高い柔軟性が得られるうえ、Google Cloud が提供するスケールとツールセットのメリットも引き続き享受できます。しかし、優れた柔軟性には大きな責任が伴います。マイクロサービスのオーケストレーションは難しく、メッセージング システムの複雑な実装、カスタマイズ、メンテナンスが必要になる場合があります。

Cloud Run for Anthos には、Google Cloud 上でイベント ドリブン システムを簡単に構築できるイベント機能が含まれるようになりました。現在ベータ版の Cloud Run for Anthos では、イベント機能がイベント インフラストラクチャの実装と管理を担当するため、ユーザーが実装や管理を行う必要はありません。

Cloud Run for Anthos のイベントの特長

  • パブリック HTTP エンドポイントを公開せずに GKE クラスタでサービスをトリガーする機能

  • Cloud Audit Logs を介した Google Cloud Storage、Cloud Scheduler、Pub/Sub、60 以上の Google サービスのサポート

  • 標準化されたイベント インフラストラクチャを介して、サービス間でシグナルを送るためにコードから生成されるカスタム イベント

  • ソースに関係なくすべてのイベントが CloudEvents 標準に準拠することで得られる一貫したデベロッパー エクスペリエンス

Cloud Run for Anthos のイベントは、次のようなさまざまなユースケースに使用できます。

  • Cloud Storage イベントを使用してデータ処理パイプラインをトリガーし、最小限の労力で疎結合システムを作成します。

  • BigQuery 監査ログイベントを使用して、データの読み込みが完了するたびにプロセスを開始し、サービスが書き込むデータを使ってサービスを疎結合します。

  • Cloud Scheduler イベントを使用して、バッチジョブをトリガーします。これにより、ジョブのスケジュールではなく、そのジョブが実行しているコードに集中できます。

  • マイクロサービス間で直接シグナルを送るカスタム イベントを使用し、サービスの非同期調整すべてに対して同じ標準化されたインフラストラクチャを活用します。

仕組み

Cloud Run for Anthos を使用すると、GKE の能力を活用してサーバーレス ワークロードを Kubernetes で実行できます。この新しいイベント機能も同じように、イベントフローを管理するための標準化されたインフラストラクチャを提供するため、優れたアプリケーションの構築に専念できます。このソリューションはオープンソース プロジェクト(Knative)を基盤としており、Google が管理するソリューションの利便性を提供しながら、ベンダー ロックインを回避します。

実際にイベントを見てみましょう。このデモアプリは、スケジュールに基づいてデータセットをクエリし、データからグラフを作成した後、SendGrid を介してユーザーに新しいグラフについて通知する BigQuery 処理パイプラインを構築します。このデモは github で検索できます。
BigQuery processing pipeline.jpg

上記の例を見ると、サービスは互いに直接通信していないことがわかります。その代わりに、Cloud Run for Anthos のイベントを使用して、これらのサービス間の調整を次のように「関連付け」ます。

cloud run for anthos.jpg

このデモを詳しく見てみましょう。

ステップ 1 - クエリランナー用のトリガーを作成する: まず、Cloud Scheduler のジョブに基づいて、クエリランナー サービスをターゲットとするトリガーを作成します。

Signal the notifier service based on a GCS event.gif

ステップ 2 - コードでイベントを処理する: この例では、トリガーで提供される詳細が必要です。詳細は、HTTP ヘッダーとリクエストの本文から提供され、CloudEvent SDK とライブラリを使用して簡単にマーシャリングを解除できます。この例では C# を使用します。

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

  public async Task<CloudEvent> Read(HttpContext context)
{
     var cloudEvent = await context.Request.ReadCloudEventAsync();
     // ...
}

C# 用の Google Events ライブラリを使って CloudEvent データを解析する:

  var schedulerJobData = CloudEventConverters.ConvertCloudEventData<SchedulerJobData>(cloudEvent);
var country = schedulerJobData.CustomData.ToStringUtf8();

ステップ 3 - カスタム イベントを使って Chart Creator にシグナルを送る: カスタム イベントを使用すると、バックエンドを維持する必要がなく、ダウンストリーム サービスに簡単にシグナルを送信できます。この例では、次のタイプのイベントを発生させます。dev.knative.samples.querycompleted

  public async Task Write(string eventData, HttpContext context)
{
    // eventData is custom data related to the event, for example:
    // {datasetId = 123, tableId = 456, country = "United Kingdom"}
    var replyEvent = new CloudEvent(
        "dev.knative.samples.querycompleted",
        new Uri($"urn:{_eventSource}"))
    {
        DataContentType = new ContentType("application/json"),
        Data = eventData
    };

    _logger.LogInformation("Replying with CloudEvent\n" +
        replyEvent.GetLog());
    context.Response.Headers.Add("Ce-Id", replyEvent.Id);
    context.Response.Headers.Add("Ce-Specversion", "1.0");
    context.Response.Headers.Add("Ce-Type", replyEvent.Type);
    context.Response.Headers.Add("Ce-Source", replyEvent.Source.ToString());
    context.Response.ContentType = "application/json;charset=utf-8";
    await context.Response.WriteAsync(replyEvent.Data.ToString());
}

次に、このカスタム イベントが発生したときに起動する Chart Creator サービスのトリガーを作成します。この例では、次の gcloud コマンドを使用してトリガーを作成します。

  gcloud beta events triggers create trigger-chart-creator \
  --target-service chart-creator \
  --type=dev.knative.samples.querycompleted \
  --custom-type

ステップ 4 - GCS イベントに基づいて Notifier サービスにシグナルを送る: Cloud Storage トリガーを作成するだけで、グラフがストレージ サービスに書き込まれたら Notifier サービスをトリガーできます。

Create the Trigger for Query Runner.gif

これで完了です。この例から、Cloud Run for Anthos のイベントを使用すると、基盤となるインフラストラクチャを管理する必要がなく、標準化されたイベントベースのアーキテクチャを簡単に構築できることがわかります。詳細を確認して利用を開始するには、次の方法があります。


-デベロッパー アドボケイト Mete Atamel

-プロダクト マネージャー Bryan Zimmerman