Private Service Connect üzerinden CloudSQL'e bağlanma (Terraform)

1. Genel Bakış

Başka bir proje veya VPC'lerden özel Cloud SQL örneğine bağlanmak için çeşitli seçenekler vardır. Private Service Connect (PSC), hizmet üreticilerinin hizmetlerini hizmet ekleri aracılığıyla kullanıma sunmasına olanak tanır. Bu hizmet ekleri, tüketiciler tarafından ortamlarında PSC uç noktaları ve/veya PSC arka uçları oluşturmak ve belirtilen bir özel IP üzerinden bu üretici hizmetlerine bağlanmak için kullanılabilir.

Cloud SQL, özel bağlantıya izin vermek için PSC hizmet ekini kullanabilir. Bu laboratuvarda seçeneği yapılandırabilir ve test edebilirsiniz.

Bu laboratuvarda, CloudSQL ile PSC uç nokta erişiminin kullanımını gösteren basit bir mimari oluşturacaksınız.

Şekil 1.

1893f48fe1298ea2.png

Bu laboratuvar için iki projeye veya aynı projede ayrı VPC'lere ihtiyacınız vardır.

Hedefler

Bu laboratuvarda, aşağıdaki görevi nasıl gerçekleştireceğinizi öğreneceksiniz:

  • PSC hizmet ekiyle bir Cloud SQL örneği oluşturun.
  • Statik IP adresi oluşturma
  • Cloud SQL veritabanına bağlanmak için tüketici VPC'sinde bir PSC uç noktası oluşturun.
  • PSC uç noktası IP'si aracılığıyla tüketici ağındaki bir test sanal makinesinden SQL veritabanına erişimi doğrulayın.

2. Kurulum ve Gereksinimler

Yönlendirmesiz ortam kurulumu

  1. Google Cloud Console'da oturum açın ve yeni bir proje oluşturun veya mevcut bir projeyi yeniden kullanın. Gmail veya Google Workspace hesabınız yoksa hesap oluşturmanız gerekir.

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • Proje adı, bu projenin katılımcıları için görünen addır. Google API'leri tarafından kullanılmayan bir karakter dizesidir. Bu bilgiyi istediğiniz zaman güncelleyebilirsiniz.
  • Proje kimliği, tüm Google Cloud projelerinde benzersizdir ve sabittir (ayarlandıktan sonra değiştirilemez). Cloud Console, benzersiz bir dizeyi otomatik olarak oluşturur. Genellikle bu dizenin ne olduğuyla ilgilenmezsiniz. Çoğu codelab'de proje kimliğinize (genellikle PROJECT_ID olarak tanımlanır) başvurmanız gerekir. Oluşturulan kimliği beğenmezseniz başka bir rastgele kimlik oluşturabilirsiniz. Dilerseniz kendi adınızı deneyerek kullanılabilir olup olmadığını kontrol edebilirsiniz. Bu adım tamamlandıktan sonra değiştirilemez ve proje süresince geçerli kalır.
  • Bazı API'lerin kullandığı üçüncü bir değer olan Proje Numarası da vardır. Bu üç değer hakkında daha fazla bilgiyi belgelerde bulabilirsiniz.
  1. Ardından, Cloud kaynaklarını/API'lerini kullanmak için Cloud Console'da faturalandırmayı etkinleştirmeniz gerekir. Bu codelab'i tamamlamak neredeyse hiç maliyetli değildir. Bu eğitimin ötesinde faturalandırılmayı önlemek için kaynakları kapatmak üzere oluşturduğunuz kaynakları veya projeyi silebilirsiniz. Yeni Google Cloud kullanıcıları 300 ABD doları değerinde ücretsiz deneme programından yararlanabilir.

Cloud Shell'i başlatma

Google Cloud, dizüstü bilgisayarınızdan uzaktan çalıştırılabilir. Ancak bu codelab'de, Cloud'da çalışan bir komut satırı ortamı olan Google Cloud Shell'i kullanacaksınız.

Google Cloud Console'da sağ üstteki araç çubuğunda Cloud Shell simgesini tıklayın:

