PSA (Terraform) চলমান বিদ্যমান ক্লাউড SQL ইন্সট্যান্সে ব্যক্তিগত পরিষেবা সংযোগ সক্ষম করুন

১. সংক্ষিপ্ত বিবরণ

অন্য কোনো প্রজেক্ট বা ভিপিসি নেটওয়ার্ক থেকে একটি প্রাইভেট ক্লাউড এসকিউএল ইনস্ট্যান্সে সংযোগ করার জন্য বেশ কয়েকটি উপায় রয়েছে। প্রাইভেট কানেকশনের মাধ্যমে গুগল এবং থার্ড-পার্টি সার্ভিসগুলোর অভ্যন্তরীণ আইপি অ্যাড্রেসে পৌঁছানোর জন্য আপনি প্রাইভেট সার্ভিসেস অ্যাক্সেস (পিএসএ) ব্যবহার করতে পারেন। ডেটাবেসে অ্যাক্সেস আরও প্রসারিত করতে আপনি এখন প্রাইভেট সার্ভিস কানেক্ট (পিএসসি)-ও চালু করতে পারেন।

প্রাইভেট সার্ভিস কানেক্ট (PSC) পরিষেবা প্রদানকারীদেরকে সার্ভিস অ্যাটাচমেন্টের মাধ্যমে তাদের পরিষেবাগুলো উন্মুক্ত করার সুযোগ দেয়, যা ব্যবহার করে গ্রাহকরা তাদের নিজস্ব পরিবেশে PSC এন্ডপয়েন্ট এবং/অথবা PSC ব্যাকএন্ড তৈরি করতে পারে। এই PSC এন্ডপয়েন্টগুলোর মাধ্যমে তারা ব্যবহারকারী-নির্দিষ্ট একটি প্রাইভেট আইপি ব্যবহার করে পরিষেবা প্রদানকারীর পরিষেবাগুলোর সাথে সংযোগ স্থাপন করতে পারে।

এই ল্যাবে আপনি অপশনটি কনফিগার ও পরীক্ষা করতে পারবেন।

এই ল্যাবে, আপনারা একটি সরল আর্কিটেকচার তৈরি করবেন যা CloudSQL-এর সাথে PSA ও PSC এন্ডপয়েন্ট অ্যাক্সেসের ব্যবহার প্রদর্শন করবে।

চিত্র ১।

e0e0f83704cc9d62.png

এই ল্যাবের জন্য আপনার দুটি প্রজেক্ট অথবা একই প্রজেক্টের মধ্যে আলাদা ভিপিসি (VPC) প্রয়োজন হবে

উদ্দেশ্য

এই ল্যাবে তোমরা নিম্নলিখিত কাজটি কীভাবে সম্পাদন করতে হয় তা শিখবে:

  • পরিষেবা নেটওয়ার্কিং সক্ষম করুন
  • পিএসএ সেট আপ করুন
  • PSA দিয়ে একটি CloudSQL ইনস্ট্যান্স তৈরি করুন
  • পিএসসি পরিষেবা সংযুক্তি সক্রিয় করুন।
  • CloudSQL ডেটাবেসে সংযোগ করার জন্য কনজিউমার VPC-তে একটি PSC এন্ডপয়েন্ট তৈরি করুন।
  • প্রডিউসার এবং কনজিউমার উভয় VPC-তেই টেস্ট VM থেকে SQL ডাটাবেসে অ্যাক্সেস যাচাই করুন।

২. সেটআপ এবং প্রয়োজনীয়তা

