ক্লাউড এসকিউএল-এর সাথে সংযুক্ত হচ্ছে: কম্পিউট ইঞ্জিন, প্রাইভেট আইপি এবং ক্লাউড এসকিউএল প্রক্সি

1. ভূমিকা

শেষ আপডেট: ২০২১-০৫-০৬

সংযোগ সম্পর্কে ভাবছি

অনেক ধরণের অ্যাপ্লিকেশন এবং ফ্রেমওয়ার্ক রয়েছে। এই কোডল্যাবে, আমরা ক্লাউড SQL প্রক্সি ব্যবহার করে একটি অভ্যন্তরীণ প্রাইভেট IP ঠিকানার মাধ্যমে Google Compute Engine-এর একটি পরিচালিত ভার্চুয়াল মেশিনে চালানো একটি অ্যাপ্লিকেশন থেকে ক্লাউড SQL-এর সাথে সংযোগ স্থাপনের বিষয়গুলি আলোচনা করব। এটি ক্লাউডে একটি স্টেটফুল অ্যাপ্লিকেশন চালানোর একটি অবিশ্বাস্যভাবে নিরাপদ উপায়। আপনি শুধুমাত্র একটি প্রাইভেট IP ব্যবহার করে এবং আপনার জন্য SSL সংযোগ পরিচালনা করে এমন SQL প্রক্সি ব্যবহার করে ইন্টারনেটে আপনার এক্সপোজার কমিয়ে আনছেন।

এর জন্য একটি সাধারণ ব্যবহার-ক্ষেত্র হল, উদাহরণস্বরূপ, একটি অন-প্রিমিস অ্যাপ্লিকেশন যা স্থানীয়ভাবে চালানোর পরিবর্তে ক্লাউডে চালানোর জন্য স্থানান্তরিত করা হয়েছে।

তুমি কী তৈরি করবে

এই কোডল্যাবটি খুবই ন্যূনতম। এর ধারণা হল অ্যাপ্লিকেশন সম্পর্কে খুব বেশি চিন্তা না করে সংযোগের সমস্ত বিষয়ের উপর আপনাকে আলোকপাত করা। একটি নিখুঁত বিশ্বে, ক্লাউড এসকিউএল-এর সাথে সংযোগ স্থাপন করা ঠিক অন্য কোনও এসকিউএল ডাটাবেসের সাথে সংযোগ স্থাপনের মতো, তাই আপনি এই কোডল্যাবে যা তৈরি করবেন তা গ্রহণ করতে এবং যেকোনো প্রোডাকশন অ্যাপ্লিকেশনে প্রয়োগ করতে সক্ষম হবেন।

নির্দেশাবলীতে GCP কনসোলে কাজ করার একটি ওয়াক-থ্রু অন্তর্ভুক্ত থাকবে, পাশাপাশি CLI বা অটোমেশনে ব্যবহারের জন্য gcloud কমান্ডের সমতুল্যগুলিও অন্তর্ভুক্ত থাকবে।

পৃথক পদক্ষেপগুলি হল:

  • ক্লাউড SQL ইনস্ট্যান্সের সাথে সংযোগ সক্ষম করতে একটি ন্যূনতম পরিষেবা অ্যাকাউন্ট তৈরি করুন
  • গুগল কম্পিউট ইঞ্জিন (GCE) তে একটি ভিএম তৈরি করুন
  • একটি ক্লাউড SQL ইনস্ট্যান্স তৈরি করুন (এই টিউটোরিয়ালটি Postgres ব্যবহার করে, কিন্তু MySQL বা SQL সার্ভারের জন্য একইভাবে কাজ করে)
  • GCE ইনস্ট্যান্সে ক্লাউড SQL প্রক্সি ডাউনলোড করে চালান।

তোমার যা লাগবে

  • একটি GCP অ্যাকাউন্ট যার উপর API সক্রিয় করার এবং পরিষেবা তৈরি করার অনুমতি রয়েছে

২. একটি পরিষেবা অ্যাকাউন্ট তৈরি করুন

আপনার GCP প্রকল্পের মধ্যে বিভিন্ন পরিষেবা ব্যবহারের অনুমতি প্রদানের জন্য পরিষেবা অ্যাকাউন্ট ব্যবহার করা হয়। এই কোডল্যাবের জন্য, আমাদের ক্লাউড SQL প্রক্সিকে আমাদের ক্লাউড SQL ইনস্ট্যান্সের সাথে সংযোগ করার অনুমতি প্রদানের জন্য আমাদের একটি প্রয়োজন।

