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

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

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

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

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

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

इमेज 1.

e0e0f83704cc9d62.png

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

मकसद

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

  • सर्विस नेटवर्किंग चालू करना
  • पीएसए सेट अप करना
  • पीएसए की मदद से CloudSQL इंस्टेंस बनाना
  • पीएसए सेवा अटैचमेंट चालू करें.
  • CloudSQL डेटाबेस से कनेक्ट करने के लिए, उपभोक्ता वीपीसी में पीएससी एंडपॉइंट बनाएं
  • यह पुष्टि करें कि प्रोड्यूसर और उपभोक्ता, दोनों के वीपीसी में मौजूद टेस्ट वीएम से 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 Console में बिलिंग चालू करनी होगी, ताकि Cloud संसाधनों/एपीआई का इस्तेमाल किया जा सके. इस कोडलैब को पूरा करने में ज़्यादा समय नहीं लगेगा. इस ट्यूटोरियल के बाद बिलिंग से बचने के लिए, संसाधनों को बंद किया जा सकता है. इसके लिए, बनाए गए संसाधनों को मिटाएं या प्रोजेक्ट को मिटाएं. Google Cloud के नए उपयोगकर्ताओं को, 300 डॉलर का क्रेडिट मिलेगा. वे इसे मुफ़्त में आज़मा सकते हैं.

Cloud Shell शुरू करें

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

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

55efc1aaa7a4d3ad.png

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

7ffe5cbb04455448.png

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

3. टास्क 1. (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 एडिटर व्यू पर स्विच करें. editor को चुनें. इसके बाद, पक्का करें कि आपने सभी ज़रूरी प्रॉम्प्ट को अनुमति दी हो, ताकि इंटरफ़ेस लोड हो सके.
  2. लोड होने के बाद, फ़ाइल > फ़ोल्डर खोलें पर जाएं. इसके बाद, /home/your-user-name/terraform-db-psc पर जाएं और ठीक है को चुनें, ताकि फ़ोल्डर को एडिटर में खोला जा सके. 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 फ़ाइल खोलें. हम यहां कुछ टेराफ़ॉर्म कोड जोड़ने जा रहे हैं, ताकि नीचे बताई गई कार्रवाइयां की जा सकें.

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

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. टास्क 2. पीएसए के साथ CloudSQL इंस्टेंस बनाना (Terraform)

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

  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 टाइप करें. पीएसए के साथ CloudSQL इंस्टेंस बनाने में 15 मिनट से ज़्यादा समय लग सकता है.

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

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

5c00f08b0f44c957.png

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

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

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

  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. वीएम से कनेक्ट करने के लिए, SSH विकल्प चुनें.
  3. आपने पहले जो लोकल आईपी कॉपी किया था उसका इस्तेमाल करके, इन निर्देशों के साथ डेटाबेस से कनेक्ट करें:
mysql --host=172.18.0.2 --user=testsql --password=cloudsql24

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

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

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

कनेक्टिविटी की अनुमति देने के लिए, पीएससी विकल्प चालू करने के लिए 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 कमांड चलाएं "

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

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

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

2cf5ce71eceea326.png

7. टास्क 5. उपभोक्ता प्रोजेक्ट के लिए एनवायरमेंट सेट अप करना (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 एडिटर व्यू पर स्विच करें. editor को चुनें. इसके बाद, पक्का करें कि आपने सभी ज़रूरी प्रॉम्प्ट को अनुमति दी हो, ताकि इंटरफ़ेस लोड हो सके.
  2. लोड होने के बाद, फ़ाइल > फ़ोल्डर खोलें पर जाएं. इसके बाद, /home/your-user-name/terraform-consumer-psc पर जाएं और ठीक है को चुनें, ताकि फ़ोल्डर को एडिटर में खोला जा सके. 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 फ़ाइल खोलें. हम यहां कुछ टेराफ़ॉर्म कोड जोड़ने जा रहे हैं, ताकि नीचे बताई गई कार्रवाइयां की जा सकें.

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

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. टास्क 6. उपयोगकर्ता प्रोजेक्ट में SQL DB अटैचमेंट के लिए PSC एंडपॉइंट बनाएं और VM (Terraform) की जांच करें

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

  1. वापस Cloud Shell एडिटर पर जाएं. इसके बाद, terraform-consumer-psc डायरेक्ट्री खोलें और psc.tf फ़ाइल चुनें. फ़ाइल में यह Terraform कोड जोड़ें. इससे एक स्टैटिक इंटरनल आईपी, एक पीएससी एंडपॉइंट, और MariaDB इंस्टॉल किया गया एक टेस्ट वीएम बनता है.
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. टास्क 7. पीएससी के आईपी पते के ज़रिए, वीएम से एंडपॉइंट कनेक्टिविटी की पुष्टि करना

इसे उपभोक्ता प्रोजेक्ट में पूरा करें

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

10. टास्क 8. डेटाबेस में एंट्री की पुष्टि करना

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

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

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

  1. सूची में दिए गए प्रोजेक्ट में से, जारी रखने के लिए अपना डेटाबेस प्रोजेक्ट आईडी चुनें.
  2. SQL पर जाएं. इसके बाद, डेटाबेस psc-psa-sql-db चुनें. SQL के विकल्पों को बड़ा करें और डेटाबेस चुनें. आपको अभी बनाया गया डेटाबेस, remotepscpsasqldb.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 वीपीसी चुनें. इसके बाद, PRIVATE SERVICES ACCESS को चुनें. Allocated IP Ranges for Services में जाकर, psa-range-database-net को चुनें. इसके बाद, Release विकल्प को चुनें

e4dbfa8953c5b036.png

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

4deab14044461d2d.png

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

12. बधाई हो

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

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

Private Service Connect और Cloud SQL के बारे में ज़्यादा जानें

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