স্ব-গতিতে পরিবেশ সেটআপ

  1. Google Cloud Console- এ সাইন-ইন করুন এবং একটি নতুন প্রজেক্ট তৈরি করুন অথবা বিদ্যমান কোনো প্রজেক্ট পুনরায় ব্যবহার করুন। যদি আপনার আগে থেকে Gmail বা Google Workspace অ্যাকাউন্ট না থাকে, তবে আপনাকে অবশ্যই একটি তৈরি করতে হবে।

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • প্রজেক্টের নামটি হলো এই প্রজেক্টের অংশগ্রহণকারীদের প্রদর্শিত নাম। এটি একটি ক্যারেক্টার স্ট্রিং যা গুগল এপিআই ব্যবহার করে না। আপনি যেকোনো সময় এটি আপডেট করতে পারেন।
  • প্রজেক্ট আইডি সমস্ত গুগল ক্লাউড প্রজেক্ট জুড়ে অনন্য এবং অপরিবর্তনীয় (একবার সেট করার পর এটি পরিবর্তন করা যায় না)। ক্লাউড কনসোল স্বয়ংক্রিয়ভাবে একটি অনন্য স্ট্রিং তৈরি করে; সাধারণত এটি কী তা নিয়ে আপনার মাথা ঘামানোর দরকার নেই। বেশিরভাগ কোডল্যাবে, আপনাকে আপনার প্রজেক্ট আইডি উল্লেখ করতে হবে (যা সাধারণত PROJECT_ID হিসাবে চিহ্নিত করা হয়)। তৈরি করা আইডিটি আপনার পছন্দ না হলে, আপনি এলোমেলোভাবে আরেকটি তৈরি করতে পারেন। বিকল্পভাবে, আপনি আপনার নিজের আইডি দিয়ে চেষ্টা করে দেখতে পারেন যে সেটি উপলব্ধ আছে কিনা। এই ধাপের পরে এটি পরিবর্তন করা যাবে না এবং প্রজেক্টের পুরো সময়কাল জুড়ে এটি অপরিবর্তিত থাকবে।
  • আপনার অবগতির জন্য জানাচ্ছি যে, তৃতীয় একটি ভ্যালু রয়েছে, যা হলো প্রজেক্ট নম্বর , এবং কিছু এপিআই এটি ব্যবহার করে থাকে। ডকুমেন্টেশনে এই তিনটি ভ্যালু সম্পর্কে আরও বিস্তারিত জানুন।
  1. এরপর, ক্লাউড রিসোর্স/এপিআই ব্যবহার করার জন্য আপনাকে ক্লাউড কনসোলে বিলিং চালু করতে হবে। এই কোডল্যাবটি সম্পন্ন করতে খুব বেশি খরচ হবে না, এমনকি আদৌ কোনো খরচ নাও হতে পারে। এই টিউটোরিয়ালের পর বিলিং এড়াতে রিসোর্সগুলো বন্ধ করার জন্য, আপনি আপনার তৈরি করা রিসোর্সগুলো অথবা প্রজেক্টটি ডিলিট করে দিতে পারেন। নতুন গুগল ক্লাউড ব্যবহারকারীরা ৩০০ মার্কিন ডলারের ফ্রি ট্রায়াল প্রোগ্রামের জন্য যোগ্য।

ক্লাউড শেল শুরু করুন

যদিও গুগল ক্লাউড আপনার ল্যাপটপ থেকে দূরবর্তীভাবে পরিচালনা করা যায়, এই কোডল্যাবে আপনি গুগল ক্লাউড শেল ব্যবহার করবেন, যা ক্লাউডে চালিত একটি কমান্ড লাইন পরিবেশ।

গুগল ক্লাউড কনসোল থেকে, উপরের ডানদিকের টুলবারে থাকা ক্লাউড শেল আইকনটিতে ক্লিক করুন:

55efc1aaa7a4d3ad.png

পরিবেশটি প্রস্তুত করতে এবং এর সাথে সংযোগ স্থাপন করতে মাত্র কয়েক মুহূর্ত সময় লাগবে। এটি শেষ হলে, আপনি এইরকম কিছু দেখতে পাবেন:

7ffe5cbb04455448.png

এই ভার্চুয়াল মেশিনটিতে আপনার প্রয়োজনীয় সমস্ত ডেভেলপমেন্ট টুলস লোড করা আছে। এটি একটি স্থায়ী ৫ জিবি হোম ডিরেক্টরি প্রদান করে এবং গুগল ক্লাউডে চলে, যা নেটওয়ার্ক পারফরম্যান্স ও অথেনটিকেশনকে ব্যাপকভাবে উন্নত করে। এই কোডল্যাবে আপনার সমস্ত কাজ একটি ব্রাউজারের মধ্যেই করা যাবে। আপনাকে কিছুই ইনস্টল করতে হবে না।

৩. কাজ ১. (টেরাফর্ম) ব্যবহার করে ডাটাবেস প্রোজেক্টের জন্য পরিবেশ প্রস্তুত করুন।

