PSA (Terraform) चलाने वाले मौजूदा Cloud SQL इंस्टेंस पर Private Service Connect चालू करना

1. खास जानकारी

किसी दूसरे प्रोजेक्ट या वीपीएन नेटवर्क से निजी Cloud SQL इंस्टेंस से कनेक्ट करने के कई विकल्प हैं. निजी कनेक्शन के ज़रिए Google और तीसरे पक्ष की सेवाओं के इंटरनल आईपी पतों तक पहुंचने के लिए, निजी सेवाओं के ऐक्सेस (पीएसए) का इस्तेमाल किया जा सकता है. डेटाबेस का ऐक्सेस बढ़ाने के लिए, अब Private Service Connect (पीएससी) को भी चालू किया जा सकता है.

Private Service Connect (पीएससी) की मदद से, सेवा देने वाली कंपनियां सेवा अटैचमेंट के ज़रिए अपनी सेवाएं उपलब्ध करा सकती हैं. उपभोक्ता इनका इस्तेमाल करके, अपने एनवायरमेंट में पीएससी एंडपॉइंट और/या पीएससी बैकएंड बना सकते हैं. इन PSC एंडपॉइंट की मदद से, वे उपयोगकर्ता के बताए गए निजी आईपी के ज़रिए, प्रोड्यूसर सेवाओं से कनेक्ट कर सकते हैं.

इस लैब में, इस विकल्प को कॉन्फ़िगर और टेस्ट किया जा सकता है.

इस लैब में, आपको एक आसान आर्किटेक्चर बनाना है. इसमें, CloudSQL के साथ पीएसए और पीएससी एंडपॉइंट ऐक्सेस का इस्तेमाल करने का तरीका बताया गया है.

पहला चित्र.

e0e0f83704cc9d62.png

इस लैब के लिए, आपको दो प्रोजेक्ट या एक ही प्रोजेक्ट में अलग-अलग VPC की ज़रूरत होगी.

मकसद

इस लैब में, आपको यह काम करने का तरीका पता चलेगा:

  • सेवा नेटवर्किंग की सुविधा चालू करना
  • पीएसए सेट अप करना
  • PSA की मदद से CloudSQL इंस्टेंस बनाना
  • पीएससी सेवा अटैचमेंट चालू करें.
  • CloudSQL डेटाबेस से कनेक्ट करने के लिए, उपभोक्ता VPC में PSC एंडपॉइंट बनाएं
  • प्रोड्यूसर और उपभोक्ता, दोनों VPC में टेस्ट वीएम से SQL डेटाबेस के ऐक्सेस की पुष्टि करना

2. सेटअप और ज़रूरी शर्तें

अपने हिसाब से एनवायरमेंट सेट अप करना

  1. Google Cloud Console में साइन इन करें और नया प्रोजेक्ट बनाएं या किसी मौजूदा प्रोजेक्ट का फिर से इस्तेमाल करें. अगर आपके पास पहले से कोई Gmail या Google Workspace खाता नहीं है, तो आपको एक खाता बनाना होगा.

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • प्रोजेक्ट का नाम, इस प्रोजेक्ट में हिस्सा लेने वाले लोगों के लिए डिसप्ले नेम होता है. यह एक वर्ण स्ट्रिंग है, जिसका इस्तेमाल Google API नहीं करते. इसे कभी भी अपडेट किया जा सकता है.
  • प्रोजेक्ट आईडी, Google Cloud के सभी प्रोजेक्ट के लिए यूनीक होता है. साथ ही, इसे सेट करने के बाद बदला नहीं जा सकता. Cloud Console, अपने-आप एक यूनीक स्ट्रिंग जनरेट करता है. आम तौर पर, आपको यह जानने की ज़रूरत नहीं होती कि यह स्ट्रिंग क्या है. ज़्यादातर कोडलैब में, आपको अपने प्रोजेक्ट आईडी का रेफ़रंस देना होगा. आम तौर पर, इसे PROJECT_ID के तौर पर पहचाना जाता है. अगर आपको जनरेट किया गया आईडी पसंद नहीं आता है, तो कोई दूसरा आईडी जनरेट किया जा सकता है. इसके अलावा, आपके पास खुद का कोई दूसरा नाम चुनने का विकल्प भी है. इस चरण के बाद, इसे बदला नहीं जा सकता. यह प्रोजेक्ट के दौरान बना रहता है.
  • आपकी जानकारी के लिए बता दें कि तीसरी वैल्यू, प्रोजेक्ट नंबर होती है. इसका इस्तेमाल कुछ एपीआई करते हैं. दस्तावेज़ में इन तीनों वैल्यू के बारे में ज़्यादा जानें.
  1. इसके बाद, आपको Cloud के संसाधनों/एपीआई का इस्तेमाल करने के लिए, Cloud Console में बिलिंग की सुविधा चालू करनी होगी. इस कोडलैब को चलाने के लिए, आपसे कोई शुल्क नहीं लिया जाएगा. इस ट्यूटोरियल के बाद बिलिंग से बचने के लिए, बनाए गए संसाधनों को बंद किया जा सकता है या प्रोजेक्ट को मिटाया जा सकता है. Google Cloud के नए उपयोगकर्ता, 300 डॉलर के मुफ़्त ट्रायल वाले कार्यक्रम में शामिल हो सकते हैं.

