Cloud Service
Eventarc
Google Cloud のイベントを CloudEvents 形式で受け取り、Cloud Run などへルーティングするマネージドなイベント配信基盤。AWS の Amazon EventBridge に相当。
- 1.Google Cloud のイベントを宛先へ自動で届ける配信ハブ。
- 2.監査ログ等を CloudEvents に整え Cloud Run などへルーティング。
- 3.配信は最低1回で重複しうるため宛先は冪等に設計する。
解決する課題
サービス間を直接呼び合う密結合をやめ、「イベントが起きたら処理する」形で連携できます。
- 「S が起きたら T を実行」を 疎結合に組みたい
- Cloud Storage へのアップロードや BigQuery のジョブ完了など、多数のソースのイベントを宛先へ振り分けたい
- 各サービスごとにバラバラなイベント形式を CloudEvents という統一フォーマットで受け取りたい
- イベント受信側を Cloud Run でサーバーレスに保ち、インフラ管理を避けたい
主要概念と用語
- トリガー(Trigger): 「どのイベントを」「どの宛先へ」送るかを定義する中心リソース。イベントフィルタと送信先をひも付ける
- イベントプロバイダ / イベントタイプ: イベントの発生元と種類。
google.cloud.storage.object.v1.finalized(オブジェクト作成)のようにtypeで識別する - 3 つのソース種別:
- Cloud Audit Logs 経由: 90 以上の Google Cloud サービスの操作を監査ログ経由で捕捉(
serviceNameとmethodNameでフィルタ) - Pub/Sub 経由: 既存の Pub/Sub トピックに届いたメッセージをトリガーに
- 直接イベント: Cloud Storage など一部プロバイダからの直接配信
- Cloud Audit Logs 経由: 90 以上の Google Cloud サービスの操作を監査ログ経由で捕捉(
- イベント宛先(送信先): Cloud Run サービス / Cloud Run functions / GKE のサービス / Workflows
- CloudEvents: CNCF 標準のイベント記述フォーマット。HTTP POST の本文+ヘッダーとして宛先に届く
- Eventarc Advanced(バス/パイプライン/登録): 中央集権の バス にイベントを集め、パイプラインで変換・宛先振り分けを行う上位機能
仕様・制限・クォータ
- 配信は at-least-once(最低 1 回)。同一イベントが複数回届きうるため、宛先は 冪等(idempotent) に設計する
- 内部的に Pub/Sub を配送基盤として利用し、リトライや指数バックオフが効く
- Cloud Audit Logs 経由のトリガーは、対象サービスで データアクセス監査ログ(特に管理読み取り/データ読み取り/データ書き込み)の有効化が必要なものがある
- トリガーは原則 単一リージョン、または
global(一部プロバイダ)に作成する。宛先と同一リージョン推奨 - プロジェクト/リージョンあたりのトリガー数などに 割り当て(クォータ) があり、引き上げ申請が可能
- イベント本文の最大サイズは Pub/Sub のメッセージ上限(10 MB)に準じる
内部の仕組み
イベントプロバイダで事象が発生すると、Eventarc はそれを CloudEvents 形式に変換し、配送基盤である Pub/Sub を介して宛先へ HTTP POST で届けます。Cloud Audit Logs ソースの場合は、サービスの操作が監査ログに記録 → Eventarc がログをフィルタ条件と突き合わせ → 一致したものだけをトリガーの宛先へ転送する、という流れです。
- 宛先が Cloud Run の場合、イベントは push 配信で HTTP リクエストとして到達する。
Ce-TypeなどのCe-プレフィックスのヘッダーにメタデータが入る - 配送に失敗した場合は Pub/Sub のリトライ機構で再送され、デッドレタートピックへ退避することもできる
Pub/Sub=汎用の高スループットなメッセージング基盤、Eventarc=Google Cloud のイベントを CloudEvents 標準で受け取り、フィルタして宛先へ届ける上位レイヤー。Eventarc は内部で Pub/Sub を使いますが、監査ログ連携・標準フォーマット化・トリガー管理を担う点が異なります。
設計パターン / ベストプラクティス
- イベント駆動のマイクロサービス連携: Cloud Storage 取り込み → Eventarc → Cloud Run で後続処理、のように疎結合化する
- 冪等な宛先設計: at-least-once のため、イベント ID(
id属性)で重複排除し、二重処理を防ぐ - フィルタは具体的に:
methodNameやリソース属性で絞り込み、不要なイベントの受信・課金・誤起動を避ける - デッドレターと再試行ポリシーを設定し、宛先障害時にイベントを失わない
- 複雑なルーティングや変換が必要なら Eventarc Advanced のバス+パイプラインでメッセージ変換・条件分岐を集中管理する
運用・監視・トラブルシュート
- Cloud Monitoring / Cloud Logging でトリガーの配信状況・エラーを監視する
- トリガーが発火しない → イベントフィルタ(
type/serviceName/methodName)と、必要な 監査ログが有効かを確認 - イベントが宛先に届かない → 宛先サービスの 権限(トリガー用サービスアカウントの呼び出し権限)と リージョン整合を確認
- 監査ログ経由は数十秒〜の遅延が生じうる点を考慮する(ニアリアルタイム)
- 重複到達が疑われる場合は宛先の冪等性とイベント
idの扱いを点検する
コスト
Eventarc 自体は配信したイベント数に応じた料金体系で、配送基盤として使う Pub/Sub の利用分も加味して考えます。
| 費用要素 | 課金の考え方 | コスト最適化のポイント |
|---|---|---|
| Eventarc の配信イベント | 標準(Standard)はイベント配信に対し月次の無料枠後に従量課金 | フィルタで不要イベントを送らない |
| 配送基盤の Pub/Sub | メッセージ取り込み・配信のデータ量で課金 | ペイロードを小さく保つ |
| 宛先の実行(例: Cloud Run) | リクエスト数・実行時間で別途課金 | 処理を軽量化し冪等にして再実行を減らす |
| Eventarc Advanced | バス経由のイベント量に応じた課金 | 本当に集中管理が必要な範囲に限定する |
セキュリティ
- トリガーには サービスアカウントを割り当て、最小権限の IAM ロール(例:
roles/eventarc.eventReceiver)のみ付与する - 宛先が Cloud Run の場合、トリガー用サービスアカウントに
roles/run.invokerを与え、認証付きで呼び出す - Cloud Audit Logs 経由を使うには、対象サービスでデータアクセス監査ログを有効化する(権限と監査の両立に注意)
- イベントは Google Cloud 内で 転送時に暗号化され、必要に応じて CMEK(顧客管理鍵) で保護できる
トリガーや宛先に過大な権限(例: プロジェクトの編集者ロール)を付けるのは NG。Eventarc 専用のサービスアカウントを用意し、eventarc.eventReceiver と宛先の run.invoker など必要最小限のロールだけを付与してください。広い権限はイベント経路を侵害された際の被害を拡大させます。
関連サービス・比較(AWS との対応)
| 観点 | Eventarc(GCP) | Amazon EventBridge(AWS) |
|---|---|---|
| 位置づけ | Google Cloud のイベント配信ハブ | AWS のイベントバス |
| イベント形式 | CloudEvents(CNCF 標準) | 独自 JSON(detail-type / source など) |
| 主要ソース | Cloud Audit Logs / Pub/Sub / 直接(Storage 等) | AWS サービス / SaaS パートナー / カスタム |
| 主な宛先 | Cloud Run / GKE / Workflows | Lambda / SQS / Step Functions / API 等 |
| フィルタ | type / serviceName / methodName で一致 | イベントパターン(内容ベース) |
| 配送基盤 | 内部で Pub/Sub を利用 | EventBridge 独自基盤 |
| 定期実行(cron) | Cloud Scheduler が担当 | EventBridge Scheduler が内包 |
EventBridge が Scheduler で定期実行(cron)も担うのに対し、Google Cloud では定期実行は Cloud Schedulerが担当します。Eventarc は「イベント発生 → 配信」に専念する役割分担です。
ハンズオン / CLI例
# 宛先となる Cloud Run サービスを先にデプロイしておく前提
# Cloud Storage バケットへのオブジェクト作成イベントを
# Cloud Run サービス(my-service)へ送るトリガーを作成
gcloud eventarc triggers create storage-trigger \
--location=asia-northeast1 \
--destination-run-service=my-service \
--destination-run-region=asia-northeast1 \
--event-filters="type=google.cloud.storage.object.v1.finalized" \
--event-filters="bucket=my-input-bucket" \
--service-account=eventarc-sa@PROJECT_ID.iam.gserviceaccount.com
# Cloud Audit Logs 経由: BigQuery のジョブ実行をトリガーにする例
gcloud eventarc triggers create bq-job-trigger \
--location=asia-northeast1 \
--destination-run-service=my-service \
--destination-run-region=asia-northeast1 \
--event-filters="type=google.cloud.audit.log.v1.written" \
--event-filters="serviceName=bigquery.googleapis.com" \
--event-filters="methodName=jobservice.jobcompleted" \
--service-account=eventarc-sa@PROJECT_ID.iam.gserviceaccount.com
# 作成済みトリガーの一覧と詳細確認
gcloud eventarc triggers list --location=asia-northeast1
gcloud eventarc triggers describe storage-trigger --location=asia-northeast1
Google Cloud Service
Eventarcを実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
アプリ統合
比較で見る軸
クラウド: Google Cloud / カテゴリ: アプリ統合 / 難易度: intermediate
導入後に効く点
監査ログ等を CloudEvents に整え Cloud Run などへルーティング。
先に潰すリスク
サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。
- クラウド
- Google Cloud
- カテゴリ
- アプリ統合
- 難易度
- intermediate
- 関連資格
- —
- 設計柱
- operational / reliability / security
判断チェックリスト
- 自社の用途が「アプリ統合 / operational」に近いか確認する。
- 強みである「Google Cloud のイベントを宛先へ自動で届ける配信ハブ。」が本当に評価軸になるか確認する。
- 注意点の「サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。
他クラウドの同等サービス
役割が近いサービスです。設計の置き換えや比較検討の参考に。