ডাটাবেস প্রজেক্টে, আমরা সার্ভিস নেটওয়ার্কিং সক্ষম করব, একটি VPC তৈরি করব, একটি PSA রেঞ্জ তৈরি করব, একটি সার্ভিস নেটওয়ার্কিং পিয়ারিং তৈরি করব এবং ফায়ারওয়াল নিয়ম তৈরি করব। ক্লাউড কনসোল খুলুন এবং ডাটাবেসের জন্য আপনি যে প্রজেক্টটি ব্যবহার করবেন সেটি নির্বাচন করুন।

  1. আপনার কনসোলের উপরে ডানদিকে অবস্থিত ক্লাউড শেল খুলুন, নিশ্চিত করুন যে আপনি ক্লাউড শেলে ডাটাবেস প্রজেক্টের জন্য ডাটাবেস প্রজেক্ট আইডি দেখতে পাচ্ছেন, অ্যাক্সেসের অনুমতি দেওয়ার জন্য যেকোনো প্রম্পট নিশ্চিত করুন। 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. ক্লাউড শেল এডিটর ভিউতে যান। এডিটর নির্বাচন করুন, এবং ইন্টারফেসটি লোড হওয়ার জন্য প্রয়োজনীয় প্রম্পটগুলোতে অনুমতি দিন।
  2. লোড হয়ে গেলে, ফাইল > ওপেন ফোল্ডার-এ যান এবং /home/your-user-name/terraform-db-psc- তে গিয়ে এডিটরে ফোল্ডারটি খোলার জন্য Ok নির্বাচন করুন। 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"

ভিপিসি তৈরি করুন

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. নিচের অংশটি মূল .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. ক্লাউড শেল টার্মিনালে ফিরে যান, নিশ্চিত করুন যে আপনি terraform-db-psc ডিরেক্টরিতে আছেন cd terraform-db-psc এবং নিম্নলিখিত কমান্ডগুলি চালান।

terraform init

ওয়ার্কিং ডিরেক্টরি প্রস্তুত করে। এই ধাপে প্রদত্ত কনফিগারেশনের জন্য প্রয়োজনীয় প্রোভাইডারগুলো ডাউনলোড করা হয়।

terraform plan

একটি এক্সিকিউশন প্ল্যান তৈরি করে, যা দেখায় আপনার ইনফ্রাস্ট্রাকচার ডেপ্লয় করতে Terraform কী কী পদক্ষেপ নেবে।

  1. এখন রিসোর্সগুলো তৈরি করতে terraform apply কমান্ডটি চালান এবং রান করার জন্য yes টাইপ করুন।

৪. কাজ ২. PSA (টেরাফর্ম) ব্যবহার করে ক্লাউডএসকিউএল ইনস্ট্যান্স তৈরি করুন

চলুন, কানেক্টিভিটি অনুমোদনের জন্য PSA অপশনসহ Terraform ব্যবহার করে একটি CloudSQL ইনস্ট্যান্স তৈরি করি। ডাটাবেস প্রজেক্টে এই কনফিগারেশনটি সম্পূর্ণ করুন।

  1. ক্লাউড শেল এডিটর ভিউতে যান। নিশ্চিত করুন যে আপনি 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. ক্লাউড শেল টার্মিনালে ফিরে যান এবং নিশ্চিত করুন যে আপনি terraform-db-psc ডিরেক্টরিতে আছেন। এখন রিসোর্সগুলো তৈরি করতে terraform apply কমান্ডটি চালান এবং রান করার জন্য yes টাইপ করুন। PSA সহ CloudSQL ইনস্ট্যান্স তৈরি হতে ১৫ মিনিটের বেশি সময় লাগতে পারে।

ডাটাবেস যাচাই করুন

  1. সম্পন্ন হলে, কনসোলের SQL- এ গিয়ে নতুন তৈরি করা psc-psa-sql-db ডাটাবেস ইনস্ট্যান্সটি নির্বাচন করুন।
  2. বাম দিকে SQL অপশন স্লাইডআউটটি প্রসারিত করুন এবং Connections নির্বাচন করুন।
  3. সারাংশ ট্যাবের অধীনে আপনি সংযোগ সম্পর্কিত তথ্য দেখতে পাবেন।
  4. ইন্টারনাল আইপি অ্যাড্রেসটি কপি করে আপনার সিস্টেমের কোনো এক জায়গায় সংরক্ষণ করুন। আপনি দেখতেই পাচ্ছেন, এটি আমাদের সংরক্ষিত রেঞ্জ থেকেই বরাদ্দ করা হয়েছে।
  5. টাস্ক ৩-এর ধাপ ৫ সম্পন্ন করতে আপনার এই আইপি-টি প্রয়োজন হবে।

