コンテンツに移動
アプリケーション モダナイゼーション

Eventarc と Cloud Run でクラウド リソースの変更に対応する

2023年1月26日
Google Cloud Japan Team

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

Eventarc と Cloud Run でクラウド リソースの変更に対応する

この投稿では、クラウド インフラストラクチャ内の変更を通知するイベントに Eventarc を使って非同期で対応する方法を取り上げます。また、こうしたイベントへの反応、ダウンストリームのオペレーションの実施ができる基本的な Cloud Run サービスの実装についても説明します。ここでは例として、Apigee の監査ログイベントを使用して Eventarc のイベントをトリガーします。トリガーの仕組みは一般的な GCP の監査ログに基づいているため、監査ログをサポートするあらゆる GCP サービスにもこの事例を簡単に適用できます。

Eventarc とは

クラウド コンピューティングといえばまず思い浮かぶのは、インフラストラクチャの動的な性質です。また、複雑なアーキテクチャでもワンクリックで、あるいは GitOps のパイプラインに PR をマージして簡単にプロビジョニングできる点です。

インフラストラクチャの作成プロセスを簡素化し、プロビジョニングにかかる時間を数日から数分に短縮することで、Google はプロセスとガバナンスの要件を刷新しました。インフラストラクチャの変更へ適切に反応するには、より高度な自動化とレジリエンスが欠かせません。そこで登場するのが Eventarc です。Eventarc を使えば、さまざまな種類のイベントソースからイベントを非同期に配信し、無数のサーバーレス イベント ハンドラでこれらに対応できます。

Eventarc では、次のようなさまざまイベントに反応できます。

  • Cloud Storage、Firebase のアラート、Firebase Remote Config の変更といった直接公開されたイベント

  • 多数の GCP サービスの監査ログエントリ

  • 一般的な Pub/Sub メッセージ

  • パートナーのソース

サポート対象のイベント一覧はこちらをご覧ください。

こうしたイベントは、Cloud Run、Kubernetes Service、Workflows で処理できます。イベントソースとイベント ハンドラの組み合わせは多数存在するため、このデモンストレーションでは監査ログイベントおよび Cloud Run での処理方法を取り上げることとします。利用可能なドキュメントおよびオープンソースの例を参照すれば、このコンセプトをその他の利用可能な組み合わせに簡単に適用できます。

Eventarc ハンドラの定義

このサンプルでの基本アーキテクチャは次の通りです。

https://storage.googleapis.com/gweb-cloudblog-publish/images/1_overview.max-2000x2000.jpg

上図の編集可能版についてはこちらのリンクをご確認ください。

ここでは、Apigee が発行した監査ログを Eventarc で処理したいイベントのソースとして使用します。このイベントはその後、Eventarc が管理する Pub/Sub トピックに追加され、Cloud Run の Node.js サービスで処理されます。

Cloud Run イベント ハンドラ

まず、シンプルな Cloud Run サービスで監査ログイベントに反応するサンプル アプリケーションを作成します。これを行うには、eventarc-handler というフォルダと、このフォルダ内に格納する package.jsonindex.js ファイルを作成します。また、後ほどこれを Cloud Run 用のコンテナとして構築した際に Cloud Build へノード モジュールが送信されないよう、gcloudignore ファイルも作成します。

読み込んでいます...

必要な Google API を有効にして上記のイベント ハンドラを実行対象の Cloud Run サービスとしてデプロイするには、eventarc-handler フォルダ内で次のコードを実行します。

読み込んでいます...

