0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Cloud Run FunctionsでDirect VPC Egressにつなぐ

Posted at

はじめに

Cloud FunctionsからリブランドされたCloud Run Functionsを,Terraformを用いて利用した際,少しトリッキーなことをしたので記載します.おそらく今後対応されるかと思います.
Cloud FunctionsがCloud Runに統合されたことにより,Direct VPC Egressを使用したVPC接続をすることができるようになりました.
リブランディングにより,Cloud Runの持つ以下の特徴を活用できるようになりました.

  • Direct VPC Egressによるプライベートネットワーク接続
  • リクエスト駆動型の自動スケーリング

個人的には,従来のCloud Run ServiceとCloud Functionsのいいとこ取りをした印象です.

お題

今回は,内部接続のみを許可したCloud Run Serviceに,Cloud Run Functionsがアクセスするケースを想定します.このとき,Cloud Run FunctionsがDirect VPC Egress経由でアクセスする場合を考えます.構成図としては以下です.

image.png

※コンソール上では簡単に実現可能

コンソール上で,Cloud Run Functionsで,Direct VPC Egressを有効にすることは簡単に実現できます.

image.png

Terraformはまだ非対応

コンソール上で,上記の構成を実現することは容易にできました.しかし,これをTerraformに書き起こす際,少しひねりを加えなければ実現できませんでした.Direct VPC Egressに接続する設定が,まだTerraformにはリリースされておりませんでしたので,Terraform実行の内部でgcloudコマンドを実行するようにしています.

resource "null_resource" "function-1-vpc-egress" {
  depends_on = [module.cloud_function_v2]

  triggers = {
    detached = "false"
    reapply = module.cloud_function_v2.function_uri
  }

  provisioner "local-exec" {
    command = <<-EOT
      gcloud beta run services update ${var.function_name} \
      --network=${var.network_name} \
      --subnet=${var.direct_subnet_name} \
      --network-tags=function-1 \
      --vpc-egress all-traffic  \
      --region ${var.region}
    EOT
  }
}

結果

内部接続のみを許可したCloud Runに対して,Cloud Run Functions経由でリクエストを投げることで,下記のようにレスポンスを受け取ることができました.

curl -X GET https://asia-northeast1-${project_id}.cloudfunctions.net/function-v2
{"response":{"backend_status":"ok"},"status":"success"}

まとめ

Cloud Run FunctionsとDirect VPC Egressを組み合わせたアーキテクトを構築する際,Terraformでは少しひねりを加える必要がありました.将来的には以下のようなパラメータが対応されると予想しています.

resource "google_cloudfunctions2_function" "v2" {
  vpc_access{
    egress = "ALL_TRAFFIC"
    network_interfaces {
      network = "default"
      subnetwork = "default"
      tags = ["tag1", "tag2", "tag3"]
    }
  }
}

今回使用したコードはこちらに公開しています.

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?