1. Genel Bakış
Başka bir projeden 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 göstermelerine olanak tanır. Bu hizmet ekleri, tüketiciler tarafından kendi 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 servis eki kullanabilir. Bu laboratuvarda seçeneği yapılandırabilir ve test edebilirsiniz.
Bu laboratuvarda, PSC uç noktası erişiminin CloudSQL ile kullanımını gösteren basit bir mimari oluşturacaksınız.
Şekil 1.

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 eki içeren bir CloudSQL örneği oluşturun.
- Statik IP adresi oluşturma
- CloudSQL veritabanına bağlanmak için tüketici VPC'sinde bir PSC uç noktası oluşturun
- Tüketici ağındaki bir test sanal makinesinden PSC uç noktası IP'si aracılığıyla SQL veritabanına erişimi doğrulayın.
2. Kurulum ve Gereksinimler
Kendine ait tempoda ortam kurulumu
- 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.



- Proje adı, bu projenin katılımcılarının görünen adıdır. Google API'leri tarafından kullanılmayan bir karakter dizesidir. Dilediğiniz zaman güncelleyebilirsiniz.
- Proje kimliği, tüm Google Cloud projelerinde benzersizdir ve değiştirilemez (ayarlandıktan sonra değiştirilemez). Cloud Console, benzersiz bir dize otomatik olarak oluşturur. Bu dizenin ne olduğu genellikle önemli değildir. Çoğu kod laboratuvarında proje kimliğinize (genellikle
PROJECT_IDolarak tanımlanır) referans vermeniz gerekir. Oluşturulan kimliği beğenmezseniz rastgele başka bir kimlik oluşturabilirsiniz. Alternatif olarak, kendi anahtarınızı deneyerek kullanılabilir olup olmadığını görebilirsiniz. Bu adımdan sonra değiştirilemez ve proje boyunca geçerli kalır. - Bazı API'lerin kullandığı üçüncü bir değer (Proje Numarası) olduğunu belirtmek isteriz. Bu üç değer hakkında daha fazla bilgiyi dokümanlar bölümünde bulabilirsiniz.
- Ardından, Cloud kaynaklarını/API'lerini kullanmak için Cloud Console'da faturalandırmayı etkinleştirmeniz gerekir. Bu codelab'i çalıştırmak çok pahalı değildir. Bu eğitimden sonra faturalandırılmamak için kaynakları kapatmak istiyorsanız oluşturduğunuz kaynakları veya projeyi silebilirsiniz. Yeni Google Cloud kullanıcıları 300 ABD doları değerindeki ücretsiz deneme programına uygundur.
Cloud Shell'i başlatma
Google Cloud, dizüstü bilgisayarınızdan uzaktan çalıştırılabilir olsa da bu kod laboratuvarında bulutta ç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:

Ortam sağlanıp bağlantı kurulabilmesi için birkaç saniye beklemeniz gerekir. İşlem tamamlandığında aşağıdakine benzer bir ekran görürsünüz:

Bu sanal makinede ihtiyacınız olan tüm geliştirme araçları yüklüdür. 5 GB boyutunda kalıcı bir ana dizin sunar ve Google Cloud üzerinde çalışır. Bu sayede ağ performansını ve kimlik doğrulamayı büyük ölçüde iyileştirir. Bu codelab'deki tüm çalışmalarınızı tarayıcıda yapabilirsiniz. Hiçbir şey yüklemeniz gerekmez.
3. 1. görev: (Terraform) ile veritabanı projesi için ortam oluşturma
Veritabanı projesinde,güvenlik duvarı kuralları ve alt ağı olan özel bir VPC oluşturacağız. Cloud Console'u açın ve veritabanı için kullanacağınız projeyi seçin.
- Konsolunuzun sağ üst tarafında bulunan Cloud Shell'i açın, Cloud Shell'de veritabanı projesi için veritabanı proje kimliğini gördüğünüzden emin olun, erişime izin verme istemlerini onaylayın.

- terraform-db adlı bir klasör oluşturun ve klasöre taşıyın
mkdir terraform-db && cd terraform-db
- main.tf, variable.tf ve database.tf dosyası oluşturun.
touch main.tf variable.tf database.tf
- Cloud Shell düzenleyici görünümüne geçin. Düzenleyici'yi seçin, arayüzün yüklenebilmesi için gerekli istemlere izin verdiğinizden emin olun.
- Yüklendikten sonra Dosya > Klasör Aç'a gidin ve /home/kullanıcı adınız/terraform-db adresine gidip Tamam'ı seçerek klasörü düzenleyicide açın.