Cloud Shell शुरू करना

Google Cloud को आपके लैपटॉप से रिमोट तौर पर इस्तेमाल किया जा सकता है. हालांकि, इस कोडलैब में आपको Google Cloud Shell का इस्तेमाल करना होगा. यह Cloud में चलने वाला कमांड-लाइन एनवायरमेंट है.

Google Cloud Console में, सबसे ऊपर दाएं टूलबार में मौजूद Cloud Shell आइकॉन पर क्लिक करें:

55efc1aaa7a4d3ad.png

एनवायरमेंट से कनेक्ट होने और उसे प्रोवाइड करने में सिर्फ़ कुछ मिनट लगेंगे. इसके पूरा होने पर, आपको कुछ ऐसा दिखेगा:

7ffe5cbb04455448.png

इस वर्चुअल मशीन में, डेवलपमेंट के लिए ज़रूरी सभी टूल लोड होते हैं. यह 5 जीबी की होम डायरेक्ट्री उपलब्ध कराता है. यह Google Cloud पर चलता है, जिससे नेटवर्क की परफ़ॉर्मेंस और पुष्टि करने की सुविधा बेहतर होती है. इस कोडलैब में, सारा काम ब्राउज़र में किया जा सकता है. आपको कुछ भी इंस्टॉल करने की ज़रूरत नहीं है.

3. पहला टास्क. Terraform की मदद से, डेटाबेस प्रोजेक्ट के लिए एनवायरमेंट सेट अप करना

डेटाबेस प्रोजेक्ट में,हम सेवा नेटवर्किंग की सुविधा चालू करेंगे, वीपीसी बनाएंगे, पीएसए रेंज बनाएंगे, सेवा नेटवर्किंग पीयरिंग बनाएंगे, और फ़ायरवॉल के नियम बनाएंगे. Cloud Console खोलें और वह प्रोजेक्ट चुनें जिसका इस्तेमाल डेटाबेस के लिए किया जाएगा.

  1. अपने कंसोल में सबसे ऊपर दाईं ओर मौजूद Cloud Shell खोलें. पक्का करें कि आपको Cloud Shell में डेटाबेस प्रोजेक्ट के लिए डेटाबेस प्रोजेक्ट आईडी दिख रहा हो. ऐक्सेस की अनुमति देने के लिए, किसी भी प्रॉम्प्ट की पुष्टि करें. 4261e776f64ea978.png
  2. terraform-db-psc नाम का फ़ोल्डर बनाएं और उसमें फ़ाइलें ले जाएं
mkdir terraform-db-psc  && cd terraform-db-psc
  1. main.tf, variable.tf, nat-vm.tf, और database.tf फ़ाइल बनाएं.
touch main.tf variable.tf nat-vm.tf database.tf 
  1. Cloud Shell एडिटर व्यू पर स्विच करें. एडिटर चुनें. साथ ही, इंटरफ़ेस लोड हो सके, इसके लिए ज़रूरी प्रॉम्प्ट को अनुमति दें.
  2. लोड होने के बाद, फ़ाइल > फ़ोल्डर खोलें पर जाएं. इसके बाद, /home/your-user-name/terraform-db-psc पर जाएं और फ़ोल्डर को Editor में खोलने के लिए, ठीक है को चुनें. 78f5eb9f2f82f1b0.png
  3. 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"
}
  1. इसके बाद, main.tf फ़ाइल खोलें. हम यहां बताए गए तरीके से अलग-अलग कार्रवाइयां करने के लिए, कुछ terraform कोड जोड़ने जा रहे हैं.