55efc1aaa7a4d3ad.png

Ortamın temel hazırlığı ve bağlanması yalnızca birkaç dakikanızı alır. İşlem tamamlandığında aşağıdakine benzer bir sonuç görürsünüz:

7ffe5cbb04455448.png

Bu sanal makine, ihtiyaç duyacağınız tüm geliştirme araçlarını içerir. 5 GB boyutunda kalıcı bir ana dizin sunar ve Google Cloud üzerinde çalışır. Bu sayede ağ performansı ve kimlik doğrulama önemli ölçüde güçlenir. Bu codelab'deki tüm çalışmalarınızı tarayıcıda yapabilirsiniz. Herhangi bir şey yüklemeniz gerekmez.

3. 1. görev: Veritabanı projesi için ortamı ayarlama (Terraform ile)

Veritabanı projesinde,güvenlik duvarı kuralları ve alt ağ içeren özel bir VPC oluşturacağız. Cloud Console'u açın ve veritabanı için kullanacağınız projeyi seçin.

  1. Konsolunuzun sağ üst kısmında bulunan Cloud Shell'i açın, Cloud Shell'de veritabanı projesi için veritabanı proje kimliğini gördüğünüzden emin olun ve erişime izin vermek için tüm istemleri onaylayın. 4261e776f64ea978.png
  2. terraform-db adlı bir klasör oluşturun ve bu klasöre gidin.
mkdir terraform-db  && cd terraform-db
  1. main.tf, variable.tf ve database.tf dosyası oluşturun.
touch main.tf variable.tf database.tf 
  1. Cloud Shell Düzenleyici görünümüne geçin. Düzenleyici'yi seçin ve arayüzün yüklenebilmesi için gerekli tüm istemlere izin verin.
  2. Yüklendikten sonra File > Open Folder'a (Dosya > Klasörü Aç) gidin ve /home/your-user-name/terraform-db'ye gidip Ok'u (Tamam) seçerek klasörü düzenleyicide açın. 78f5eb9f2f82f1b0.png
  3. variable.tf dosyasını seçin ve aşağıdakileri ekleyin. your-database-project-id-here metnini, tırnak işaretleri içinde gerçek veritabanı projesi kimliğinizle değiştirin. your-consumer-project-id-here metnini, tırnak işaretleri içinde gerçek tüketici projesi kimliğinizle değiştirin.
variable "project_id" {
  type = string
  default = "your-database-project-id-here"
}

variable "project_id_consumer" {
  type = set(string)
  default = ["your-consumer-project-id-here"]
}

variable "network_id" {
  type = string
  default = "database-net"
}

variable "region_id" {
  type = string
  default = "us-east1"
}

variable "db_password" {
  type = string
  default = "cloudsql24"
}
  1. Ardından main.tf dosyasını açın. Aşağıda açıklandığı gibi çeşitli işlemleri gerçekleştirmek için bazı Terraform kodları ekleyeceğiz.

API'leri etkinleştirme

resource "google_project_service" "default"

VPC oluşturma

resource "google_compute_network" "default"

Güvenlik duvarı kuralları ekleme

resource "google_compute_firewall" "allow_icmp"

  1. Aşağıdakileri kopyalayıp main .tf dosyasına yapıştırın.
resource "google_project_service" "default" {
  for_each = toset([
    "compute.googleapis.com",
    "sqladmin.googleapis.com"
  ])

  service            = each.value
  disable_on_destroy = false
}

resource "google_compute_network" "default" {
  project                 = var.project_id
  name                    = var.network_id
  auto_create_subnetworks = true
  mtu                     = 1460
  routing_mode            = "GLOBAL"
}

resource "google_compute_firewall" "allow_icmp" {
  name    = "allow-icmp-${google_compute_network.default.name}"
  network = google_compute_network.default.id
  project = var.project_id

  allow {
    protocol = "icmp"
  }

  source_ranges = ["0.0.0.0/0"]
  target_tags   = ["allow-icmp"]
}

