১. সংক্ষিপ্ত বিবরণ
ক্লাউড এসকিউএল গো কানেক্টর হলো আপনার গো অ্যাপ্লিকেশনকে আপনার ক্লাউড এসকিউএল ডেটাবেসের সাথে নিরাপদে সংযুক্ত করার সবচেয়ে সহজ উপায়। ক্লাউড রান একটি সম্পূর্ণভাবে পরিচালিত সার্ভারলেস প্ল্যাটফর্ম যা আপনাকে স্টেটলেস কন্টেইনার চালাতে সক্ষম করে, যেগুলোকে HTTP অনুরোধের মাধ্যমে আহ্বান করা যায়। এই কোডল্যাবটি দেখাবে কিভাবে আইএএম অথেনটিকেশন ব্যবহার করে একটি সার্ভিস অ্যাকাউন্টের মাধ্যমে ক্লাউড রানে থাকা একটি গো অ্যাপ্লিকেশনকে ক্লাউড এসকিউএল ফর পোস্টগ্রেসকিউএল ডেটাবেসের সাথে নিরাপদে সংযুক্ত করা যায়।
আপনি যা শিখবেন
এই ল্যাবে, আপনারা নিম্নলিখিত বিষয়গুলো করতে শিখবেন:
- একটি ক্লাউড এসকিউএল ফর পোস্টগ্রেসকিউএল ডেটাবেস তৈরি করুন
- ক্লাউড রানে একটি গো অ্যাপ্লিকেশন ডিপ্লয় করুন
- Go Connector ব্যবহার করে আপনার অ্যাপ্লিকেশনটিকে Cloud SQL-এর সাথে সংযুক্ত করুন।
পূর্বশর্ত
- এই ল্যাবটি করার জন্য ক্লাউড কনসোল এবং ক্লাউড শেল পরিবেশ সম্পর্কে পূর্বপরিচিতি আছে বলে ধরে নেওয়া হচ্ছে।
২. শুরু করার আগে
ক্লাউড প্রজেক্ট সেটআপ
- গুগল ক্লাউড কনসোলে সাইন-ইন করুন এবং একটি নতুন প্রজেক্ট তৈরি করুন অথবা বিদ্যমান কোনো প্রজেক্ট পুনরায় ব্যবহার করুন। যদি আপনার আগে থেকে কোনো গুগল অ্যাকাউন্ট না থাকে, তবে আপনাকে অবশ্যই একটি তৈরি করতে হবে।



- প্রজেক্টের নামটি হলো এই প্রজেক্টের অংশগ্রহণকারীদের প্রদর্শিত নাম। এটি একটি ক্যারেক্টার স্ট্রিং যা গুগল এপিআই ব্যবহার করে না। আপনি যেকোনো সময় এটি আপডেট করতে পারেন।
- The Project ID is unique across all Google Cloud projects and is immutable (cannot be changed after it has been set). The Cloud Console auto-generates a unique string; usually you don't care what it is. In most codelabs, you'll need to reference the Project ID (it is typically identified as
PROJECT_ID). If you don't like the generated ID, you may generate another random one. Alternatively, you can try your own and see if it's available. It cannot be changed after this step and will remain for the duration of the project. - আপনার অবগতির জন্য জানাচ্ছি যে, তৃতীয় একটি ভ্যালু রয়েছে, যা হলো প্রজেক্ট নাম্বার এবং কিছু এপিআই এটি ব্যবহার করে। ডকুমেন্টেশনে এই তিনটি ভ্যালু সম্পর্কে আরও বিস্তারিত জানুন।
- এরপর, ক্লাউড রিসোর্স/এপিআই ব্যবহার করার জন্য আপনাকে ক্লাউড কনসোলে বিলিং চালু করতে হবে। এই কোডল্যাবটি সম্পন্ন করতে খুব বেশি খরচ হওয়ার কথা নয়, এমনকি আদৌ কোনো খরচ নাও হতে পারে। এই টিউটোরিয়ালের পর যাতে কোনো বিলিং না হয়, সেজন্য রিসোর্সগুলো বন্ধ করতে আপনি আপনার তৈরি করা রিসোর্সগুলো অথবা পুরো প্রজেক্টটিই ডিলিট করে দিতে পারেন। গুগল ক্লাউডের নতুন ব্যবহারকারীরা ৩০০ মার্কিন ডলারের ফ্রি ট্রায়াল প্রোগ্রামের জন্য যোগ্য।
পরিবেশ সেটআপ
সার্চ বারের ডানদিকে থাকা আইকনটিতে ক্লিক করে ক্লাউড শেল সক্রিয় করুন।

