【正解】C
【0からの解説】
①前提知識
・Cloud 監査ログ(Cloud Audit Logs):Compute Engine では、VM の作成(insert)・削除(delete)・停止(stop)・起動(start)・一時停止(suspend)・再開(resume)などの API 操作が管理アクティビティ監査ログとして、また Google による自動的な停止(プリエンプションやホスト メンテナンスなど)がシステム イベント監査ログとして記録されます。
・ログシンク(Log Router のシンク):Cloud Logging に届いたログを、フィルタ条件で選んで Cloud Storage・BigQuery・Pub/Sub などの宛先へ転送する仕組みです。組織レベルで作成すれば組織内の全プロジェクトのログを集約できます。宛先が Pub/Sub の場合はログがほぼリアルタイムにメッセージとして発行されますが、Cloud Storage の場合はファイルとしてまとめて(バッチで)書き出されるため遅延があります。
・Eventarc:Pub/Sub トピックのメッセージなどのイベントを受け、Cloud Run などのターゲットへ配信するイベント ルーティング サービスです。
・Cloud Asset Inventory のリアルタイム フィード:指定したアセットタイプの変更を Pub/Sub トピックに通知する機能で、条件(CEL 式)で通知するイベントを絞り込めます。
②要件と制約の整理
・キャッシュに置くのは「実行中(削除・停止・一時停止されていない)」の VM だけ。つまり作成・削除だけでなく、停止・一時停止・再開といった「状態の変化」も漏れなく捉える必要があります。
・キャッシュが古くならないこと → ポーリングではなく、変化をほぼリアルタイムに受け取るイベント駆動が望ましい。
③正解がどう満たすか
組織レベルの Pub/Sub ログシンクで Compute Engine の監査ログイベントを抽出すれば、VM の作成・削除に加えて停止・一時停止・再開・プリエンプションなどの状態変化を含むすべてのイベントが、発生とほぼ同時に Pub/Sub へ発行されます。Pub/Sub トピックをイベント ソースにした Eventarc トリガーでアプリケーション(例: Cloud Run 上のキャッシュ更新処理)へ届ければ、イベントのたびにキャッシュを更新でき、キャッシュが古くなることを防げます。
【誤りの選択肢】
A:Cloud Storage を宛先とするログシンクは、ログを一定間隔でまとめてファイルとして書き出すため、イベント発生からキャッシュ更新まで大きな遅延が生じ、キャッシュが古くなります。さらにファイル単位の更新通知からイベントを取り出す処理も必要になり、構成が複雑です。
B:フィードを「挿入イベントと削除イベント」に限定しているため、VM の停止・一時停止・再開といった状態変化(アセットの更新)を捉えられません。停止された VM がキャッシュに残り続け、そこへジョブが送られてしまうため、「実行中の VM のみ」という要件を満たしません。
D:BigQuery シンクを 1 分ごとにポーリングする方式では、最大で 1 分以上キャッシュが古いままになるうえ、ストリーミング取り込みの遅延や毎分のクエリ費用も発生します。イベント駆動の C に比べて鮮度・コストの両面で劣ります。
【参考】
ログエントリを転送する | Cloud Loggingイベント プロバイダと宛先 | Eventarc