কনসোলে

IAM পরিষেবা অ্যাকাউন্ট পৃষ্ঠায় যান এবং ক্লিক করুন f8393a08b37a422c.png সম্পর্কে পৃষ্ঠার উপরে বোতাম।

আপনার পরিষেবা অ্যাকাউন্টকে একটি অনন্য নাম এবং আইডি দিন এবং তৈরি করুন ক্লিক করুন।

পরবর্তী পৃষ্ঠায়, Select a role এর ড্রপ-ডাউনে ক্লিক করুন। "Cloud SQL" ফিল্টার করুন এবং Cloud SQL Client role নির্বাচন করুন। CONTINUE এ ক্লিক করুন।

সম্পন্ন ক্লিক করুন।

জিক্লাউড ব্যবহার করা হচ্ছে

পরিষেবা অ্যাকাউন্ট তৈরি করুন:

gcloud iam service-accounts create <SERVICE_ACCOUNT_NAME> --display-name "<SERVICE_ACCOUNT_NAME> service account"

এটি পরিষেবা অ্যাকাউন্ট তৈরি করে, কিন্তু বর্তমানে এটিতে কোনও ভূমিকা/অনুমতি নির্ধারিত নেই। উপযুক্ত ভূমিকা নির্ধারণ করতে, চালান:

gcloud projects add-iam-policy-binding <GCP PROJECT ID> --member serviceAccount:<SERVICE_ACCOUNT_NAME>@<GCP PROJECT ID>.iam.gserviceaccount.com --role roles/cloudsql.client

উদাহরণস্বরূপ, যদি আপনার পরিষেবা অ্যাকাউন্টটি তৈরি করার সময় sa-test নামে পরিচিত হয় এবং আপনার প্রকল্পটি my-project-test হয় তবে কমান্ডটি হবে:

gcloud projects add-iam-policy-binding my-project-test --member serviceAccount:sa-test@my-project-test.iam.gserviceaccount.com --role roles/cloudsql.client
gcloud iam service-accounts keys create service-account.json --iam-account <SERVICE_ACCOUNT_NAME>@<GCP PROJECT ID>.iam.gserviceaccount.com

৩. কম্পিউট ইঞ্জিন ভিএম তৈরি করা

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

কনসোলে

গুগল কম্পিউট ইঞ্জিন পৃষ্ঠায় যান এবং ক্লিক করুন 77c46cd1f51bed5c.png সম্পর্কে বোতাম।

এখানে অনেকগুলি বিকল্প রয়েছে, আপনাকে কেবল নিম্নলিখিতগুলি করতে হবে:

  1. আপনার উদাহরণের একটি নাম দিন
  2. Machine type f1-micro তে পরিবর্তন করুন।
  3. আইডেন্টিটি অ্যান্ড এপিআই অ্যাক্সেসের অধীনে, Service account ড্রপডাউনটি Default compute service account থেকে আগের ধাপে তৈরি করা অ্যাকাউন্টে পরিবর্তন করুন।
  4. পৃষ্ঠার নীচের দিকে তৈরি করুন-এ ক্লিক করুন

জিক্লাউড ব্যবহার করা হচ্ছে

পরিষেবা অ্যাকাউন্টটি আপনার আগে তৈরি করা পরিষেবা অ্যাকাউন্টের পুরো নাম, তাই এটি এই ফর্ম্যাটে থাকবে: <NAME>@<PROJECT>.iam.gserviceaccount.com

gcloud compute instances create <INSTANCE NAME> --machine-type=f1-micro --zone=us-central1-b --service-account=<SERVICE ACCOUNT FULL NAME>
gcloud compute zones list

৪. ক্লাউড এসকিউএল ইনস্ট্যান্স তৈরি করা

ক্লাউড এসকিউএল হল আমাদের পরিচালিত রিলেশনাল ডাটাবেস। এটি মাইএসকিউএল, পোস্টগ্রেএসকিউএল এবং এসকিউএল সার্ভার সমর্থন করে। এই কোডল্যাবের জন্য, আমরা একটি পোস্টগ্রেস ডাটাবেস তৈরি করব, তবে তিনটির জন্যই নির্দেশাবলী একই রকম।

কনসোলে

ক্লাউড SQL পৃষ্ঠায় যান, এবং ক্লিক করুন 241836b315e11bf5.png সম্পর্কে বোতাম।