ক্লাউড শেল থেকে, এপিআইগুলো সক্রিয় করুন:
gcloud services enable compute.googleapis.com sqladmin.googleapis.com \
run.googleapis.com artifactregistry.googleapis.com \
cloudbuild.googleapis.com servicenetworking.googleapis.com
অনুমতি দিতে বলা হলে, চালিয়ে যাওয়ার জন্য 'Authorize'-এ ক্লিক করুন।

এই কমান্ডটি সম্পন্ন হতে কয়েক মিনিট সময় লাগতে পারে, কিন্তু অবশেষে এটি এইটির মতো একটি সফলতার বার্তা দেবে:
Operation "operations/acf.p2-327036483151-73d90d00-47ee-447a-b600-a6badf0eceae" finished successfully.
৩. একটি পরিষেবা অ্যাকাউন্ট তৈরি করুন
Cloud Run ব্যবহারের জন্য একটি Google Cloud পরিষেবা অ্যাকাউন্ট তৈরি ও কনফিগার করুন, যাতে Cloud SQL-এর সাথে সংযোগ করার জন্য এটির সঠিক অনুমতি থাকে।
- একটি নতুন সার্ভিস অ্যাকাউন্ট তৈরি করতে, নিচের মতো করে
gcloud iam service-accounts createকমান্ডটি চালান:gcloud iam service-accounts create quickstart-service-account \ --display-name="Quickstart Service Account" - আপনার সদ্য তৈরি করা Google Cloud পরিষেবা অ্যাকাউন্টে Cloud SQL Client রোলটি যোগ করতে, নিচের মতো করে gcloud projects add-iam-policy-binding কমান্ডটি চালান। Cloud Shell-এ,
${GOOGLE_CLOUD_PROJECT}এক্সপ্রেশনটি আপনার প্রোজেক্টের নাম দিয়ে প্রতিস্থাপিত হবে। আপনি যদি এতে বেশি স্বাচ্ছন্দ্যবোধ করেন, তবে এই প্রতিস্থাপনটি ম্যানুয়ালিও করতে পারেন।gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} \ --member="serviceAccount:quickstart-service-account@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" \ --role="roles/cloudsql.client" - আপনার সদ্য তৈরি করা Google Cloud পরিষেবা অ্যাকাউন্টে Cloud SQL Instance User রোলটি যোগ করতে, নিম্নলিখিতভাবে gcloud projects add-iam-policy-binding কমান্ডটি চালান।
gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} \ --member="serviceAccount:quickstart-service-account@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" \ --role="roles/cloudsql.instanceUser" - আপনার সদ্য তৈরি করা Google Cloud পরিষেবা অ্যাকাউন্টে Log Writer রোলটি যোগ করতে, নিম্নলিখিতভাবে gcloud projects add-iam-policy-binding কমান্ডটি চালান।
gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} \ --member="serviceAccount:quickstart-service-account@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" \ --role="roles/logging.logWriter"
৪. ক্লাউড এসকিউএল সেট আপ করুন
একটি ক্লাউড এসকিউএল ইনস্ট্যান্স তৈরি করতে gcloud sql instances create কমান্ডটি চালান।
- –database-version : ডাটাবেস ইঞ্জিনের ধরন এবং সংস্করণ। এটি নির্দিষ্ট না করা হলে, এপিআই-এর ডিফল্ট সংস্করণ ব্যবহৃত হয়। বর্তমানে উপলব্ধ সংস্করণগুলো দেখতে gcloud ডাটাবেস সংস্করণ সংক্রান্ত ডকুমেন্টেশন দেখুন।
- –cpu : মেশিনে প্রয়োজনীয় কোরের সংখ্যা।
- –memory : একটি পূর্ণসংখ্যা যা নির্দেশ করে মেশিনে কী পরিমাণ মেমরি প্রয়োজন। একটি আকারের একক উল্লেখ করতে হবে (উদাহরণস্বরূপ, 3072MB বা 9GB)। কোনো একক উল্লেখ না করা হলে, GB ধরে নেওয়া হয়।
- –region : ইনস্ট্যান্সটির আঞ্চলিক অবস্থান (উদাহরণস্বরূপ: us-central1, asia-east1, us-east1)।
- –database-flags : ফ্ল্যাগ সেট করার সুবিধা দেয়। এক্ষেত্রে, আমরা
cloudsql.iam_authenticationচালু করছি, যাতে ক্লাউড রান আমাদের পূর্বে তৈরি করা সার্ভিস অ্যাকাউন্টটি ব্যবহার করে ক্লাউড এসকিউএল-এর সাথে সংযোগ স্থাপন করতে পারে।gcloud sql instances create quickstart-instance \ --database-version=POSTGRES_14 \ --cpu=1 \ --memory=4GB \ --region=us-central1 \ --database-flags=cloudsql.iam_authentication=on
এই কমান্ডটি সম্পন্ন হতে কয়েক মিনিট সময় লাগতে পারে।
quickstart-instance মধ্যে একটি ক্লাউড এসকিউএল ডাটাবেস তৈরি করতে gcloud sql databases create কমান্ডটি চালান।
gcloud sql databases create quickstart_db \
--instance=quickstart-instance
ডাটাবেস অ্যাক্সেস করার জন্য, আপনার পূর্বে তৈরি করা সার্ভিস অ্যাকাউন্টের জন্য একটি PostgreSQL ডাটাবেস ইউজার তৈরি করুন।
gcloud sql users create quickstart-service-account@${GOOGLE_CLOUD_PROJECT}.iam \
--instance=quickstart-instance \
--type=cloud_iam_service_account
৫. আবেদনপত্র প্রস্তুত করুন।
একটি Go অ্যাপ্লিকেশন তৈরি করুন যা HTTP অনুরোধে সাড়া দেয়।
- ক্লাউড শেলে
helloworldনামে একটি নতুন ডিরেক্টরি তৈরি করুন, তারপর সেই ডিরেক্টরিতে প্রবেশ করুন:mkdir helloworld cd helloworld - একটি নতুন Go অ্যাপ্লিকেশন চালু করতে
go mod initচালান।go mod init github.com/GoogleCloudPlatform/golang-samples/run/helloworld - Cloud SQL Go Connector ডিপেন্ডেন্সিটি ইনস্টল করুন।
go get cloud.google.com/go/cloudsqlconn go get cloud.google.com/go/cloudsqlconn/postgres/pgxv4 - অ্যাপ্লিকেশন কোড দিয়ে একটি
main.goফাইল তৈরি করুন। এই কোডটি নিম্নলিখিত কাজগুলো করতে সক্ষম:- HTTP অনুরোধ গ্রহণ করুন
- ডাটাবেসের সাথে সংযোগ করুন
- HTTP অনুরোধের সময়টি ডাটাবেসে সংরক্ষণ করুন।
- শেষ পাঁচটি অনুরোধের সময়গুলো ফেরত দিন।
cat > main.go << "EOF" package main import ( "database/sql" "encoding/json" "fmt" "log" "net/http" "os" "time" "cloud.google.com/go/cloudsqlconn" "cloud.google.com/go/cloudsqlconn/postgres/pgxv4" ) // visitData is used to pass data to the HTML template. type visitData struct { RecentVisits []visit } // visit contains a single row from the visits table in the database. // Each visit includes a timestamp. type visit struct { VisitTime time.Time } // getDB creates a connection to the database // based on environment variables. func getDB() (*sql.DB, func() error) { cleanup, err := pgxv4.RegisterDriver("cloudsql-postgres", cloudsqlconn.WithIAMAuthN()) if err != nil { log.Fatalf("Error on pgxv4.RegisterDriver: %v", err) } dsn := fmt.Sprintf("host=%s user=%s dbname=%s sslmode=disable", os.Getenv("INSTANCE_CONNECTION_NAME"), os.Getenv("DB_USER"), os.Getenv("DB_NAME")) db, err := sql.Open("cloudsql-postgres", dsn) if err != nil { log.Fatalf("Error on sql.Open: %v", err) } createVisits := `CREATE TABLE IF NOT EXISTS visits ( id SERIAL NOT NULL, created_at timestamp NOT NULL, PRIMARY KEY (id) );` _, err = db.Exec(createVisits) if err != nil { log.Fatalf("unable to create table: %s", err) } return db, cleanup } func main() { port := os.Getenv("PORT") if port == "" { port = "8080" } log.Printf("Listening on port %s", port) db, cleanup := getDB() defer cleanup() http.HandleFunc("/", func(w http.ResponseWriter, _ *http.Request) { // Insert current visit _, err := db.Exec("INSERT INTO visits(created_at) VALUES(NOW())") if err != nil { log.Fatalf("unable to save visit: %v", err) } // Get the last 5 visits rows, err := db.Query("SELECT created_at FROM visits ORDER BY created_at DESC LIMIT 5") if err != nil { log.Fatalf("DB.Query: %v", err) } defer rows.Close() var visits []visit for rows.Next() { var visitTime time.Time err := rows.Scan(&visitTime) if err != nil { log.Fatalf("Rows.Scan: %v", err) } visits = append(visits, visit{VisitTime: visitTime}) } response, err := json.Marshal(visitData{RecentVisits: visits}) if err != nil { log.Fatalf("renderIndex: failed to parse totals with json.Marshal: %v", err) } w.Write(response) }) if err := http.ListenAndServe(":"+port, nil); err != nil { log.Fatal(err) } } EOF
এই কোডটি একটি সাধারণ ওয়েব সার্ভার তৈরি করে, যা PORT এনভায়রনমেন্ট ভেরিয়েবল দ্বারা নির্ধারিত পোর্টে লিসেন করে। অ্যাপ্লিকেশনটি এখন ডেপ্লয় করার জন্য প্রস্তুত।
৬. ক্লাউড রান অ্যাপ্লিকেশন স্থাপন করুন
আপনার অ্যাপ্লিকেশনটি ডেপ্লয় করতে নিচের কমান্ডটি চালান:
- –region : ইনস্ট্যান্সটির আঞ্চলিক অবস্থান (উদাহরণস্বরূপ: us-central1, asia-east1, us-east1)।
- –source : যে সোর্স কোডটি ডেপ্লয় করা হবে। এক্ষেত্রে,
.বর্তমানhelloworldফোল্ডারের সোর্স কোডকে নির্দেশ করে। - –set-env-vars : অ্যাপ্লিকেশনটিকে ক্লাউড এসকিউএল (Cloud SQL) ডেটাবেসে নির্দেশিত করার জন্য ব্যবহৃত এনভায়রনমেন্ট ভেরিয়েবল সেট করে।
- –service-account : এই কোডল্যাবের শুরুতে তৈরি করা ক্লাউড SQL ডেটাবেসে সংযোগ করার অনুমতি থাকা সার্ভিস অ্যাকাউন্টের সাথে ক্লাউড রান ডিপ্লয়মেন্টকে সংযুক্ত করে।
- –allow-unauthenticated : প্রমাণীকরণবিহীন অনুরোধের অনুমতি দেয়, যাতে অ্যাপ্লিকেশনটি ইন্টারনেট থেকে ব্যবহার করা যায়।
gcloud run deploy helloworld \
--region=us-central1 \
--source=. \
--set-env-vars INSTANCE_CONNECTION_NAME="${GOOGLE_CLOUD_PROJECT}:us-central1:quickstart-instance" \
--set-env-vars DB_NAME="quickstart_db" \
--set-env-vars DB_USER="quickstart-service-account@${GOOGLE_CLOUD_PROJECT}.iam" \
--service-account="quickstart-service-account@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" \
--allow-unauthenticated
অনুরোধ করা হলে, আপনি যে চালিয়ে যেতে চান তা নিশ্চিত করতে y এবং Enter চাপুন:
Do you want to continue (Y/n)? y
কয়েক মিনিট পর অ্যাপ্লিকেশনটি আপনাকে ভিজিট করার জন্য একটি URL প্রদান করবে।
আপনার অ্যাপ্লিকেশনটি কার্যকরভাবে দেখতে ইউআরএল-টিতে যান। প্রতিবার যখন আপনি ইউআরএল-টি ভিজিট করবেন বা পেজটি রিফ্রেশ করবেন, তখন আপনি সর্বশেষ পাঁচটি ভিজিটের তথ্য JSON ফরম্যাটে দেখতে পাবেন।
৭. অভিনন্দন
আপনি ক্লাউড রান-এ একটি গো অ্যাপ্লিকেশন স্থাপন করেছেন যা ক্লাউড এসকিউএল-এ চলমান একটি পোস্টগ্রেসকিউএল ডাটাবেসের সাথে সংযোগ করতে সক্ষম।
আমরা যা আলোচনা করেছি:
- PostgreSQL ডেটাবেসের জন্য একটি ক্লাউড SQL তৈরি করা
- ক্লাউড রানে একটি গো অ্যাপ্লিকেশন স্থাপন করা
- Go Connector ব্যবহার করে আপনার অ্যাপ্লিকেশনকে Cloud SQL-এর সাথে সংযুক্ত করা
পরিষ্কার করা
এই টিউটোরিয়ালে ব্যবহৃত রিসোর্সগুলির জন্য আপনার Google Cloud অ্যাকাউন্টে চার্জ হওয়া এড়াতে, হয় রিসোর্সগুলি থাকা প্রজেক্টটি ডিলিট করে দিন, অথবা প্রজেক্টটি রেখে দিয়ে আলাদা আলাদা রিসোর্স ডিলিট করুন। আপনি যদি সম্পূর্ণ প্রজেক্টটি ডিলিট করতে চান, তাহলে আপনি এটি চালাতে পারেন:
gcloud projects delete ${GOOGLE_CLOUD_PROJECT}