resource "google_compute_firewall" "allow_ssh" {
  name    = "allow-ssh-${google_compute_network.default.name}"
  network = google_compute_network.default.id
  project = var.project_id

  allow {
    protocol = "tcp"
    ports    = ["22"]
  }

  source_ranges = ["0.0.0.0/0"]
  target_tags   = ["allow-ssh"]
}

resource "google_compute_firewall" "allow_sql" {
  name    = "allow-sql-${google_compute_network.default.name}"
  network = google_compute_network.default.id
  project = var.project_id

  allow {
    protocol = "tcp"
    ports    = ["3306"]
  }

  source_ranges = ["0.0.0.0/0"]
 }

resource "google_compute_firewall" "allow_internal" {
  name    = "allow-internal-${google_compute_network.default.name}"
  network = google_compute_network.default.id
  project = var.project_id

  allow {
    protocol = "icmp"
    }


  allow {
    protocol = "tcp"
    ports    = ["0-65535"]
  }
  allow {
    protocol = "udp"
    ports    = ["0-65535"]
  }

  source_ranges = ["10.128.0.0/9"]
 }
  1. Cloud Shell terminaline geri dönün, terraform-db dizininde olduğunuzdan emin olun cd terraform-db ve aşağıdaki komutları çalıştırın.

terraform init

Çalışma dizinini başlatır. Bu adımda, söz konusu yapılandırma için gerekli sağlayıcılar indirilir.

terraform plan

Terraform'un altyapınızı dağıtmak için hangi işlemleri yapacağını gösteren bir yürütme planı oluşturur.

  1. Şimdi kaynakları oluşturmak için terraform apply komutunu çalıştırın ve çalıştırmak için yes yazın.

4. 2. görev: PSC ekiyle Cloud SQL örneği oluşturma (Terraform)

Bağlantıya izin vermek için PSC seçeneğiyle Cloud SQL örneği oluşturmak üzere Terraform'u kullanalım. Bu yapılandırmayı veritabanı projesinde tamamlayın.

  1. Cloud Shell Düzenleyici görünümüne geçin. terraform-db klasöründe olduğunuzdan emin olun. database.tf dosyasını seçin ve aşağıdakileri ekleyin.
resource "google_sql_database_instance" "default" {
  name             = "psc-sql-db"
  region           = var.region_id
  database_version = "MYSQL_8_0"
  settings {
    tier              = "db-f1-micro"
    availability_type = "REGIONAL"
    backup_configuration {
      enabled            = true
      binary_log_enabled = true
    }
    ip_configuration {
      psc_config {
        psc_enabled               = true
        allowed_consumer_projects = var.project_id_consumer
      }
      ipv4_enabled = false
    }
  }
  deletion_protection = false 
}

resource "google_sql_user" "users" {
  name     = "testsql"
  instance = google_sql_database_instance.default.name
  password = var.db_password 
}
  1. Cloud Shell terminaline geri dönün ve terraform-db dizininde olduğunuzdan emin olun. Şimdi kaynakları oluşturmak için terraform apply komutunu çalıştırın ve çalıştırmak için yes yazın. PSC ekiyle CloudSQL örneği oluşturma işlemi 5 dakikadan uzun sürebilir.

Veritabanını doğrulama

  1. İşlem tamamlandıktan sonra konsolda SQL'e gidin ve yeni oluşturulan psc-sql-db veritabanı örneğini seçin.
  2. Sol tarafta SQL seçenekleri kaydırma panelini genişletin ve Bağlantılar'ı seçin.
  3. Özet sekmesinde bağlantıyla ilgili bilgileri görebilirsiniz.
  4. Hizmet eki adresini kopyalayın ve sisteminizde bir yere kaydedin.
  5. 3. görevdeki 8. adımı tamamlamak için bu bilgiye ihtiyacınız olacaktır.

PSC ekiyle Cloud SQL

  1. Sol tarafta SQL seçenekleri açılır menüsünü genişletin ve Kullanıcılar'ı seçin.
  2. testsql adlı kullanıcının şifresi cloudsql24 olmalıdır (Bu şifre, daha sonra veritabanına erişmek için kullanılacaktır).