5c00f08b0f44c957.png

  1. বাম দিকে SQL অপশন স্লাইডআউটটি প্রসারিত করুন এবং Users নির্বাচন করুন।
  2. আপনি testsql নামের একজন ব্যবহারকারীকে দেখতে পাবেন যার পাসওয়ার্ড cloudsql24 (এটি পরবর্তীতে ডেটাবেস অ্যাক্সেস করতে ব্যবহৃত হবে)।

৫. কাজ ৩. একটি টেস্ট ভিএম তৈরি করুন এবং ডিবি প্রজেক্টের (টেরাফর্ম) ভেতর থেকে এসকিউএল ইনস্ট্যান্সে সংযোগ স্থাপন করুন।

চলুন Terraform ব্যবহার করে একটি টেস্ট ভিএম এবং ন্যাট গেটওয়ে তৈরি করি। ডাটাবেস প্রজেক্টে এই কনফিগারেশনটি সম্পূর্ণ করুন।

  1. ক্লাউড শেল এডিটর ভিউতে যান। নিশ্চিত করুন যে আপনি 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. ক্লাউড শেল টার্মিনালে ফিরে যান এবং নিশ্চিত করুন যে আপনি terraform-db-psc ডিরেক্টরিতে আছেন। এখন রিসোর্স তৈরি করতে terraform plan, then terraform apply কমান্ডটি চালান এবং রান করার জন্য yes টাইপ করুন। এটি একটি NAT গেটওয়ে এবং MariaDB ইনস্টল করা একটি VM তৈরি করবে।

ডাটাবেস যাচাই করুন

ভোক্তা প্রকল্পে এটি সম্পূর্ণ করুন।

  1. ভিএম ইনস্ট্যান্সে যান। db-vm-test নির্বাচন করুন।
  2. ভিএম-এ সংযোগ করতে SSH বিকল্পটি নির্বাচন করুন।
  3. পূর্বে কপি করা লোকাল আইপি ব্যবহার করে নিম্নলিখিত উপায়ে ডেটাবেসের সাথে সংযোগ করুন:
mysql --host=172.18.0.2 --user=testsql --password=cloudsql24

সংযোগ স্থাপনের জন্য আইপি অ্যাড্রেসটি আপনার আসল আইপি-তে পরিবর্তন করুন।

  1. সংযোগ স্থাপিত হলে, localvpcsqldb নামে একটি ডাটাবেস তৈরি করুন।
CREATE DATABASE localvpcsqldb;
  1. কাজ শেষ হলে সংযোগ বিচ্ছিন্ন করতে exit টাইপ করুন। ভিএমটি বন্ধ করতে আবার exit টাইপ করুন।

৬. কাজ ৪. CloudSQL ইনস্ট্যান্সে PSC সক্রিয় করুন

কানেক্টিভিটি চালু করার জন্য gcloud কমান্ড ব্যবহার করে PSC অপশনটি সক্রিয় করুন। ডাটাবেস প্রজেক্টে এই কনফিগারেশনটি সম্পন্ন করুন।

  1. ক্লাউড শেল ভিউতে যান।
  2. ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালান।
  • Ensure YOUR_DB_PROJECT_HERE এর জায়গায় ডাটাবেস প্রজেক্ট আইডিটি বসান।
  • Ensure 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. এটি PSC অ্যাটাচমেন্ট দিয়ে বিদ্যমান ডাটাবেস আপডেট করবে। এতে কিছুটা সময় লাগবে, ১০ মিনিটের বেশি।

যদি আপনি 'টাইমআউট ওয়েটিং' ত্রুটি পান, তবে এটি আপনাকে অগ্রগতি দেখা চালিয়ে যাওয়ার জন্য কমান্ডও দেবে। যেমন: "আপনি `gcloud beta sql operations wait –project` কমান্ডটি চালিয়ে অপারেশনটির জন্য অপেক্ষা চালিয়ে যেতে পারেন। "