एपीआई चालू करना

resource "google_project_service" "default"

VPC बनाना

resource "google_compute_network" "default"

फ़ायरवॉल के नियम जोड़ना

resource "google_compute_firewall" "allow_icmp"

पीएसए रेंज बनाना

resource "google_compute_global_address" "psa_range"

पियरिंग बनाना

resource "google_service_networking_connection" "private_connection"

  1. यहां दिए गए कोड को कॉपी करके, main .tf फ़ाइल में चिपकाएं.
resource "google_project_service" "default" {
 for_each = toset([
   "compute.googleapis.com",
   "servicenetworking.googleapis.com", 
   "sqladmin.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 = true
 mtu                     = 1460
 routing_mode            = "GLOBAL"
}

resource "google_compute_global_address" "psa_range" {
  name                  = "psa-range-${google_compute_network.default.name}"
  project               = var.project_id
  purpose               = "VPC_PEERING"
  address_type          = "INTERNAL"
  prefix_length         = 20
  address               = "172.18.0.0"
  network               = google_compute_network.default.id

}

resource "google_service_networking_connection" "private_connection" {
  network = google_compute_network.default.self_link
  service = "servicenetworking.googleapis.com"

  reserved_peering_ranges = [
    google_compute_global_address.psa_range.name,
  ]
}

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", "172.18.0.0/20"] # Include PSA range
}
  1. Cloud Shell टर्मिनल पर वापस जाएं और पक्का करें कि आप terraform-db-psc डायरेक्ट्री cd terraform-db-psc में हों. इसके बाद, ये कमांड चलाएं

terraform init

वर्किंग डायरेक्ट्री को शुरू करता है. इस चरण में, दिए गए कॉन्फ़िगरेशन के लिए ज़रूरी प्रोवाइडर डाउनलोड किए जाते हैं.

terraform plan

यह एक प्लान जनरेट करता है. इसमें यह दिखाया जाता है कि आपके इन्फ़्रास्ट्रक्चर को डिप्लॉय करने के लिए, Terraform कौनसी कार्रवाइयां करेगा.

  1. अब संसाधन बनाने के लिए, terraform apply कमांड चलाएं और चलाने के लिए yes टाइप करें.

4. दूसरा टास्क. PSA (Terraform) की मदद से CloudSQL इंस्टेंस बनाना

आइए, Terraform का इस्तेमाल करके CloudSQL इंस्टेंस बनाएं. साथ ही, कनेक्टिविटी की अनुमति देने के लिए, पीएसए विकल्प का इस्तेमाल करें. डेटाबेस प्रोजेक्ट में यह कॉन्फ़िगरेशन पूरा करें.

  1. Cloud Shell एडिटर व्यू पर स्विच करें. पक्का करें कि आप terraform-db-psc फ़ोल्डर में हों. database.tf फ़ाइल चुनें और नीचे दिया गया कोड जोड़ें.
resource "google_sql_database_instance" "default" {
  name             = "psc-psa-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 {      
      ipv4_enabled    = "false"
      private_network = google_compute_network.default.id
      
    }
  }
  deletion_protection = false 
}

resource "google_sql_user" "users" {
  name     = "testsql"
  instance = google_sql_database_instance.default.name
  password = var.db_password 
}

  1. Cloud Shell टर्मिनल पर वापस जाएं और पक्का करें कि आप terraform-db-psc डायरेक्ट्री में हों. अब संसाधन बनाने के लिए, terraform apply कमांड चलाएं और चलाने के लिए yes टाइप करें. PSA की मदद से CloudSQL इंस्टेंस बनाने में 15 से ज़्यादा मिनट लग सकते हैं.