5. 3. görev: Tüketici projesi için ortam kurulumu (Terraform)

Tüketici projesinde,güvenlik duvarı kuralları ve alt ağ içeren özel bir VPC oluşturacağız. Cloud Console'u açın ve kullanacağınız projeyi seçin.

  1. Konsolunuzun üst kısmında, sağ tarafta Google Cloud simgesinin yanındaki açılır listeyi tıklayın ve tümü sekmesini seçin.

proje çubuğuproje çubuğu 2

  1. Devam etmek için listelenen projelerden tüketici projesi kimliğinizi seçin.
  2. Konsolunuzun sağ üst kısmında bulunan Cloud Shell'i açın, Cloud Shell'de tüketici proje kimliğini gördüğünüzden emin olun ve erişime izin vermek için tüm istemleri onaylayın.
  3. terraform-consumer adlı bir klasör oluşturun ve bu klasöre gidin.
mkdir terraform-consumer  && cd terraform-consumer
  1. main.tf, variable.tf ve psc.tf dosyası oluşturun.
touch main.tf variable.tf psc.tf 
  1. Tüketici projesi kimliği için Cloud Shell düzenleyici görünümüne geçin. Düzenleyici'yi seçin ve arayüzün yüklenebilmesi için gerekli tüm istemlere izin verin.
  2. Yüklendikten sonra File > Open Folder'a (Dosya > Klasör Aç) gidin ve /home/your-user-name/terraform-consumer'ı seçin. Klasörü düzenleyicide açmak için Ok'u (Tamam) tıklayın. 78f5eb9f2f82f1b0.png
  3. variable.tf dosyasını seçin ve aşağıdakileri ekleyin. your-consumer-project-id-here metnini tırnak işaretleri içinde gerçek tüketici proje kimliğinizle değiştirin. your-psc-attachment-id-here metnini tırnak işaretleri içinde psc eki adresinizle değiştirin. Bu, görev 2 bölüm 2-5'te kopyaladığınız kimliktir. d7ac9629a59abfc6.png
variable "project_id" {
  type = string
  default = "your-consumer-project-id-here"
}

variable "psc_attachment_id" {
  type = string
  default = "your-psc-attachment-id-here"
}

variable "network_id" {
  type = string
  default = "psc-endpoint-net"
}

variable "region_id" {
  type = string
  default = "us-east1"
}

variable "region_id2" {
  type = string
  default = "us-central1"
}
  1. Ardından main.tf dosyasını açın. Aşağıda açıklandığı gibi çeşitli işlemleri gerçekleştirmek için bazı Terraform kodları ekleyeceğiz.

API'leri etkinleştirme

resource "google_project_service"

VPC oluşturma

resource "google_compute_network"

NAT ağ geçidi oluşturma

resource "google_compute_router"
resource "google_compute_router_nat"

Güvenlik duvarı kuralları ekleme

resource "google_compute_firewall"

  1. Aşağıdakileri kopyalayıp main .tf dosyasına yapıştırın.
resource "google_project_service" "default" {
  for_each = toset([
    "compute.googleapis.com",
    "cloudresourcemanager.googleapis.com"
  ])

  service            = each.value
  disable_on_destroy = false
}

resource "google_compute_network" "default" {
  project                 = var.project_id
  name                    = var.network_id
  auto_create_subnetworks = false
  mtu                     = 1460
  routing_mode            = "GLOBAL"
}

resource "google_compute_subnetwork" "vm_subnet" {
  name          = "vm-subnet"
  ip_cidr_range = "192.168.50.0/24"
  region        = var.region_id2
  network       = google_compute_network.default.name
  project       = var.project_id
}

resource "google_compute_subnetwork" "psc_subnet" {
  name          = "psc-subnet"
  ip_cidr_range = "192.168.90.0/24"
  region        = var.region_id
  network       = google_compute_network.default.name
  project       = var.project_id
}

resource "google_compute_router" "default" {
  name    = "outbound-nat"
  region  = var.region_id2
  network = google_compute_network.default.id

 bgp {
  asn = 64514
  }
}

