⚙️

Terraform で Cloud Run の新機能 Direct VPC egress を利用する

2023/08/18に公開

はじめに

2023年8月にDirect VPC egressがプレビューとなりました。(公式ブログ)

これまで Cloud Run アプリケーションから Private IP しかもたない Cloud SQL へのアクセスをするには Serverless VPC Access を利用していました。このとき Serverless VPC Access コネクターを作成する必要があり、このコネクターの実体はインスタンスであるので、起動している間料金が発生していました(イメージとしてはプロキシサーバーのようなものかと思います)。また、当然コネクターを経由するのでレイテンシーが生じていました。

Direct VPC egress を用いると Serverless VPC Access コネクターは不要なのでインスタンス代が生じず、その名の通り直接VPCとの接続を行うため、Serverless VPC Access コネクターを利用した際に比べてレイテンシーも軽減されます。

概念から詳細まで、こちらのブログが分かりやすいです。

リソース定義

良いこと尽くしの機能なので早速利用したいと思います。

Googleプロバイダにおいてプレビュー機能を利用するにはgoogle-beta プロバイダを使ったり頑張る必要があるのかなと思っていたのですが、API側でbeta機能は制御されているらしく、 launch-stageBETA に指定し、annotation を付与するだけで設定できます。(公式ドキュメントの config を読めばわかる)

Serverless VPC Acces コネクターを利用していた際の run.googleapis.com/vpc-access-connector annotation を run.googleapis.com/network-interfaces に変更し、VPCとサブネットを指定してあげるだけです。

resource "google_cloud_run_service" "app" {
  name = "app"
  metadata {
    annotations = {
      "run.googleapis.com/launch-stage" = "BETA" # ここを追加
    }
  }
  template {
    metadata {
      annotations = {
        "run.googleapis.com/network-interfaces" = "[{\"network\":\"${google_compute_network.direct_vpc_egress_vpc.name}\",\"subnetwork\":\"${google_compute_subnetwork.direct_vpc_egress_subnetwork.name}\"}]" # ここを追加
        "run.googleapis.com/vpc-access-egress"  = "private-ranges-only"
      }
    }
  }
  ...
}

1点注意が必要で、公式ドキュメントのgcloudの設定とyamlでの設定ページで表記揺れがあるのですが、サブネットのCIDR範囲は/26 よりも広い範囲のCIDRを持っておいたほうが良さそうです。

少なくとも、/26よりも広くしつつ、最大インスタンスよりも多い IP アドレスを持つCIDRにするのが安全かと思います。

おわりに

はやくGAになってほしいと思う神アプデの紹介でした。

Direct VPC egress はまだプレビュー機能なので本番適用は控えたほうがよいですが、検証のために サクッと環境を作りたいときは Serverless VPC Access コネクターを用意する必要がなく、かつ無駄なコストが生じる可能性を排除できるので積極的に使っていきたいです。

Discussion