অনুগ্রহ করে মনে রাখবেন, আপনি শুরু থেকেই PSA এবং PSC সক্রিয় করে একটি নতুন ডেটাবেস স্থাপন করতে পারেন

ডাটাবেস যাচাই করুন

  1. সম্পন্ন হলে, কনসোলে SQL- এ গিয়ে psc-psa-sql-db ডাটাবেস ইনস্ট্যান্সটি নির্বাচন করুন।
  2. বাম দিকে SQL অপশন স্লাইডআউটটি প্রসারিত করুন এবং Connections নির্বাচন করুন।
  3. সারাংশ ট্যাবের অধীনে আপনি সংযোগ সম্পর্কিত তথ্য দেখতে পাবেন।
  4. সার্ভিস অ্যাটাচমেন্ট অ্যাড্রেসটি কপি করে আপনার সিস্টেমের কোনো এক জায়গায় সংরক্ষণ করুন।
  5. পরবর্তী টাস্ক ৫-এর ধাপ ৮ সম্পন্ন করতে আপনার এটি প্রয়োজন হবে।

2cf5ce71eceea326.png

৭. কাজ ৫. কনজিউমার প্রজেক্টের জন্য পরিবেশ সেটআপ করুন (টেরাফর্ম)

কনজিউমার প্রজেক্টে আমরা ফায়ারওয়াল রুল ও সাবনেট সহ একটি কাস্টম ভিপিসি তৈরি করব। ক্লাউড কনসোল খুলুন এবং আপনি যে প্রজেক্টটি ব্যবহার করবেন তা নির্বাচন করুন।

  1. আপনার কনসোলের উপরে ডানদিকে গুগল ক্লাউড আইকনের পাশে, ড্রপডাউনে ক্লিক করুন এবং তারপরে অল ট্যাবটি নির্বাচন করুন।

প্রজেক্ট বারপ্রজেক্ট বার ২

  1. চালিয়ে যাওয়ার জন্য তালিকাভুক্ত প্রকল্পগুলো থেকে আপনার গ্রাহক প্রকল্প আইডি নির্বাচন করুন।
  2. আপনার কনসোলের উপরে ডানদিকে অবস্থিত ক্লাউড শেল খুলুন, নিশ্চিত করুন যে আপনি ক্লাউড শেলে কনজিউমার প্রজেক্ট আইডি দেখতে পাচ্ছেন, অ্যাক্সেসের অনুমতি দেওয়ার জন্য যেকোনো প্রম্পট নিশ্চিত করুন।
  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. কনজিউমার প্রজেক্ট আইডি-র জন্য ক্লাউড শেল এডিটর ভিউতে যান। এডিটর নির্বাচন করুন, এবং ইন্টারফেসটি লোড হওয়ার জন্য প্রয়োজনীয় প্রম্পটগুলোতে অনুমতি দিন।
  2. লোড হয়ে গেলে, ফাইল > ওপেন ফোল্ডার-এ যান এবং /home/your-user-name/terraform-consumer-psc- তে গিয়ে এডিটরে ফোল্ডারটি খোলার জন্য Ok নির্বাচন করুন। 78f5eb9f2f82f1b0.png
  3. variable.tf ফাইলটি নির্বাচন করুন এবং নিম্নলিখিতগুলি যোগ করুন। your-consumer-project-id-here লেখাটিকে উদ্ধৃতি চিহ্নের মধ্যে আপনার আসল কনজিউমার প্রজেক্ট আইডি দিয়ে প্রতিস্থাপন করুন। your-psc-attachment-id-here লেখাটিকে উদ্ধৃতি চিহ্নের মধ্যে আপনার পিএসসি অ্যাটাচমেন্ট অ্যাড্রেস দিয়ে প্রতিস্থাপন করুন। এটি সেই আইডি যা আপনি টাস্ক ৪-এর ৫-৭ সেকশনে কপি করেছিলেন। 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"

ভিপিসি তৈরি করুন

resource "google_compute_network"

NAT গেটওয়ে তৈরি করুন

resource "google_compute_router"
resource "google_compute_router_nat"