resource "google_compute_router_nat" "default" {
  name = "outbound-nat-gw"
  router = google_compute_router.default.name
  region = google_compute_router.default.region
  nat_ip_allocate_option = "AUTO_ONLY"
  source_subnetwork_ip_ranges_to_nat = "ALL_SUBNETWORKS_ALL_IP_RANGES"

  log_config {
    enable = true
    filter = "ERRORS_ONLY"
  }
}

resource "google_compute_firewall" "allow_icmp" {
  name    = "allow-icmp-${google_compute_network.default.name}"
  network = google_compute_network.default.id
  project = var.project_id

  allow {
    protocol = "icmp"
  }

  source_ranges = ["0.0.0.0/0"]
  
}

resource "google_compute_firewall" "allow_ssh" {
  name    = "allow-ssh-${google_compute_network.default.name}"
  network = google_compute_network.default.id
  project = var.project_id

  allow {
    protocol = "tcp"
    ports    = ["22"]
  }

  source_ranges = ["0.0.0.0/0"]
  target_tags   = ["allow-ssh"]
}


resource "google_compute_firewall" "allow_internal" {
  name    = "allow-internal-${google_compute_network.default.name}"
  network = google_compute_network.default.id
  project = var.project_id

  allow {
    protocol = "icmp"
    }


  allow {
    protocol = "tcp"
    ports    = ["0-65535"]
  }
  allow {
    protocol = "udp"
    ports    = ["0-65535"]
  }

  source_ranges = ["192.168.0.0/16"]
 }
  1. Cloud Shell terminaline geri dönün, tüketici projesinde terraform-consumer dizininde olduğunuzdan emin olun cd terraform-consumer ve aşağıdaki komutları çalıştırın.

terraform init

Çalışma dizinini başlatır. Bu adımda, söz konusu yapılandırma için gerekli sağlayıcılar indirilir.

terraform plan

Terraform'un altyapınızı dağıtmak için hangi işlemleri yapacağını gösteren bir yürütme planı oluşturur.

  1. Şimdi kaynakları oluşturmak için terraform apply komutunu çalıştırın ve çalıştırmak için yes yazın.

6. 4. görev: Tüketici projesinde SQL DB eki için PSC uç noktası oluşturma ve sanal makineyi test etme (Terraform)

Bu yapılandırmayı tüketici projesinde tamamlayın.

  1. Cloud Shell düzenleyiciye geri dönün, terraform-consumer dizinini açın ve psc.tf dosyasını seçin. Aşağıdaki Terraform kodunu dosyaya ekleyin. Bu işlemle statik dahili IP, PSC uç noktası ve Maria DB'nin yüklü olduğu bir test sanal makinesi oluşturulur.
resource "google_compute_address" "default" {
  name = "psc-ip"
  region = var.region_id
  address_type = "INTERNAL"
  subnetwork = google_compute_subnetwork.psc_subnet.name
  address = "192.168.90.100" 
}

resource "google_compute_forwarding_rule" "default" {
  name = "psc-sql-endpoint"
  region = var.region_id
  network = google_compute_network.default.name
  ip_address = google_compute_address.default.self_link
  load_balancing_scheme = ""
  target = var.psc_attachment_id
}


resource "google_compute_instance" "sql_test_vm" {
  name         = "sql-test-vm"
  machine_type = "e2-medium"
  zone         = "${var.region_id2}-b"
  project      = var.project_id

  boot_disk {
    initialize_params {
      image = "debian-cloud/debian-11"
    }
  }

  network_interface {
    subnetwork = google_compute_subnetwork.vm_subnet.name
  }

  # No external IP address
  network_performance_config {
    total_egress_bandwidth_tier = "DEFAULT"
  }

  tags = ["allow-icmp", "allow-ssh", "allow-internal", "allow-health-check"]

  # Install MariaDB at startup
  metadata_startup_script = <<EOF
#!/bin/bash
apt-get update
apt-get install -y mariadb-server
systemctl enable mariadb
EOF
}
  1. Cloud Shell terminaline geri dönün, tüketici projesinde terraform-consumer dizininde olduğunuzdan emin olun cd terraform-consumer ve aşağıdaki komutları çalıştırın.