- variable.tf dosyasını seçin ve aşağıdakileri ekleyin.
your-database-project-id-heremetnini, tırnak içinde gerçek veritabanı projesi kimliğinizle değiştirin.your-consumer-project-id-heremetnini, tırnak 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"
}
- 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 kodu ekleyeceğiz.
API'leri etkinleştirme |
|
VPC oluşturma |
|
Güvenlik duvarı kuralı ekleme |
|
- Aşağıdakileri kopyalayıp ana .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"]
}
- Cloud Shell terminaline geri dönün, terraform-db dizininde olduğunuzdan emin olun
cd terraform-dbve aşağıdaki komutları çalıştırın
terraform init
Çalışma dizinini başlatır. Bu adımda, belirli yapılandırma için gereken 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.
- Şimdi kaynakları oluşturmak için
terraform applykomutunu çalıştırın ve çalıştırmak içinyesyazın.
4. 2. görev: PSC eki ile CloudSQL örneği oluşturma (Terraform)
Bağlantıya izin vermek için PSC seçeneğiyle bir CloudSQL örneği oluşturmak üzere Terraform'u kullanalım. Bu yapılandırmayı veritabanı projesinde tamamlayın.
- Cloud Shell düzenleyici görünümüne geçin.
terraform-dbklasöründe olduğunuzdan emin olun.database.tfdosyasını seçip 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
}
- Cloud Shell terminaline geri dönün ve terraform-db dizininde olduğunuzdan emin olun. Şimdi kaynakları oluşturmak için
terraform applykomutunu çalıştırın ve çalıştırmak içinyesyazın. PSC eki içeren CloudSQL örneğinin oluşturulması 5 dakikadan uzun sürebilir.
Veritabanını doğrulama
- İşlem tamamlandıktan sonra konsolda SQL'e gidin ve yeni oluşturulan psc-sql-db veritabanı örneğini seçin.
- Sol taraftaki SQL seçenekleri kaydırma menüsünü genişletin ve Bağlantılar'ı seçin.
- Özet sekmesinde bağlantıyla ilgili bilgileri görebilirsiniz.
- Hizmet eki adresini kopyalayıp sisteminizdeki bir yere kaydedin.
- 3. görev 8. adımı tamamlamak için bu bilgiye ihtiyacınız olacaktır.

- Sol taraftaki SQL seçenekleri kaydırma menüsünü genişletin ve Kullanıcılar'ı seçin.
- cloudsql24 şifresine sahip testsql adlı bir kullanıcı görürsünüz (Bu kullanıcı, daha sonra veritabanına erişmek için kullanılır)
5. 3. görev: Tüketici projesi için ortam oluşturma (Terraform)
Tüketici projesinde,güvenlik duvarı kuralları ve alt ağ içeren özel bir VPC oluşturacağız. Cloud Console'u açıp kullanacağınız projeyi seçin.
- Konsolunuzun sağ üst kısmındaki Google Cloud simgesinin yanındaki açılır menüyü tıklayın ve ardından tümü sekmesini seçin.


- Devam etmek için listelenen projelerden tüketici projesi kimliğinizi seçin.
- Konsolunuzun sağ üst kısmındaki Cloud Shell'i açın, Cloud Shell'de kullanıcı projesi kimliğini gördüğünüzden emin olun, erişime izin verme istemlerini onaylayın.
- terraform-consumer adlı bir klasör oluşturun ve klasöre taşıyın
mkdir terraform-consumer && cd terraform-consumer
- main.tf, variable.tf ve psc.tf dosyası oluşturun.
touch main.tf variable.tf psc.tf
- Tüketici proje kimliği için Cloud Shell düzenleyici görünümüne geçin. Düzenleyici'yi seçin, arayüzün yüklenebilmesi için gerekli istemlere izin verdiğinizden emin olun.
- Yüklendikten sonra Dosya > Klasör Aç'a gidin ve /home/kullanıcı adınız/terraform-consumer'a gidip klasörü düzenleyicide açmak için Tamam'ı seçin.