サービスがデプロイされたら、サンプルのクラウド イベントでテストを行うことができます。これを実行するには、Cloud Run サービスの URI を取得して SERVICE_URI(形式: https://eventarc-handler-some-hash.a.run.app)に保存し、サンプル イベントのペイロードを送信する必要があります。このサンプル イベントでは、わかりやすくするためリクエストとレスポンスの詳細が省略されています。実際のクラウド イベントにはさらに詳細な情報が含まれています。

読み込んでいます...

Cloud Logging UI または次の gcloud コマンドで Cloud Run ログのクラウド イベントからログ ステートメントを確認できます。

読み込んでいます...

出力結果に次のログエントリが含まれているはずです。

読み込んでいます...

これでイベント ハンドラの準備が整いました。次は取得するイベントに進みます。

監査ログイベントのソース

Eventarc は、Cloud Audit Logs に書き込まれるイベントに反応できます。このサンプルでは Apigee Management API にある特定のメソッドに反応したいので、Apigee サービスの監査ログを有効にする必要があります。これは、こちらに記載した API 経由もしくは GCP UI で行えます。

https://storage.googleapis.com/gweb-cloudblog-publish/images/2_enable_audit_logging.max-2000x2000.jpg

監査ログが想定通り動作していることを確認するため、Apigee UI を開いてプロキシを開きます。その後以下のコマンドを実行して、このアクションに対して監査ログが作成されていることを確認します。

読み込んでいます...

Eventarc で監査ログイベントをイベント ハンドラに転送する

これでイベントソースとイベント ハンドラのどちらも構成が済んだので、この 2 つのコンポーネントを非同期のイベント デリバリー パイプラインに統合する Eventarc を作成します。

これを行うには、GCP コンソールまたは以下の gcloud コマンドを利用して Eventarc API を有効にします。

読み込んでいます...

サービスを有効にしたら、新規の Eventarc トリガーを作成できます。Cloud コンソールで、次の情報の新規トリガーを作成します(Pub/Sub および Compute のサービス アカウントには、提案されたロールを割り当ててください)。

トリガーの名前: apigee-developer-app

イベント プロバイダ: Apigee

イベント:  google.cloud.apigee.v1.DeveloperApps.CreateDeveloperApp 

リソース: Any resource

リージョン: global(Apigee コントロール プレーンはグローバル サービスであるため)

サービス アカウント: Compute Engine default service account

イベントの宛先: Cloud Run

Cloud Run サービス: eventarc-handler

サービス URL パス: /

https://storage.googleapis.com/gweb-cloudblog-publish/images/3_create_trigger.max-600x600.jpg

gcloud の場合は以下を参照してください。

読み込んでいます...

Eventarc 用に自動作成された Pub/Sub サブスクリプションを確認します。

読み込んでいます...

これまでに作成し指定した Cloud Run アプリケーションとして push エンドポイントが一覧表示されることを確認します。

エンドツーエンドのバリデーション

同じ Apigee 組織の Apigee UI から、次のリソースを作成できます。

  1. [Publish] > [Developers] から [App Developer] を作成

  2. [Publish] > [Products] から [API Product] を作成

  3. [Publish] > [Apps] から [APP for the Product and Developer] を作成

Cloud Logging UI または次の gcloud コマンドで Cloud Run ログのクラウド イベントからログ ステートメントを確認できます。
読み込んでいます...

出力結果に次のログエントリが含まれているはずです。

読み込んでいます...

また、Eventarc の実行は Eventarc UI または該当するエクスプローラーの UI で確認できます。

https://storage.googleapis.com/gweb-cloudblog-publish/images/4_metrics_explorer.max-2000x2000.jpg

Apigee 固有の Eventarc ユースケース案

上記のサンプルを参考に Cloud Run サービスを拡張して、さらに便利なダウンストリーム アクションをトリガーできます。これにより、クラウド アーキテクチャや Google API が管理するその他のリソースの変更へ非同期に反応できるようになります。

Apigee のコンテキスト内で Eventarc のトリガーを適用可能な例を一部ご紹介します。

  • 開発者アプリの承認フロー
    Apigee には、アプリケーションの任意の承認という考えがあります。ここで説明した Eventarc のアーキテクチャを使えば、API プロダクト オーナーによる手動承認が必要な、新規登録された開発者アプリケーションの承認プロセスをトリガーするワークフローを実装できます。まずは、Cloud Logging のアラート、メール、chatbot 経由、または問題追跡ツールでの問題作成から開始します。このアプローチに関する説明は、こちらのコミュニティ投稿をご確認ください。

  • アプリケーションや開発者の動的な登録
    アプリケーションや開発者を管理する Apigee の仕組みは、サードパーティの ID プロバイダ(IdP)と簡単に統合できます。これにより、たとえば Apigee とバックエンド サービスのどちらでも使用できるアクセス トークンを作成できます。新規に作成された DeveloperApps で Eventarc のイベントを使用すると、Apigee の認証情報を外部の IdP と同期できます。そのため、外部のアクセス トークンが使用されても Apigee の分析データ セマンティクスを維持できます。

  • デベロッパー ポータルや API Hub での API プロダクトの自動公開および自動更新
    API の公開は API プログラムの重要な側面です。Apigee では、デベロッパー ポータルに公開された API のアーティファクトが、API プロダクトに基づきながら疎結合されています。デベロッパー ポータルの公開 API と API プロダクトを同期させるため、Eventarc を利用してポータルの API を自動で登録、更新、削除できます。同じ仕組みを Apigee API Hub での API の公開にも適用できます。

まとめ

Eventarc はインフラストラクチャの変更に応じてワークフローをトリガーできるパワフルなサービスです。サポートされているトリガー イベントやイベント ハンドラにより、さまざまな自動化プロセスやガバナンス プロセスの実装に適しており、クラウド インフラストラクチャの動的な性質を補完するツールになっています。

まずは、さまざまなイベントタイプやターゲットに合わせて Eventarc を作成する手順を記載したクイックスタートをご確認ください。


- アプリケーション モダナイゼーション ソリューション リード Daniel Strebel
投稿先