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.

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
- 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ı 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_IDolarak 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.
- 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:

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:

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.
- 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.

- terraform-db adlı bir klasör oluşturun ve bu klasöre gidin.
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 ve arayüzün yüklenebilmesi için gerekli tüm istemlere izin verin.
- 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.

- variable.tf dosyasını seçin ve aşağıdakileri ekleyin.
your-database-project-id-heremetnini, tırnak işaretleri içinde gerçek veritabanı projesi kimliğinizle değiştirin.your-consumer-project-id-heremetnini, 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"
}
- 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 |
|
VPC oluşturma |
|
Güvenlik duvarı kuralları ekleme |
|
- 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"]
}
- 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, 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.
- Şimdi kaynakları oluşturmak için
terraform applykomutunu çalıştırın ve çalıştırmak içinyesyazı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.
- Cloud Shell Düzenleyici görünümüne geçin.
terraform-dbklasöründe olduğunuzdan emin olun.database.tfdosyası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
}
- 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 ekiyle CloudSQL örneği oluşturma işlemi 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 tarafta SQL seçenekleri kaydırma panelini genişletin ve Bağlantılar'ı seçin.
- Özet sekmesinde bağlantıyla ilgili bilgileri görebilirsiniz.
- Hizmet eki adresini kopyalayın ve sisteminizde bir yere kaydedin.
- 3. görevdeki 8. adımı tamamlamak için bu bilgiye ihtiyacınız olacaktır.

- Sol tarafta SQL seçenekleri açılır menüsünü genişletin ve Kullanıcılar'ı seçin.
- 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.
- 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.


- Devam etmek için listelenen projelerden tüketici projesi kimliğinizi seçin.
- 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.
- terraform-consumer adlı bir klasör oluşturun ve bu klasöre gidin.
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 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.
- 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.

- variable.tf dosyasını seçin ve aşağıdakileri ekleyin.
your-consumer-project-id-heremetnini tırnak işaretleri içinde gerçek tüketici proje kimliğinizle değiştirin.your-psc-attachment-id-heremetnini 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.
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 kodları ekleyeceğiz.
API'leri etkinleştirme |
|
VPC oluşturma |
|
NAT ağ geçidi oluşturma |
|
Güvenlik duvarı kuralları ekleme |
|
- 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"]
}
- Cloud Shell terminaline geri dönün, tüketici projesinde terraform-consumer dizininde olduğunuzdan emin olun
cd terraform-consumerve 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.
- Ş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 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.
- Cloud Shell düzenleyiciye geri dönün, terraform-consumer dizinini açın ve
psc.tfdosyası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
}
- Cloud Shell terminaline geri dönün, tüketici projesinde terraform-consumer dizininde olduğunuzdan emin olun
cd terraform-consumerve 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 Global Erişim'i etkinleştirmemiz gerekiyor. Bu işlemi konsol üzerinden yaparız.
- 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.
- Ş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.

- 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ğıdaki bilgilerle 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şturun.
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 üst kısmında, sağ tarafta Google Cloud simgesinin yanındaki açılır listeyi tıklayın ve 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 makinesinden remotesqldb adlı yeni oluşturduğunuz veritabanını görmelisiniz.**
.**

9. Temizleme
Bu işlemi Veritabanı projesinde tamamlama
- Veritabanı proje kimliğini seçin
- Cloud Shell'e gidin ve veritabanı proje kimliğini gördüğünüzden emin olun.
- terraform-db dizinine gidin
cd terraform-dbve aşağıdaki komutu çalıştırınterraform destroy. Ardındanyesyazın. Terraform ile veritabanı projenizde oluşturduğunuz tüm kaynaklar kaldırılır.
Bu işlemi tüketici projesinde 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 dizinine gidin
cd terraform-consumerve aşağıdaki komutu çalıştırınterraform destroy.yesyazı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.