【正解】D
【0からの解説】
①前提知識:
・Cloud Monitoring のアラート ポリシーは、条件を満たしたときに「通知チャンネル」(メール、Slack、PagerDuty、Webhook、Pub/Sub など)へ通知を送ります。
・Webhook 通知チャンネルは
パブリック エンドポイントのみをサポートします(インターネットから完全にアクセス可能な HTTP/HTTPS エンドポイントが必要)。公式ドキュメントでは、公開されていないエンドポイントに通知を送りたい場合は Pub/Sub 通知チャンネルを作成し、そのトピックにサブスクリプションを構成するよう案内しています。
・Pub/Sub の push サブスクリプションは、メッセージを HTTPS エンドポイントへ送信しますが、VPC 内部の IP アドレスにしか公開されていないエンドポイントへ直接 push することはできません。
・Cloud Run functions(旧 Cloud Functions)は、ダイレクト VPC 下り(Direct VPC egress)を使うと VPC 内のプライベート IP に直接通信できます。リクエストがない間はゼロまでスケールするため、低頻度のアラート転送であればコストは最小限です。
②要件の整理:(a) 宛先は VPC 内部にのみ公開された Webhook、(b) Google 推奨のプラクティスに従う、(c) コストを最小限にする、の 3 点です。
③正解の理由:アラート → Pub/Sub 通知チャンネル → push サブスクリプション → Cloud Run function(ダイレクト VPC 下りで VPC に接続)→ 内部 Webhook という経路にすれば、公開されていない内部エンドポイントへ確実にアラートを届けられます。サーバーレスでイベント駆動のため、常時稼働の VM や Serverless VPC Access コネクタのインスタンス費用もかからず、コストも最小化できます。
【誤りの選択肢】
A:pull サブスクリプションを作るだけでは、誰がメッセージを pull して Webhook を呼び出すのかが定義されていません。pull するには常時稼働するコンシューマ(VM など)を別途用意・運用する必要があり、不完全かつコスト面でも不利です。
B:Pub/Sub の push サブスクリプションは VPC 内部にのみ公開されたエンドポイントへ直接配信できないため、内部 Webhook には届きません。
C:Webhook 通知チャンネルはパブリック エンドポイントのみをサポートしているため、VPC 内部の Webhook を直接呼び出すことはできません。内部 Webhook をインターネットに公開すればセキュリティ上の問題が生じます。
【参考】
API で通知チャンネルの作成と管理を行う | Cloud MonitoringCloud Run ネットワーキングのベスト プラクティス