terraform plan

Terraform'un altyapınızı dağıtmak için hangi işlemleri yapacağını gösteren bir yürütme planı oluşturur.

  1. Şimdi kaynakları oluşturmak için terraform apply komutunu çalıştırın ve çalıştırmak için yes yazın.
  2. Sanal makinemiz ve uç noktamız farklı bölgelerde olduğundan PSC uç noktasında Global Erişim'i etkinleştirmemiz gerekiyor. Bu işlemi konsol üzerinden yaparız.
  3. Tüketici projesi konsolunda Private Service Connect'e gidin. Bağlı Uç Nokta sekmesinde, Uç Nokta bölümüne gidin ve psc-sql-endpoint'i seçin.
  4. Şimdi DÜZENLE'yi seçin,ardından Genel erişimi etkinleştir'in yanındaki onay kutusunu ve Kaydet seçeneğini tıklayın. 7eeb5a4162f5f79d.png
  5. Bağlantıyı doğrulamak için sonraki adıma geçin.

7. 5. görev: PSC IP adresi üzerinden sanal makineden uç nokta bağlantısını doğrulama

Bu işlemi tüketici projesinde tamamlayın

  1. Sanal Makine Örneği'ne gidin. sql-test-vm'yi seçin.
  2. Sanal makineye bağlanmak için SSH seçeneğini belirleyin.
  3. Aşağıdaki bilgilerle uç nokta üzerinden veritabanına bağlanın:
mysql --host=192.168.90.100 --user=testsql --password=cloudsql24
  1. Bağlantı kurulduktan sonra aşağıdaki psc-sql-db ile bir veritabanı oluşturun.
CREATE DATABASE remotesqldb;
  1. İşlem tamamlandığında bağlantıdan çıkmak için exit yazın.

8. 6. görev: Veritabanı girişini doğrulama

Bu doğrulamayı veritabanı projesinde tamamlayın.

  1. Konsolunuzun üst kısmında, sağ tarafta Google Cloud simgesinin yanındaki açılır listeyi tıklayın ve tümü sekmesini seçin.

proje çubuğuproje çubuğu 2

  1. Devam etmek için listelenen projelerden veritabanı proje kimliğinizi seçin.
  2. SQL'e gidin, psc-sql-db veritabanını seçin, SQL seçeneklerini genişletin ve Veritabanları'nı seçin. Tüketici projesi sanal makinesinden remotesqldb adlı yeni oluşturduğunuz veritabanını görmelisiniz.**.**

cloud sql db

9. Temizleme

Bu işlemi Veritabanı projesinde tamamlama

  1. Veritabanı proje kimliğini seçin
  2. Cloud Shell'e gidin ve veritabanı proje kimliğini gördüğünüzden emin olun.
  3. terraform-db dizinine gidin cd terraform-db ve aşağıdaki komutu çalıştırın terraform destroy. Ardından yes yazın. Terraform ile veritabanı projenizde oluşturduğunuz tüm kaynaklar kaldırılır.

Bu işlemi tüketici projesinde tamamlayın

  1. Tüketici projesi kimliğini seçin
  2. Cloud Shell'e gidin ve tüketici proje kimliğini gördüğünüzden emin olun.
  3. terraform-consumer dizinine gidin cd terraform-consumer ve aşağıdaki komutu çalıştırın terraform destroy. yes yazın. Terraform ile db projenizde oluşturduğunuz tüm kaynaklar kaldırılır.

10. Tebrikler

Tebrikler, PSC ekiyle bir Cloud SQL örneğini başarıyla yapılandırdınız ve başka bir VPC'de Private Service Connect uç noktası oluşturdunuz. PSC uç noktası üzerinden veritabanına uzak bir sanal makineden başarıyla bağlanabildiniz.

Daha fazla bilgi

Private Service Connect ve Cloud SQL hakkında daha fazla bilgi edinebilirsiniz.