আমি যেমন উল্লেখ করেছি, এই কোডল্যাবের বেশিরভাগই যেকোনো SQL ফ্লেভারের জন্য জেনেরিক, কিন্তু এই কোডল্যাবের জন্য, PostgreSQL বেছে নিন।

  1. আপনার উদাহরণটিকে একটি আইডি দিন
  2. ডিফল্ট ব্যবহারকারীর জন্য একটি পাসওয়ার্ড লিখুন (নির্বাচিত ডেটাবেসের জন্য ব্যবহারকারীর নাম ডিফল্ট হবে, যেমন MySQL এর জন্য root অথবা PostgreSQL এর জন্য postgres )
  3. যদি আপনি আপনার কম্পিউট ইনস্ট্যান্সের অঞ্চল পরিবর্তন করে থাকেন, তাহলে আপনার এখানে অঞ্চলটিও পরিবর্তন করা উচিত যাতে এটি মিলিত হয়।
  4. নিচে স্ক্রোল করুন এবং show configuration options ক্লিক করুন।
  5. Connectivity বিভাগটি প্রসারিত করুন
  6. Public IP বিকল্পটি আনচেক করুন এবং Private IP চেকবক্সটি চেক করুন।
  7. প্রাইভেট আইপি চেক করার সময় যে ড্রপডাউনটি প্রদর্শিত হবে তাতে নিশ্চিত করুন যে default নির্বাচন করা আছে।
  8. নিচে স্ক্রোল করুন এবং তৈরি করুন এ ক্লিক করুন

সাধারণত, ইনস্ট্যান্সটি শুরু হতে কয়েক মিনিট সময় লাগে।

জিক্লাউড ব্যবহার করা হচ্ছে

যেহেতু এখান থেকে API সক্রিয় করার জন্য আমাদের কাছে কোনও ভালো প্রম্পট নেই, তাই আমাদের এটি ম্যানুয়ালি করতে হবে।

gcloud services enable servicenetworking.googleapis.com

এরপর, আমাদের ডিফল্ট VPC নেটওয়ার্কে ব্যক্তিগত পরিষেবা সংযোগ সক্ষম করতে হবে। এটি করার প্রথম ধাপ হল আমাদের উদাহরণের জন্য ব্যবহার করার জন্য একটি নির্দিষ্ট IP ঠিকানা বরাদ্দ করা।

gcloud compute addresses create sql-codelab-allocation --global --purpose=VPC_PEERING --prefix-length=24 --network=default

এরপরের কাজ হল আমাদের অভ্যন্তরীণ পরিষেবাগুলিতে সেই পরিসরের আইপিগুলি বরাদ্দ করা (এতে প্রায় এক মিনিট সময় লাগে)।

gcloud services vpc-peerings update --service=servicenetworking.googleapis.com  --network=default     --project=<PROJECT ID> --ranges=sql-codelab-allocation --force

এবং পরিশেষে, ইনস্ট্যান্স তৈরি করা বর্তমানে শুধুমাত্র বিটা ভার্সনের সাথেই উপলব্ধ। --no-assign-ip এবং --network=default এর সমন্বয়ই প্রাইভেট আইপি সংযোগ সক্ষম করে। বর্তমানে, একই সময়ে প্রাইভেট আইপি এবং পাবলিক আইপি উভয়ই সক্ষম করার কোনও উপায় নেই, তাই যদি আপনার পাবলিক অ্যাক্সেসের প্রয়োজন হয়, তাহলে তৈরির পরে আপনাকে ইনস্ট্যান্সটি সম্পাদনা করতে হবে। এটি সম্পূর্ণ হতে কয়েক মিনিট সময় লাগে।

gcloud beta sql instances create test-sql-codelab-00 --no-assign-ip --database-version=POSTGRES_11 --tier=db-f1-micro --region=us-central1 --network=default --root-password=<PASSWORD>

৫. ক্লাউড এসকিউএল প্রক্সি সেটআপ এবং রান করুন

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

কনসোলে

এখানে যান এবং আপনার ক্লাউড SQL ইনস্ট্যান্সের নামে ক্লিক করুন।

একটু নিচে স্ক্রোল করুন, এবং পরে ব্যবহারের জন্য কোথাও Connection name অনুলিপি করুন।

