G-gen の佐々木です。当記事では、Direct VPC Egress を経由して Cloud NAT を利用する際の注意点として、Cloud NAT のモニタリング指標が Cloud Monitoring に記録されない仕様について解説します。
Direct VPC Egress 経由の Cloud NAT 利用
Cloud Run や Cloud Run functions(旧称 Cloud Functiions)などのサーバーレス コンピューティング サービスでは、処理を行う際にだけ実行環境を起動し、処理をしないときは実行環境を停止することができます。このため実行環境が起動するたびに、実行環境の IP アドレスは変わってしまいます。
これらの実行環境から、接続元 IP アドレスが制限されている外部の Web API 等へリクエストを送信する場合、実行環境の外部 IP アドレスを固定する必要がでてきます。このとき、Cloud NAT を使用することで、外部アクセスに使用される IP アドレスを固定することができます。Cloud NAT は VPC に紐付いたリソースであるため、Cloud Run 等から VPC に接続するためには Direct VPC Egress を使用します。
- 参考 : Cloud NAT の概要
- 参考 : ダイレクト VPC 下り(外向き)
Cloud Run で Direct VPC Egress を使用して Cloud NAT で外部 IP アドレスを固定する方法については、以下の記事で解説しています。
また、Direct VPC Egress の詳細については以下の記事をご一読ください。
制限事項
Cloud Run の公式ドキュメントには Direct VPC Egress の制限事項が記載されているほか、Cloud NAT のドキュメントにも制限が記載されています。
- 参考 : Direct VPC egress with a VPC network - Limitations
- 参考 : Cloud NAT product interactions - Direct VPC egress interactions
後者のドキュメントには、以下のような制限が記載されています。
- Direct VPC Egress の Cloud NAT 指標は Cloud Monitoring にエクスポートされない
- Direct VPC Egress の Cloud NAT ログには、発信元の Cloud Run サービス、リビジョン、ジョブの名前は表示されない
- Direct VPC Egress ではプライベート NAT が使用できない
当記事ではこれらの3つの制限のうち、1 のモニタリングに関する制限について掘り下げます。
想定される問題
前述の 1 の制限は、Direct VPC Egress 経由で Cloud Run や Cloud Run functions から Cloud NAT が利用された場合、その利用状況が Cloud Monitoring で可視化できないことを意味しています。
この場合、Cloud NAT に高負荷が原因で問題が生じたときの原因調査が難しくなります。たとえば以下の記事で紹介しているケースでは、Cloud Run からの全てのアウトバウンド トラフィックが意図せず Cloud NAT に向かってしまったことで、Cloud NAT が利用できるポート数が上限に達してしまい、接続エラーが多発する状況になりました。
このケースにおける Cloud NAT の高負荷は設定ミスによって起こったものですが、リクエストの急増により Cloud Run がスケールした場合など、通常の利用時にも発生する可能性はあります。本来 Cloud NAT のポート使用状況は Cloud Monitoring で可視化できますが、Direct VPC Egress 経由のトラフィックについては、この指標が記録されません。
対策
Cloud NAT のログを有効にする
Cloud NAT のログは作成時のデフォルトでは無効になっていますが、これを有効化することで、エラーログから Cloud NAT の異常を検知できる可能性があります。
ただし、前述の制限事項に記載したように、Direct VPC Egress の Cloud NAT ログには発信元の情報が記録されない点には注意が必要です。
Cloud NAT のポート割り当て数に余裕をもたせる
Cloud NAT には利用できるポート数を動的に変更する動的ポートの割り当て機能があります。しかし、動的ポートの割り当てを使うと、ポート数がスケールアウトするタイミングでパケットがドロップしてしまう問題があります。
- 参考 : 動的ポートの割り当て
- 参考 : 動的ポート割り当てが構成されているときにパケットがドロップされる
動的ポートの割り当てを使用しない場合、静的にポートの割り当てが行われます。デフォルトでは64個のポートが利用できますが、手動で変更することができます。
- 参考 : 静的ポートの割り当て
Direct VPC Egress を使用しているときは Cloud NAT の指標が利用できないため、適切なポート数を検討することも難しいですが、問題が起こったときにポート数を増やす選択肢があることは理解しておくとよいでしょう。
サーバーレス VPC アクセスを利用する
サーバーレス VPC アクセス経由で Cloud NAT を使用する場合、Direct VPC Egress と比較して料金やパフォーマンス面のデメリットはありますが、当記事で解説したモニタリングに関する問題は発生しません。
- 参考 : サーバーレス VPC アクセス
Cloud Run でサーバーレス VPC アクセスを使用して Cloud NAT で外部 IP アドレスを固定する方法については、以下の記事で解説しています。
佐々木 駿太 (記事一覧)
G-gen最北端、北海道在住のクラウドソリューション部エンジニア
2022年6月にG-genにジョイン。Google Cloud Partner Top Engineer 2025 Fellowに選出。好きなGoogle CloudプロダクトはCloud Run。
趣味はコーヒー、小説(SF、ミステリ)、カラオケなど。
Follow @sasashun0805