1. بررسی اجمالی
چندین گزینه برای اتصال به یک نمونه خصوصی Cloud SQL از یک پروژه دیگر یا VPC وجود دارد. Private Service Connect (PSC) به تولیدکنندگان خدمات این امکان را می دهد که خدمات خود را از طریق پیوست های سرویس در معرض دید قرار دهند. این پیوستهای سرویس میتوانند توسط مصرفکنندگان برای ایجاد نقاط پایانی PSC و/یا باطنهای PSC در محیط خود و اتصال به این خدمات تولیدکننده از طریق یک IP خصوصی مشخص استفاده شوند.
Cloud SQL این قابلیت را دارد که از پیوست سرویس PSC برای اجازه دادن به اتصال خصوصی استفاده کند. در این آزمایشگاه می توانید گزینه را پیکربندی و تست کنید.
در این آزمایشگاه، میخواهید یک معماری ساده بسازید که استفاده از دسترسی نقطه پایانی PSC با CloudSQL را نشان میدهد.
شکل 1.
برای این آزمایشگاه به دو پروژه یا VPC مجزا در همان پروژه نیاز دارید .
اهداف
در این آزمایشگاه شما یاد خواهید گرفت که چگونه وظایف زیر را انجام دهید:
- یک نمونه CloudSQL با پیوست سرویس PSC ایجاد کنید.
- یک آدرس IP ثابت ایجاد کنید
- یک نقطه پایانی PSC در VPC مصرف کننده برای اتصال به پایگاه داده CloudSQL ایجاد کنید
- دسترسی به پایگاه داده SQL را از یک VM آزمایشی در شبکه مصرف کننده از طریق IP نقطه پایانی PSC تأیید کنید.
2. راه اندازی و الزامات
تنظیم محیط خود به خود
- به Google Cloud Console وارد شوید و یک پروژه جدید ایجاد کنید یا از یک موجود استفاده مجدد کنید. اگر قبلاً یک حساب Gmail یا Google Workspace ندارید، باید یک حساب ایجاد کنید .
- نام پروژه نام نمایشی برای شرکت کنندگان این پروژه است. این یک رشته کاراکتری است که توسط API های Google استفاده نمی شود. همیشه می توانید آن را به روز کنید.
- شناسه پروژه در تمام پروژههای Google Cloud منحصربهفرد است و تغییرناپذیر است (پس از تنظیم نمیتوان آن را تغییر داد). Cloud Console به طور خودکار یک رشته منحصر به فرد تولید می کند. معمولاً برای شما مهم نیست که چیست. در اکثر کدها، باید شناسه پروژه خود را ارجاع دهید (معمولاً با نام
PROJECT_ID
شناخته می شود). اگر شناسه تولید شده را دوست ندارید، ممکن است یک شناسه تصادفی دیگر ایجاد کنید. از طرف دیگر، میتوانید خودتان را امتحان کنید، و ببینید آیا در دسترس است یا خیر. پس از این مرحله نمی توان آن را تغییر داد و در طول مدت پروژه باقی می ماند. - برای اطلاع شما، یک مقدار سوم وجود دارد، یک شماره پروژه ، که برخی از API ها از آن استفاده می کنند. در مورد هر سه این مقادیر در مستندات بیشتر بیاموزید.
- در مرحله بعد، برای استفاده از منابع Cloud/APIها باید صورتحساب را در کنسول Cloud فعال کنید . اجرا کردن از طریق این کد لبه هزینه زیادی نخواهد داشت. برای خاموش کردن منابع برای جلوگیری از تحمیل صورتحساب فراتر از این آموزش، میتوانید منابعی را که ایجاد کردهاید حذف کنید یا پروژه را حذف کنید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان 300 دلاری هستند.
Cloud Shell را راه اندازی کنید
در حالی که Google Cloud را می توان از راه دور از لپ تاپ شما کار کرد، در این کد لبه از Google Cloud Shell استفاده خواهید کرد، یک محیط خط فرمان که در Cloud اجرا می شود.
از Google Cloud Console ، روی نماد Cloud Shell در نوار ابزار بالا سمت راست کلیک کنید:
تهیه و اتصال به محیط فقط چند لحظه طول می کشد. وقتی تمام شد، باید چیزی شبیه به این را ببینید:
این ماشین مجازی با تمام ابزارهای توسعه که شما نیاز دارید بارگذاری شده است. این یک فهرست اصلی 5 گیگابایتی دائمی را ارائه می دهد و در Google Cloud اجرا می شود و عملکرد و احراز هویت شبکه را تا حد زیادی افزایش می دهد. تمام کارهای شما در این کد لبه را می توان در یک مرورگر انجام داد. شما نیازی به نصب چیزی ندارید.
3. وظیفه 1. تنظیم محیط برای پروژه پایگاه داده با (Terraform)
در پروژه پایگاه داده، یک VPC سفارشی با قوانین فایروال و زیرشبکه ایجاد خواهیم کرد. کنسول ابری را باز کنید و پروژه ای را که برای پایگاه داده استفاده می کنید انتخاب کنید.
- Cloud Shell را که در بالای کنسول خود در سمت راست قرار دارد باز کنید، مطمئن شوید که ID پروژه پایگاه داده برای پروژه پایگاه داده را در Cloud Shell می بینید، هر گونه درخواستی را برای اجازه دسترسی تأیید کنید.
- یک پوشه به نام terraform-db ایجاد کنید و به پوشه بروید
mkdir terraform-db && cd terraform-db
- یک فایل main.tf، variable.tf و database.tf ایجاد کنید.
touch main.tf variable.tf database.tf
- به نمای ویرایشگر Cloud Shell بروید. ویرایشگر را انتخاب کنید، اطمینان حاصل کنید که به هر گونه درخواست ضروری اجازه می دهید تا رابط بارگیری شود.
- پس از بارگیری به مسیر File > Open Folder بروید و به /home/your-user-name/terraform-db بروید و Ok را انتخاب کنید تا پوشه در ویرایشگر باز شود.
- فایل variable.tf را انتخاب کرده و موارد زیر را اضافه کنید. متن
your-database-project-id-here
را با شناسه پروژه پایگاه داده واقعی خود در گیومه جایگزین کنید. متنyour-consumer-project-id-here
را با شناسه پروژه مصرف کننده واقعی خود در نقل قول جایگزین کنید.
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" }
- سپس فایل main.tf را باز کنید. ما قصد داریم تعدادی کد terraform برای انجام اقدامات مختلف همانطور که در زیر توضیح داده شده است اضافه کنیم.
فعال کردن API ها | |
VPC ایجاد کنید | |
قوانین فایروال را اضافه کنید | |
- موارد زیر را کپی کرده و در فایل tf اصلی قرار دهید.
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 برگردید مطمئن شوید که در دایرکتوری terraform-db
cd terraform-db
هستید و دستورات زیر را اجرا کنید.
terraform init
دایرکتوری کاری را مقدار دهی اولیه می کند. این مرحله ارائه دهندگان مورد نیاز برای پیکربندی داده شده را دانلود می کند.
terraform plan
یک برنامه اجرایی ایجاد می کند که نشان می دهد Terraform چه اقداماتی را برای استقرار زیرساخت شما انجام خواهد داد.
- اکنون برای ایجاد منابع، دستور
terraform apply
را اجرا کرده وyes
تایپ کنید تا اجرا شود.
4. وظیفه 2. ایجاد نمونه CloudSQL با پیوست PSC (Terraform)
بیایید از Terraform برای ایجاد یک نمونه CloudSQL با گزینه PSC برای اجازه اتصال استفاده کنیم. این پیکربندی را در پروژه پایگاه داده تکمیل کنید.
- به نمای ویرایشگر Cloud Shell بروید. مطمئن شوید که در پوشه
terraform-db
هستید. فایلdatabase.tf
را انتخاب کرده و موارد زیر را اضافه کنید.
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 برگردید، مطمئن شوید که در فهرست terraform-db هستید. اکنون برای ایجاد منابع، دستور
terraform apply
را اجرا کرده وyes
تایپ کنید تا اجرا شود. ایجاد نمونه CloudSQL با پیوست PSC ممکن است بیش از 5 دقیقه طول بکشد.
تایید پایگاه داده
- پس از تکمیل، به SQL در کنسول بروید، نمونه پایگاه داده psc-sql-db تازه ایجاد شده را انتخاب کنید.
- در سمت چپ گزینه های SQL را باز کنید و Connections را انتخاب کنید
- در زیر برگه خلاصه می توانید اطلاعات مربوط به اتصال را مشاهده کنید.
- آدرس پیوست سرویس را کپی کرده و در جایی از سیستم خود ذخیره کنید.
- برای تکمیل کار 3 مرحله 8 به این نیاز دارید.
- در سمت چپ گزینه های SQL را باز کنید و Users را انتخاب کنید.
- شما باید کاربری به نام testsql با رمز عبور cloudsql24 را ببینید (از این رمز عبور برای دسترسی به db بعدا استفاده خواهد شد)
5. وظیفه 3. راه اندازی محیط برای پروژه مصرف کننده (Terraform)
در پروژه مصرف کننده، یک VPC سفارشی با قوانین فایروال و زیرشبکه ایجاد خواهیم کرد. کنسول ابری را باز کنید و پروژه مورد استفاده خود را انتخاب کنید.
- در بالای کنسول خود در سمت راست در کنار نماد Google Cloud، روی منوی کشویی کلیک کنید و سپس برگه همه را انتخاب کنید.
- از میان پروژه های فهرست شده، شناسه پروژه مصرف کننده خود را برای ادامه انتخاب کنید.
- Cloud Shell را که در بالای کنسول خود در سمت راست قرار دارد باز کنید، مطمئن شوید که شناسه پروژه مصرفکننده را در Cloud Shell میبینید، هرگونه درخواستی را برای اجازه دسترسی تأیید کنید.
- یک پوشه به نام terraform-consumer ایجاد کنید و به پوشه بروید
mkdir terraform-consumer && cd terraform-consumer
- یک فایل main.tf، variable.tf و psc.tf ایجاد کنید.
touch main.tf variable.tf psc.tf
- برای شناسه پروژه مصرف کننده به نمای ویرایشگر Cloud Shell بروید. ویرایشگر را انتخاب کنید، اطمینان حاصل کنید که به هر گونه درخواست ضروری اجازه می دهید تا رابط بارگیری شود.
- پس از بارگیری به مسیر File > Open Folder بروید و به /home/your-user-name/terraform-consumer بروید و Ok را انتخاب کنید تا پوشه در ویرایشگر باز شود.
- فایل variable.tf را انتخاب کرده و موارد زیر را اضافه کنید. متن
your-consumer-project-id-here
را با شناسه پروژه مصرف کننده واقعی خود به صورت نقل قول جایگزین کنید. آدرس پیوستyour-psc-attachment-id-here
خود را در نقل قول جایگزین کنید. این شناسه ای است که در بخش 2-5 وظیفه 2 کپی کرده اید
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" }
- سپس فایل main.tf را باز کنید. ما قصد داریم تعدادی کد terraform برای انجام اقدامات مختلف همانطور که در زیر توضیح داده شده است اضافه کنیم.
فعال کردن API ها | |
VPC ایجاد کنید | |
دروازه NAT ایجاد کنید | |
قوانین فایروال را اضافه کنید | |
- موارد زیر را کپی کرده و در فایل tf اصلی قرار دهید.
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 برگردید مطمئن شوید که در دایرکتوری terraform-consumer
cd terraform-consumer
در پروژه مصرف کننده هستید و دستورات زیر را اجرا کنید.
terraform init
دایرکتوری کاری را مقدار دهی اولیه می کند. این مرحله ارائه دهندگان مورد نیاز برای پیکربندی داده شده را دانلود می کند.
terraform plan
یک برنامه اجرایی ایجاد می کند که نشان می دهد Terraform چه اقداماتی را برای استقرار زیرساخت شما انجام خواهد داد.
- اکنون برای ایجاد منابع، دستور
terraform apply
را اجرا کرده وyes
تایپ کنید تا اجرا شود.
6. وظیفه 4. ایجاد نقطه پایانی PSC به پیوست SQL DB در پروژه مصرف کننده و تست VM (Terraform)
این پیکربندی را در پروژه مصرف کننده کامل کنید.
- به ویرایشگر Cloud Shell برگردید، دایرکتوری terraform-consumer را باز کنید و فایل
psc.tf
را انتخاب کنید. کد Terraform زیر را به فایل اضافه کنید. این یک IP داخلی ثابت، یک نقطه پایانی PSC و یک ماشین مجازی آزمایشی با نصب ماریا DB ایجاد می کند.
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 برگردید مطمئن شوید که در دایرکتوری terraform-consumer
cd terraform-consumer
در پروژه مصرف کننده هستید و دستورات زیر را اجرا کنید.
terraform plan
یک برنامه اجرایی ایجاد می کند که نشان می دهد Terraform چه اقداماتی را برای استقرار زیرساخت شما انجام خواهد داد.
- اکنون برای ایجاد منابع، دستور
terraform apply
را اجرا کرده وyes
تایپ کنید تا اجرا شود - از آنجا که VM و نقطه پایانی ما در مناطق مختلف هستند، باید دسترسی جهانی را در نقطه پایانی PSC فعال کنیم . ما این کار را از طریق کنسول انجام می دهیم
- در کنسول پروژه مصرف کننده، به Private Service Connect بروید. در تب Connected Endpoint ، به قسمت Endpoint نگاه کنید و psc-sql-endpoint را انتخاب کنید.
- حالا EDIT را انتخاب کنید و سپس بر روی تیک کنار گزینه Enable global access and Save کلیک کنید.
- برای تأیید اتصال به مرحله بعدی ادامه دهید
7. وظیفه 5. بررسی اتصال نقطه پایانی از VM از طریق آدرس IP PSC
این را در پروژه مصرف کننده کامل کنید
- به VM Instance بروید. sql-test-vm را انتخاب کنید
- برای اتصال به VM گزینه SSH را انتخاب کنید.
- از طریق نقطه پایانی با موارد زیر به DB متصل شوید:
mysql --host=192.168.90.100 --user=testsql --password=cloudsql24
- هنگامی که اتصال برقرار شد اجازه دهید یک پایگاه داده با psc-sql-db زیر ایجاد کنید.
CREATE DATABASE remotesqldb;
- پس از تکمیل، خروج را تایپ کنید تا از اتصال خارج شوید.
8. وظیفه 6. بررسی ورود پایگاه داده
این تأیید را در پروژه پایگاه داده تکمیل کنید
- در بالای کنسول خود در سمت راست در کنار نماد Google Cloud، روی منوی کشویی کلیک کنید و سپس برگه همه را انتخاب کنید.
- از بین پروژه های فهرست شده ID پروژه پایگاه داده خود را برای ادامه انتخاب کنید.
- به SQL بروید، پایگاه داده psc-sql-db را انتخاب کنید، گزینههای SQL را گسترش دهید و پایگاههای داده را انتخاب کنید. باید پایگاه داده ای را که به تازگی ایجاد کرده اید به نام remotesqldb از پروژه مصرف کننده VM** ببینید
.
**
9. پاکسازی کنید
این را در پروژه پایگاه داده تکمیل کنید
- شناسه پروژه پایگاه داده را انتخاب کنید
- به Cloud Shell بروید و مطمئن شوید که شناسه پروژه پایگاه داده را می بینید
- به دایرکتوری terraform-db
cd terraform-db
بروید و دستور زیر را اجرا کنیدterraform destroy
و تایپ کنیدyes
تمام منابعی که در پروژه db خود با Terraform ایجاد کرده اید حذف خواهند شد.
این را در پروژه مصرف کننده تکمیل کنید
- شناسه پروژه مصرف کننده را انتخاب کنید
- به Cloud Shell بروید و مطمئن شوید که شناسه پروژه مصرف کننده را می بینید
- به دایرکتوری terraform-consumer
cd terraform-consumer
بروید و دستور زیر را اجرا کنیدterraform destroy
و تایپ کنیدyes
تمام منابعی که در پروژه db خود با Terraform ایجاد کرده اید حذف خواهند شد.
10. تبریک می گویم
تبریک میگوییم، شما با موفقیت یک نمونه Cloud SQL را با پیوست PSC پیکربندی کردهاید و یک نقطه پایانی Private Service Connect را در VPC دیگری ایجاد کردهاید. شما توانسته اید با موفقیت از یک VM راه دور از طریق نقطه پایانی PSC به پایگاه داده متصل شوید.
بیشتر بدانید
میتوانید درباره Private Service Connect و Cloud SQL بیشتر بخوانید