- variable.tf dosyasını seçin ve aşağıdakileri ekleyin.
your-consumer-project-id-heremetnini tırnak içinde gerçek tüketici proje kimliğinizle değiştirin.your-psc-attachment-id-heremetnini tırnak içinde psc ek adresinizle değiştirin. Bu, 2. görev 2-5 bölümünde kopyaladığınız kimliktir
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"
}
- 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 kodu ekleyeceğiz.
API'leri etkinleştirme |
|
VPC oluşturma |
|
NAT ağ geçidi oluşturma |
|
Güvenlik duvarı kuralı ekleme |
|
- Aşağıdakileri kopyalayıp ana .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"]
}
- Cloud Shell terminaline geri dönün. Tüketici projesindeki terraform-consumer dizininde
cd terraform-consumerolduğunuzdan emin olun ve aşağıdaki komutları çalıştırın.
terraform init
Çalışma dizinini başlatır. Bu adımda, belirli yapılandırma için gereken 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.
- Şimdi kaynakları oluşturmak için
terraform applykomutunu çalıştırın ve çalıştırmak içinyesyazın.
6. 4. görev: Tüketici projesinde ve test sanal makinesinde SQL veritabanı eki için PSC uç noktasını oluşturun (Terraform)
Bu yapılandırmayı tüketici projesinde tamamlayın.
- Cloud Shell düzenleyicisine dönün, terraform-consumer dizinini açın ve
psc.tfdosyasını seçin. Dosyaya aşağıdaki Terraform kodunu ekleyin. Bu işlem, statik bir dahili IP, PSC uç noktası ve Maria DB yüklü bir test sanal makinesi oluşturur.
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
}
- Cloud Shell terminaline geri dönün. Tüketici projesindeki terraform-consumer dizininde
cd terraform-consumerolduğunuzdan emin olun 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.
- Şimdi kaynakları oluşturmak için
terraform applykomutunu çalıştırın ve çalıştırmak içinyesyazın - Sanal makinemiz ve uç noktamız farklı bölgelerde olduğundan PSC uç noktasında küresel erişimi etkinleştirmemiz gerekiyor. Bu işlemi konsol üzerinden yaparız
- Tüketici proje konsolunda Private Service Connect'e gidin. Bağlı Uç Nokta sekmesinin Uç Nokta bölümüne bakın ve psc-sql-endpoint seçeneğini belirleyin.
- Ardından DÜZENLE'yi seçin ve Genel erişimi etkinleştir'in yanındaki onay kutusunu ve Kaydet seçeneğini tıklayın.

- 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
- Sanal Makine Örneği'ne gidin. sql-test-vm'yi seçin.
- Sanal makineye bağlanmak için SSH seçeneğini belirleyin.
- Aşağıdakileri kullanarak uç nokta üzerinden veritabanına bağlanın:
mysql --host=192.168.90.100 --user=testsql --password=cloudsql24
- Bağlantı kurulduktan sonra aşağıdaki psc-sql-db ile bir veritabanı oluşturalım.
CREATE DATABASE remotesqldb;
- İş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
- Konsolunuzun sağ üst kısmındaki Google Cloud simgesinin yanındaki açılır menüyü tıklayın ve ardından tümü sekmesini seçin.


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

9. Temizleme
Veritabanı projesinde bu işlemi tamamlama
- Veritabanı proje kimliğini seçin
- Cloud Shell'e gidin ve veritabanı proje kimliğini gördüğünüzden emin olun
- terraform-db dizine
cd terraform-dbgidin ve aşağıdaki komutu çalıştırınterraform destroyveyesyazın. Terraform ile db projenizde oluşturduğunuz tüm kaynaklar kaldırılır.
Tüketici projesinde bunu tamamlayın
- Tüketici projesi kimliğini seçin
- Cloud Shell'e gidin ve tüketici proje kimliğini gördüğünüzden emin olun
- terraform-consumer dizine
cd terraform-consumergidin ve aşağıdaki komutu çalıştırınterraform destroyveyesyazın. Terraform ile db projenizde oluşturduğunuz tüm kaynaklar kaldırılır.
10. Tebrikler
Tebrikler, PSC eki içeren 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. Uzak bir sanal makineden PSC uç noktası üzerinden veritabanına başarıyla bağlanabildiniz.
Daha fazla bilgi
Private Service Connect ve Cloud SQL hakkında daha fazla bilgi edinebilirsiniz.