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

১. ভূমিকা

সর্বশেষ হালনাগাদ: ২০২১-০৫-০৬

সংযোগটি নিয়ে চিন্তা করা

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

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

আপনি যা তৈরি করবেন

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

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

পৃথক ধাপগুলো হলো:

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

আপনার যা যা লাগবে

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

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

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

কনসোলে

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

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

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

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

gcloud ব্যবহার করে

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

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 চালিয়ে সংযোগ নিশ্চিত করব।

কনসোলে

Google Compute Engine পৃষ্ঠায় যান এবং ক্লিক করুন 77c46cd1f51bed5c.png বোতাম।

এখানে অনেকগুলো বিকল্প আছে, আপনাকে শুধু এই কাজগুলো করতে হবে:

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

gcloud ব্যবহার করে

সার্ভিস অ্যাকাউন্টটি হলো আপনার পূর্বে তৈরি করা সার্ভিস অ্যাকাউন্টের পুরো নাম, তাই এটি <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. নিচে স্ক্রোল করুন এবং তৈরি করুন-এ ক্লিক করুন।

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

gcloud ব্যবহার করে

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

gcloud services enable servicenetworking.googleapis.com

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

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>

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

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

কনসোলে

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

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

Google Compute Engine ইনস্ট্যান্স তালিকা পৃষ্ঠায় যান এবং আপনার VM-টি যে সারিতে আছে, সেটি খুঁজুন।

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

বাকি নির্দেশাবলীর জন্য Using gcloud অংশটি এড়িয়ে যান, কারণ এটি উভয়ের ক্ষেত্রেই একই।

gcloud ব্যবহার করে

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

gcloud sql instances describe <INSTANCE NAME> | grep connectionName

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

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

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

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

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

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

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

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

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

৬. সংযোগ পরীক্ষা করা এবং গুছিয়ে নেওয়া

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

ভিএম-এর SSH সেশন থেকে:

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

এরপর, ক্লাউড এসকিউএল ইনস্ট্যান্স তৈরি করার সময় আপনি যে ডিফল্ট ব্যবহারকারীর পাসওয়ার্ডটি সেট করেছিলেন, সেটি উল্লেখ করুন।

অভিনন্দন! সবকিছু ঠিকঠাক থাকলে, আপনি পোস্টগ্রেস প্রম্পট দেখতে পাবেন এবং আপনার ডাটাবেসে কমান্ড চালাতে পারবেন।

এরপর কী?

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

রেফারেন্স নথি