গুগল কম্পিউট ইঞ্জিনের ইনস্ট্যান্স তালিকার পৃষ্ঠায় যান এবং আপনার ভিএম সহ সারিটি খুঁজুন।

Connect কলামে, SSH বোতামে ক্লিক করুন এবং এটি একটি পৃথক উইন্ডো খুলবে যা ভার্চুয়াল মেশিনের সাথে নিরাপদে সংযোগ স্থাপন করবে।

বাকি নির্দেশাবলীর জন্য Using gcloud বিভাগটি অতিক্রম করুন কারণ এটি উভয়ের জন্যই একই।

জিক্লাউড ব্যবহার করা হচ্ছে

<INSTANCE NAME> এর পরিবর্তে আপনার ক্লাউড SQL ইনস্ট্যান্সের নাম দিন:

gcloud sql instances describe <INSTANCE NAME> | grep connectionName

পরবর্তীতে ব্যবহারের জন্য ইনস্ট্যান্স সংযোগের নামটি সংরক্ষণ করুন।

আপনাকে <ZONE> কে সেই জোন দিয়ে প্রতিস্থাপন করতে হবে যা আপনি ইনস্ট্যান্স তৈরি করার সময় ব্যবহার করেছিলেন। যদি আপনি এটি পরিবর্তন না করে থাকেন, তাহলে এটি us-central1-b তে সেট করা হয়েছে। এবং <INSTANCE_NAME> কে পূর্বে যা উল্লেখ করেছেন তা দিয়ে প্রতিস্থাপন করুন।

gcloud compute ssh --zone <ZONE> <INSTANCE_NAME>

একবার VM-এর সাথে সংযুক্ত হলে

প্রথমে, আমাদের প্রক্সি ডাউনলোড করতে হবে। এটি আপনার অপারেটিং সিস্টেমের উপর নির্ভর করে। যদি আপনি VM তৈরিতে OS পরিবর্তন না করে থাকেন, তাহলে এটি Linux হবে এবং আপনি ব্যবহার করতে পারেন:

wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -O cloud_sql_proxy && chmod +x cloud_sql_proxy

যদি আপনি অপারেটিং সিস্টেমটি পরিবর্তন করে থাকেন, তাহলে আপনার OS এর জন্য প্রক্সি পেতে সঠিক কমান্ডের জন্য এখানে যেতে পারেন।

প্রক্সি চালানোর জন্য, ক্লাউড SQL ইনস্ট্যান্স বিবরণ থেকে কপি করা ইনস্ট্যান্স সংযোগের নামটি <INSTANCE_CONNECTION_NAME> প্রতিস্থাপন করুন। এছাড়াও মনে রাখবেন, যদি আপনি Postgres db ব্যবহার না করেন, অথবা আপনি যে ডিফল্ট পোর্টে db শুনছেন তা পরিবর্তন করে থাকেন তবে tcp পোর্ট নম্বরটি পরিবর্তন হতে পারে।

./cloud_sql_proxy -instances=<INSTANCE_CONNECTION_NAME>=tcp:5432 &

৬. সংযোগ পরীক্ষা করুন এবং শেষ করুন

আগেই উল্লেখ করা হয়েছে, যদি আপনার কাছে এমন কোনও অ্যাপ্লিকেশন থাকে যা আপনি GCE ইনস্ট্যান্সে পরীক্ষা করার জন্য দাঁড়াতে চান, তবে অবশ্যই তা ঠিক আছে। এই কোডল্যাবের জন্য, আমরা psql ইনস্টল করব এবং সেই ক্লায়েন্টটি ব্যবহার করে যাচাই করব যে আমরা আমাদের ডাটাবেসের সাথে সংযোগ করতে পারি।

VM-তে SSH সেশন থেকে:

sudo apt-get install postgresql-client
psql "host=127.0.0.1 port=5432 sslmode=disable user=postgres"

তারপর ক্লাউড SQL ইনস্ট্যান্স তৈরি করার সময় আপনার সেট আপ করা ডিফল্ট ব্যবহারকারীর পাসওয়ার্ড নির্দিষ্ট করুন।

অভিনন্দন! যদি সবকিছু ঠিকঠাক থাকে, তাহলে আপনার কাছে Postgres প্রম্পট থাকা উচিত এবং আপনি আপনার ডাটাবেসের বিরুদ্ধে কমান্ড চালাতে পারবেন।

এরপর কী?

এই কোডল্যাবগুলির কিছু দেখুন...

রেফারেন্স ডক্স