Column

コラム

  • 【テックコラム】プライベート IP 環境の Cloud Co...

【テックコラム】プライベート 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
    }
  }
}

● 解説

環境構築は下記の順番に作成します。リンクは公式の手順になっています。

  1. VPCとサブネットを作成
  2. RouterとNATを作成
  3. Composerを作成

<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
      • 外部ネットワークからのアクセスを制限

今回はデフォルトのサービスアカウントを使用していますが、権限が広いので実運用では用途に合わせてサービスアカウントを作成した方がいいと思います。

● さいごに

Terraform を利用し Cloud Composer 2 をプライベート IP 環境の構築を行いました。

今回は構築のみでしたが、実際に利用していくとなるとDAGを記載したり、ワークフローを運用していくことなどが必要です。

そういった専門人材が自社にいない、リソースが足りない等の課題をお持ちの方に、エンジニア領域の支援サービス(Data Engineer Hub)をご提供しています。

お困りごとがございましたら、是非お気軽にご相談ください。

》エンジニア領域支援サービスの詳細はこちら

Data Engineer Hubサービスバナー

本件に関するお問い合わせは下記にて承ります。
株式会社DataCurrent
info@datacurrent.co.jp

人気のコラムランキング

PICK UP

企業のDX推進におけるダッシュボード内製化について

DXmarketingPICK UP コラムダッシュボード内製化

企業のDX推進に向けた人材教育支援について

GA4marketingPICK UP コラム内製化

【データプライバシーコラム】電気通信事業法改正の解説(2022年7月時点)

CMPPICK UP コラムデータプライバシーデータプライバシーコラム個人情報保護

CMP導入時の注意点

CMPPICK UP コラムデータプライバシーデータプライバシーコラム個人情報保護

TOPへ
戻る