ফায়ারওয়াল নিয়ম যোগ করুন

resource "google_compute_firewall"

  1. নিচের অংশটি মূল .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. ক্লাউড শেল টার্মিনালে ফিরে যান, নিশ্চিত করুন যে আপনি terraform-consumer-psc ডিরেক্টরিতে আছেন। কনজিউমার প্রজেক্টে cd terraform-consumer-psc কমান্ডটি চালান এবং নিম্নলিখিত কমান্ডগুলি রান করুন।

terraform init

ওয়ার্কিং ডিরেক্টরি প্রস্তুত করে। এই ধাপে প্রদত্ত কনফিগারেশনের জন্য প্রয়োজনীয় প্রোভাইডারগুলো ডাউনলোড করা হয়।

terraform plan

একটি এক্সিকিউশন প্ল্যান তৈরি করে, যা দেখায় আপনার ইনফ্রাস্ট্রাকচার ডেপ্লয় করতে Terraform কী কী পদক্ষেপ নেবে।

  1. এখন রিসোর্সগুলো তৈরি করতে terraform apply কমান্ডটি চালান এবং রান করার জন্য yes টাইপ করুন।

৮. কাজ ৬. কনজিউমার প্রজেক্ট এবং টেস্ট ভিএম-এ (টেরাফর্ম) SQL DB অ্যাটাচমেন্টের জন্য PSC এন্ডপয়েন্ট তৈরি করুন।

কনজিউমার প্রোজেক্টে এই কনফিগারেশনটি সম্পূর্ণ করুন।

  1. ক্লাউড শেল এডিটরে ফিরে যান, terraform-consumer-psc ডিরেক্টরিটি খুলুন এবং psc.tf ফাইলটি নির্বাচন করুন। ফাইলটিতে নিম্নলিখিত টেরাফর্ম কোডটি যোগ করুন। এটি একটি স্ট্যাটিক ইন্টারনাল আইপি, একটি পিএসসি এন্ডপয়েন্ট এবং মারিয়া ডিবি ইনস্টল করা একটি টেস্ট ভিএম তৈরি করবে।
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. ক্লাউড শেল টার্মিনালে ফিরে যান, নিশ্চিত করুন যে আপনি terraform-consumer-psc ডিরেক্টরিতে আছেন। কনজিউমার প্রজেক্টে cd terraform-consumer-psc কমান্ডটি চালান এবং নিম্নলিখিত কমান্ডগুলি রান করুন।

terraform plan

একটি এক্সিকিউশন প্ল্যান তৈরি করে, যা দেখায় আপনার ইনফ্রাস্ট্রাকচার ডেপ্লয় করতে Terraform কী কী পদক্ষেপ নেবে।

  1. এখন রিসোর্সগুলো তৈরি করতে terraform apply কমান্ডটি চালান এবং রান করার জন্য yes টাইপ করুন।

৯. কাজ ৭. PSC IP অ্যাড্রেসের মাধ্যমে VM থেকে এন্ডপয়েন্ট কানেক্টিভিটি যাচাই করুন।

ভোক্তা প্রকল্পে এটি সম্পূর্ণ করুন।

  1. ভিএম ইনস্ট্যান্সে যান। রিমোট-এসকিউএল-টেস্ট-ভিএম নির্বাচন করুন।
  2. ভিএম-এ সংযোগ করতে SSH বিকল্পটি নির্বাচন করুন।
  3. নিম্নলিখিত এন্ডপয়েন্টের মাধ্যমে ডেটাবেসে সংযোগ করুন:
mysql --host=192.168.100.100 --user=testsql --password=cloudsql24
  1. সংযোগ স্থাপিত হলে, নিম্নলিখিত psc-sql-db ব্যবহার করে একটি ডাটাবেস তৈরি করুন।
CREATE DATABASE remotepscpsasqldb;
  1. কাজ শেষ হলে সংযোগ বিচ্ছিন্ন করতে exit টাইপ করুন। ভিএমটি বন্ধ করতে আবার exit টাইপ করুন।

১০. কাজ ৮. ডাটাবেস এন্ট্রি যাচাই করুন

ডাটাবেস প্রজেক্টে এই যাচাইকরণটি সম্পূর্ণ করুন।

  1. আপনার কনসোলের উপরে ডানদিকে গুগল ক্লাউড আইকনের পাশে, ড্রপডাউনে ক্লিক করুন এবং তারপরে অল ট্যাবটি নির্বাচন করুন।