डेटाबेस की पुष्टि करना

  1. इसके बाद, कंसोल में SQL पर जाएं और हाल ही में बनाया गया psc-psa-sql-db डेटाबेस इंस्टेंस चुनें.
  2. बाईं ओर, SQL के विकल्पों वाले स्लाइडआउट को बड़ा करें और कनेक्शन चुनें
  3. समरी टैब में, आपको कनेक्शन की जानकारी दिख सकती है.
  4. इंटरनल आईपी पता कॉपी करें और उसे अपने सिस्टम में कहीं सेव करें. जैसा कि आप देख सकते हैं, इसे उस रेंज से असाइन किया गया था जिसे हमने रिज़र्व किया था.
  5. तीसरे टास्क के पांचवें चरण को पूरा करने के लिए, आपको इस आईपी की ज़रूरत होगी.

5c00f08b0f44c957.png

  1. बाईं ओर, SQL के विकल्पों वाले स्लाइडआउट को बड़ा करें और उपयोगकर्ता चुनें.
  2. आपको testsql नाम का एक उपयोगकर्ता दिखेगा, जिसका पासवर्ड cloudsql24 होगा(इसका इस्तेमाल बाद में डीबी को ऐक्सेस करने के लिए किया जाएगा)

5. तीसरा टास्क. टेस्ट वीएम बनाएं और db प्रोजेक्ट (Terraform) से SQL इंस्टेंस से कनेक्ट करें

आइए, टेस्ट वीएम और NAT गेटवे बनाने के लिए Terraform का इस्तेमाल करें. डेटाबेस प्रोजेक्ट में यह कॉन्फ़िगरेशन पूरा करें.

  1. Cloud Shell एडिटर व्यू पर स्विच करें. पक्का करें कि आप terraform-db-psc फ़ोल्डर में हों. nat-vm.tf फ़ाइल चुनें और नीचे दिया गया कोड जोड़ें.
