2022.03.31 コラム
【テックコラム】プライベート IP 環境の Cloud Composer 2 を構築する
● はじめに
こんにちは、DataCurrentの笹沼です。
本コラムでは Terraform を利用し Cloud Composer 2 をプライベート IP 環境で構築していきます。
Google Cloud でワークフローといえば Cloud Composer だと思いますが、Cloud Composer には Cloud Composer 1 と Cloud Composer 2 のメジャー バージョンがあります。大きな違いは Cloud Composer 2 では自動スケーリングが可能な点です。これによりCloud Composer 1 と比べ、運用負荷やコストの削減などが期待できると思います。詳細はCloud Composer のバージョニングの概要をご参考ください。
プライベート IP 環境とは外部サービスからアクセスできない環境です。そのため、よりセキュアな環境を構築できます。今回は Cloud NAT を利用し外部サービスからはアクセスできないが、外部サービスへはアクセスできる環境を構築します。
● 全体
構築は下記の main.tf を terraform apply して完了です。
以降で中身の解説をしていきます。
provider "google" { project = "<PROJECT_ID>" region = "us-central1" } terraform { required_version = "1.1.5" } locals { project_id = "<PROJECT_ID>" region = "us-central1" name = "dc" } module "vpc" { source = "terraform-google-modules/network/google" version = "~> 4.0" project_id = local.project_id network_name = "${local.name}-network1" mtu = 1460 subnets = [ { subnet_name = "${local.name}-subnet-${local.region}-192" subnet_ip = "192.168.1.0/24" subnet_region = local.region subnet_private_access = "true" } ] } resource "google_compute_router" "router" { project = local.project_id name = "${local.name}-nat-router" network = module.vpc.network_name region = local.region } module "cloud-nat" { source = "terraform-google-modules/cloud-nat/google" version = "~> 2.0.0" project_id = local.project_id region = local.region router = google_compute_router.router.name name = "${local.name}-nat-config" source_subnetwork_ip_ranges_to_nat = "ALL_SUBNETWORKS_ALL_IP_RANGES" } resource "google_composer_environment" "composer" { provider = google-beta project = local.project_id name = "${local.name}-composer-env" region = local.region config { software_config { image_version = "composer-2.0.7-airflow-2.2.3" } environment_size = "ENVIRONMENT_SIZE_SMALL" node_config { network = module.vpc.network_name subnetwork = module.vpc.subnets_names[0] } private_environment_config { enable_private_endpoint = true } } }
● 解説
環境構築は下記の順番に作成します。リンクは公式の手順になっています。
<VPC ネットワーク>
module "vpc" { source = "terraform-google-modules/network/google" version = "~> 4.0" project_id = local.project_id network_name = "${local.name}-network1" mtu = 1460 subnets = [ { subnet_name = "${local.name}-subnet-${local.region}-192" subnet_ip = "192.168.1.0/24" subnet_region = local.region subnet_private_access = "true" } ] }
まず、VPCの作成を行います。
terraform-google-network を使用しています。
<Cloud Router>
resource "google_compute_router" "router" { project = local.project_id name = "${local.name}-nat-router" network = module.vpc.network_name region = local.region }
次に Cloud Router を作成します。
network には先ほど作成した VPC を指定します。
<Cloud NAT>
module "cloud-nat" { source = "terraform-google-modules/cloud-nat/google" version = "~> 2.0.0" project_id = local.project_id region = local.region router = google_compute_router.router.name name = "${local.name}-nat-config" source_subnetwork_ip_ranges_to_nat = "ALL_SUBNETWORKS_ALL_IP_RANGES" }
Cloud NAT の作成を作成します。
terraform-google-cloud-nat を使用します。router に先ほど作成したリソースを指定します。
今回は nat_ip_allocate_option を AUTO_ONLY にし自動で静的な外部IPを発行しています。NAT の外部IPアドレスを固定にしたい場合、外部IP を google_compute_address で作成し nat_ips に self_link します。
<Cloud Composer>
resource "google_composer_environment" "composer" { provider = google-beta project = local.project_id name = "${local.name}-composer-env" region = local.region config { software_config { image_version = "composer-2.0.7-airflow-2.2.3" } environment_size = "ENVIRONMENT_SIZE_SMALL" node_config { network = module.vpc.network_name subnetwork = module.vpc.subnets_names[0] } private_environment_config { enable_private_endpoint = true } } }
最後に Cloud Composer の作成を行います。
google_composer_environment を使用します。terraform-google-composer で作成しようとしましたが、現時点ではまだ Cloud Composer 2 に対応していませんでした。
定義内容の説明
- provider
- google-beta がないとエラーになるため定義
- software_config
- こちらの公式のドキュメントにも記載されていますが、Cloud Composer 2 の作成には Cloud Composer 2 のイメージ バージョンを指定する必要があります
- environment_size
- 事前定義された小に設定
- node_config
- 事前に定義した VPC とサブネットを指定
- private_environment_config
- enable_private_endpoint
- 外部ネットワークからのアクセスを制限
- enable_private_endpoint
今回はデフォルトのサービスアカウントを使用していますが、権限が広いので実運用では用途に合わせてサービスアカウントを作成した方がいいと思います。
● さいごに
Terraform を利用し Cloud Composer 2 をプライベート IP 環境の構築を行いました。
今回は構築のみでしたが、実際に利用していくとなるとDAGを記載したり、ワークフローを運用していくことなどが必要です。
そういった専門人材が自社にいない、リソースが足りない等の課題をお持ちの方に、エンジニア領域の支援サービス(Data Engineer Hub)をご提供しています。
お困りごとがございましたら、是非お気軽にご相談ください。
本件に関するお問い合わせは下記にて承ります。
株式会社DataCurrent
info@datacurrent.co.jp