প্রজেক্ট বারপ্রজেক্ট বার ২

  1. চালিয়ে যাওয়ার জন্য তালিকাভুক্ত প্রজেক্টগুলো থেকে আপনার ডাটাবেস প্রজেক্ট আইডি নির্বাচন করুন।
  2. SQL- এ যান, psc-psa-sql-db ডাটাবেসটি নির্বাচন করুন, SQL অপশনগুলো প্রসারিত করুন এবং Databases নির্বাচন করুন। আপনি কনজিউমার প্রজেক্ট ভিএম থেকে remotepscpsasqldb নামের আপনার সদ্য তৈরি করা ডাটাবেসটি এবং ডিবি প্রজেক্ট ভিএম থেকে localvpcsqldb নামের ডাটাবেসটিও দেখতে পাবেন .

36f5c03124ca20f6.png

১১. পরিষ্কার করা

কনজিউমার প্রজেক্টে এটি সম্পূর্ণ করুন।

  1. ভোক্তা প্রকল্প আইডি নির্বাচন করুন
  2. ক্লাউড শেলে যান এবং নিশ্চিত করুন যে আপনি কনজিউমার প্রজেক্ট আইডি দেখতে পাচ্ছেন।
  3. terraform-consumer-psc ডিরেক্টরিতে যান cd terraform-consumer-psc এবং terraform destroy কমান্ডটি চালিয়ে yes টাইপ করুন। আপনার কনজিউমার প্রজেক্টে Terraform দিয়ে তৈরি করা সমস্ত রিসোর্স মুছে ফেলা হবে।

ডাটাবেস প্রজেক্টে এটি সম্পূর্ণ করুন।

  1. ডাটাবেস প্রজেক্ট আইডি নির্বাচন করুন
  2. ক্লাউড শেলে যান এবং নিশ্চিত করুন যে আপনি ডাটাবেস প্রজেক্ট আইডি দেখতে পাচ্ছেন।
  3. terraform-db-psc ডিরেক্টরিতে যান cd terraform-db-psc এবং নিম্নলিখিত কমান্ডটি চালান: terraform destroy এবং yes টাইপ করুন। Terraform দিয়ে আপনার db প্রজেক্টে তৈরি করা বেশিরভাগ রিসোর্স মুছে যাবে। networking সার্ভিসটি হয়তো ডিলিট হবে না এবং একটি এরর দেখাতে পারে।
  4. এরপর terraform-db-psc ফোল্ডার থেকে নিম্নলিখিত ফাইলগুলো মুছে ফেলুন।
rm -r terraform.tfstate terraform.tfstate.backup
  1. এরপর কনসোলে VPC নেটওয়ার্কগুলিতে যান।
  2. database-net VPC নির্বাচন করুন , PRIVATE SERVICES ACCESS নির্বাচন করুন, Allocated IP Ranges for Services-এর অধীনে psa-range-database-net নির্বাচন করুন এবং Release অপশনটি নির্বাচন করুন।

e4dbfa8953c5b036.png

  1. এরপর VPC NETWORK PEERING নির্বাচন করুন, servicenetworking-googleapis-com নির্বাচন করুন এবং Delete বিকল্পটি নির্বাচন করুন।

4deab14044461d2d.png

  1. এরপর, ডিলিট ভিপিসি নেটওয়ার্ক নির্বাচন করুন। 2f4e96399b73d405.png

১২. অভিনন্দন

অভিনন্দন, আপনি সফলভাবে PSA এবং PSC অ্যাটাচমেন্ট সহ একটি ক্লাউড SQL ইনস্ট্যান্স কনফিগার করেছেন এবং অন্য একটি VPC-তে একটি প্রাইভেট সার্ভিস কানেক্ট এন্ডপয়েন্ট তৈরি করেছেন।

আরও জানুন

আপনি প্রাইভেট সার্ভিস কানেক্ট এবং ক্লাউড এসকিউএল সম্পর্কে আরও পড়তে পারেন।

অন্যান্য সম্পর্কিত কোডল্যাব: https://codelabs.developers.google.com/codelabs/cloudsql-psc-terraform