resource "google_compute_router" "default" {
  name    = "outbound-nat"
  region  = var.region_id
  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_instance" "sql_net_vm" {
  name         = "db-vm-test"
  machine_type = "e2-medium"
  zone         = "${var.region_id}-b"
  project      = var.project_id

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

  network_interface {
    network = google_compute_network.default.self_link
  }

  # 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 टर्मिनल पर वापस जाएं. पक्का करें कि आप terraform-db-psc डायरेक्ट्री में हों. अब संसाधन बनाने के लिए, terraform plan, then terraform apply कमांड चलाएं और चलाने के लिए yes टाइप करें. इससे, NAT गेटवे और MariaDB इंस्टॉल किया गया वीएम बन जाएगा.

डेटाबेस की पुष्टि करना

उपभोक्ता प्रोजेक्ट में यह काम पूरा करें

  1. VM इंस्टेंस पर जाएं. db-vm-test चुनें
  2. VM से कनेक्ट करने के लिए, SSH विकल्प चुनें.
  3. पहले कॉपी किए गए लोकल आईपी के ज़रिए डीबी से कनेक्ट करें. इसके लिए, इन निर्देशों का पालन करें:
mysql --host=172.18.0.2 --user=testsql --password=cloudsql24

p.s कनेक्ट करने के लिए, आईपी पते को अपने असली आईपी पर बदलें.

  1. कनेक्शन बन जाने के बाद, localvpcsqldb की मदद से डेटाबेस बनाएं.
CREATE DATABASE localvpcsqldb;
  1. इसके बाद, कनेक्शन से बाहर निकलने के लिए, 'बाहर निकलें' टाइप करें. वीएम बंद करने के लिए, exit फिर से टाइप करें.

6. चौथा टास्क. CloudSQL इंस्टेंस पर पीएससी चालू करना

कनेक्टिविटी की अनुमति देने के लिए, PSC विकल्प को चालू करने के लिए, gcloud कमांड का इस्तेमाल करें. डेटाबेस प्रोजेक्ट में यह कॉन्फ़िगरेशन पूरा करें.

  1. Cloud Shell व्यू पर स्विच करें.
  2. Cloud Shell में यह कमांड चलाएं.
  • पक्का करें YOUR_DB_PROJECT_HERE को डेटाबेस प्रोजेक्ट आईडी से बदलें.
  • पक्का करें YOUR_CONSUMER_PROJECT_HERE को उपभोक्ता प्रोजेक्ट आईडी से बदलें.
project_id=YOUR_DB_PROJECT_HERE
allowed_project=YOUR_CONSUMER_PROJECT_HERE

gcloud beta sql instances patch psc-psa-sql-db \
--project=$project_id \
--enable-private-service-connect \
--allowed-psc-projects=$allowed_project
  1. इससे, मौजूदा डेटाबेस को पीएससी अटैचमेंट के साथ अपडेट कर दिया जाएगा. इसमें 10 से ज़्यादा मिनट लगेंगे.

अगर आपको इंतज़ार करने के दौरान टाइम आउट की गड़बड़ी का मैसेज मिलता है, तो आपको प्रोग्रेस देखने का निर्देश भी मिलना चाहिए. "आपके पास `gcloud beta sql operations wait –project चलाकर, कार्रवाई के पूरा होने का इंतज़ार जारी रखने का विकल्प है "

कृपया ध्यान दें कि आपके पास नया डेटाबेस डिप्लॉय करने का विकल्प है. इसमें PSA और PSC की सुविधाएं पहले से चालू होंगी. इस डेटाबेस को शुरू से ही इस्तेमाल किया जा सकता है.

डेटाबेस की पुष्टि करना

  1. इसके बाद, कंसोल में SQL पर जाएं और psc-psa-sql-db डेटाबेस इंस्टेंस चुनें.
  2. बाईं ओर, SQL के विकल्पों वाले स्लाइडआउट को बड़ा करें और कनेक्शन चुनें
  3. समरी टैब में, आपको कनेक्शन की जानकारी दिख सकती है.
  4. सेवा के अटैचमेंट का पता कॉपी करें और उसे अपने सिस्टम में कहीं सेव करें.
  5. आपको यह जानकारी, अगले टास्क के पांचवें चरण में आठवें चरण को पूरा करने के लिए चाहिए होगी.

2cf5ce71eceea326.png

7. पांचवां टास्क. उपभोक्ता प्रोजेक्ट (Terraform) के लिए एनवायरमेंट सेट अप करना

उपभोक्ता प्रोजेक्ट में,हम फ़ायरवॉल नियमों और सबनेट के साथ कस्टम वीपीसी बनाएंगे. Cloud Console खोलें और वह प्रोजेक्ट चुनें जिसका इस्तेमाल करना है.

  1. अपने कंसोल में सबसे ऊपर, Google Cloud आइकॉन के बगल में मौजूद ड्रॉपडाउन पर क्लिक करें. इसके बाद, सभी टैब चुनें.

प्रोजेक्ट बारप्रोजेक्ट बार 2

  1. जारी रखने के लिए, सूची में दिए गए प्रोजेक्ट में से अपना उपभोक्ता प्रोजेक्ट आईडी चुनें.
  2. अपने कंसोल में सबसे ऊपर दाईं ओर मौजूद Cloud Shell खोलें. पक्का करें कि आपको Cloud Shell में उपभोक्ता प्रोजेक्ट आईडी दिख रहा हो. ऐक्सेस की अनुमति देने के लिए, किसी भी प्रॉम्प्ट की पुष्टि करें.
  3. terraform-consumer-psc नाम का फ़ोल्डर बनाएं और उसमें फ़ाइलें ले जाएं
mkdir terraform-consumer-psc  && cd terraform-consumer-psc
  1. main.tf, variable.tf, और psc.tf फ़ाइल बनाएं.
touch main.tf variable.tf psc.tf 
  1. उपभोक्ता प्रोजेक्ट आईडी के लिए, Cloud Shell एडिटर व्यू पर स्विच करें. एडिटर चुनें. साथ ही, इंटरफ़ेस लोड हो सके, इसके लिए ज़रूरी प्रॉम्प्ट को अनुमति दें.
  2. लोड होने के बाद, फ़ाइल > फ़ोल्डर खोलें पर जाएं. इसके बाद, /home/your-user-name/terraform-consumer-psc पर जाएं और फ़ोल्डर को Editor में खोलने के लिए, ठीक है को चुनें. 78f5eb9f2f82f1b0.png
  3. variable.tf फ़ाइल चुनें और नीचे दिया गया कोड जोड़ें. your-consumer-project-id-here टेक्स्ट को कोट में अपने असल उपभोक्ता प्रोजेक्ट आईडी से बदलें. your-psc-attachment-id-here टेक्स्ट को कोट में अपने पीएससी अटैचमेंट पते से बदलें. यह वह आईडी है जिसे आपने टास्क 4 के सेक्शन 5 से 7 में कॉपी किया था 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-vpc"
}

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

  1. इसके बाद, main.tf फ़ाइल खोलें. हम यहां बताए गए तरीके से अलग-अलग कार्रवाइयां करने के लिए, कुछ terraform कोड जोड़ने जा रहे हैं.

एपीआई चालू करना

resource "google_project_service"

VPC बनाना

resource "google_compute_network"

NAT गेटवे बनाना

resource "google_compute_router"
resource "google_compute_router_nat"

फ़ायरवॉल के नियम जोड़ना

resource "google_compute_firewall"

  1. यहां दिए गए कोड को कॉपी करके, main .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_pc" {
  name          = "vm-net"
  ip_cidr_range = "192.168.80.0/24"
  region        = var.region_id
  network       = google_compute_network.default.name
  project       = var.project_id
}

resource "google_compute_subnetwork" "psc_subnet_ip" {
  name          = "psc-subnet"
  ip_cidr_range = "192.168.100.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_id
  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 टर्मिनल पर वापस जाएं और पक्का करें कि आप उपभोक्ता प्रोजेक्ट में terraform-consumer-psc डायरेक्ट्री cd terraform-consumer-psc में हों. इसके बाद, ये निर्देश चलाएं

terraform init

वर्किंग डायरेक्ट्री को शुरू करता है. इस चरण में, दिए गए कॉन्फ़िगरेशन के लिए ज़रूरी प्रोवाइडर डाउनलोड किए जाते हैं.

terraform plan

यह एक प्लान जनरेट करता है. इसमें यह दिखाया जाता है कि आपके इन्फ़्रास्ट्रक्चर को डिप्लॉय करने के लिए, Terraform कौनसी कार्रवाइयां करेगा.

  1. अब संसाधन बनाने के लिए, terraform apply कमांड चलाएं और चलाने के लिए yes टाइप करें.

8. छठा टास्क. कंज्यूमर प्रोजेक्ट में SQL DB अटैचमेंट के लिए PSC एंडपॉइंट बनाएं और वीएम की जांच करें (Terraform)

उपभोक्ता प्रोजेक्ट में यह कॉन्फ़िगरेशन पूरा करें.

  1. Cloud Shell एडिटर पर वापस जाएं और terraform-consumer-psc डायरेक्ट्री खोलें. इसके बाद, psc.tf फ़ाइल चुनें. फ़ाइल में यह Terraform कोड जोड़ें. इससे एक स्टैटिक इंटरनल आईपी, पीएससी एंडपॉइंट, और Maria DB इंस्टॉल किया गया टेस्ट वीएम बन जाता है.
resource "google_compute_address" "default" {
  name = "psc-ip-1"
  region = var.region_id
  address_type = "INTERNAL"
  subnetwork = google_compute_subnetwork.psc_subnet_ip.name
  address = "192.168.100.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         = "remote-sql-test-vm"
  machine_type = "e2-medium"
  zone         = "${var.region_id}-b"
  project      = var.project_id

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

  network_interface {
    subnetwork = google_compute_subnetwork.vm_subnet_pc.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 टर्मिनल पर वापस जाएं और पक्का करें कि आप उपभोक्ता प्रोजेक्ट में terraform-consumer-psc डायरेक्ट्री cd terraform-consumer-psc में हों. इसके बाद, ये निर्देश चलाएं

terraform plan

यह एक प्लान जनरेट करता है. इसमें यह दिखाया जाता है कि आपके इन्फ़्रास्ट्रक्चर को डिप्लॉय करने के लिए, Terraform कौनसी कार्रवाइयां करेगा.

  1. अब संसाधन बनाने के लिए, terraform apply कमांड चलाएं और चलाने के लिए yes टाइप करें

9. सातवां टास्क. PSC आईपी पते की मदद से, वीएम से एंडपॉइंट कनेक्टिविटी की पुष्टि करना

उपभोक्ता प्रोजेक्ट में यह काम पूरा करें

  1. VM इंस्टेंस पर जाएं. remote-sql-test-vm चुनें
  2. VM से कनेक्ट करने के लिए, SSH विकल्प चुनें.
  3. एंडपॉइंट के ज़रिए डीबी से कनेक्ट करने के लिए, इनका इस्तेमाल करें:
mysql --host=192.168.100.100 --user=testsql --password=cloudsql24
  1. कनेक्शन बन जाने के बाद, psc-sql-db की मदद से डेटाबेस बनाएं.
CREATE DATABASE remotepscpsasqldb;
  1. इसके बाद, कनेक्शन से बाहर निकलने के लिए, 'बाहर निकलें' टाइप करें. वीएम बंद करने के लिए, exit फिर से टाइप करें.

10. आठवां टास्क. डेटाबेस एंट्री की पुष्टि करना

डेटाबेस प्रोजेक्ट में जाकर, पुष्टि की यह प्रक्रिया पूरी करें

  1. अपने कंसोल में सबसे ऊपर, Google Cloud आइकॉन के बगल में मौजूद ड्रॉपडाउन पर क्लिक करें. इसके बाद, सभी टैब चुनें.

प्रोजेक्ट बारप्रोजेक्ट बार 2

  1. जारी रखने के लिए, सूची में दिए गए प्रोजेक्ट में से अपना डेटाबेस प्रोजेक्ट आईडी चुनें.
  2. SQL पर जाएं. इसके बाद, डेटाबेस psc-psa-sql-db चुनें. इसके बाद, एसक्यूएल के विकल्पों को बड़ा करें और डेटाबेस चुनें. आपको उपभोक्ता प्रोजेक्ट के VM में, remotepscpsasqldb नाम का वह डेटाबेस दिखेगा जिसे आपने अभी बनाया है. साथ ही, आपको डेटाबेस प्रोजेक्ट के VM में localvpcsqldb भी दिखेगा**.**

36f5c03124ca20f6.png

11. क्लीन अप

उपभोक्ता प्रोजेक्ट में यह काम पूरा करना

  1. उपभोक्ता प्रोजेक्ट आईडी चुनें
  2. Cloud Shell पर जाएं और पक्का करें कि आपको उपभोक्ता प्रोजेक्ट आईडी दिख रहा हो
  3. terraform-consumer-psc डायरेक्ट्री cd terraform-consumer-psc पर जाएं और यह कमांड terraform destroy चलाएं. इसके बाद, yes टाइप करें. इससे, Terraform की मदद से आपके उपभोक्ता प्रोजेक्ट में बनाए गए सभी संसाधन हटा दिए जाएंगे.

डेटाबेस प्रोजेक्ट में यह काम पूरा करना

  1. डेटाबेस प्रोजेक्ट आईडी चुनें
  2. Cloud Shell पर जाएं और पक्का करें कि आपको डेटाबेस प्रोजेक्ट आईडी दिख रहा हो
  3. terraform-db-psc डायरेक्ट्री cd terraform-db-psc पर जाएं और नीचे दिया गया कमांड terraform destroy चलाएं. इसके बाद, yes टाइप करें. इससे, Terraform की मदद से बनाए गए आपके डीबी प्रोजेक्ट के ज़्यादातर संसाधन हट जाएंगे. हो सकता है कि सेवा नेटवर्किंग मिटाई न जा सके और गड़बड़ी का मैसेज दिखे.
  4. इसके बाद, terraform-db-psc फ़ोल्डर से ये फ़ाइलें मिटाएं.
rm -r terraform.tfstate terraform.tfstate.backup
  1. इसके बाद, कंसोल में वीपीसी नेटवर्क पर जाएं
  2. database-net वीपीसी चुनें, निजी सेवाओं का ऐक्सेस चुनें, सेवाओं के लिए तय की गई आईपी रेंज में जाकर, psa-range-database-net चुनें, और रिलीज़ करें विकल्प चुनें

e4dbfa8953c5b036.png

  1. इसके बाद, VPC नेटवर्क पीयरिंग चुनें. इसके बाद, servicenetworking-googleapis-com चुनें और मिटाएं विकल्प चुनें

4deab14044461d2d.png

  1. इसके बाद, वीपीसी नेटवर्क मिटाएं 2f4e96399b73d405.png को चुनें

12. बधाई हो

बधाई हो, आपने पीएसए और पीएससी अटैचमेंट की मदद से Cloud SQL इंस्टेंस को कॉन्फ़िगर कर लिया है. साथ ही, किसी दूसरे VPC में Private Service Connect एंडपॉइंट बना लिया है.

ज़्यादा जानें

Private Service Connect और Cloud SQL के बारे में ज़्यादा पढ़ा जा सकता है

इससे जुड़ा अन्य कोडलैब: https://codelabs.developers.google.com/codelabs/cloudsql-psc-terraform