इस कोडलैब (कोड बनाना सीखने के लिए ट्यूटोरियल) के बारे में जानकारी
1. खास जानकारी
Cloud SQL Go कनेक्टर, Go ऐप्लिकेशन को आपके Cloud SQL डेटाबेस से सुरक्षित रूप से कनेक्ट करने का सबसे आसान तरीका है. Cloud Run पूरी तरह से मैनेज किया गया बिना सर्वर वाला प्लैटफ़ॉर्म है. इसकी मदद से, स्टेटलेस कंटेनर चलाए जा सकते हैं, जिन्हें एचटीटीपी अनुरोधों के ज़रिए ऐक्सेस किया जा सकता है. यह कोडलैब आपको दिखाएगा कि IAM की पुष्टि का इस्तेमाल करके, Cloud Run पर मौजूद किसी Go ऐप्लिकेशन को, PostgreSQL के लिए Cloud SQL के डेटाबेस से सुरक्षित तरीके से कैसे कनेक्ट किया जा सकता है.
आपको क्या सीखने को मिलेगा
इस लैब में, आपको इन कामों को करने का तरीका पता चलेगा:
- PostgreSQL के लिए Cloud SQL बनाना
- Go ऐप्लिकेशन को Cloud Run पर डिप्लॉय करें
- Go Connector का इस्तेमाल करके, अपने ऐप्लिकेशन को Cloud SQL से कनेक्ट करना
ज़रूरी शर्तें
- यह लैब, Cloud Console और Cloud Shell एनवायरमेंट के बारे में अच्छी तरह से समझ लेता है.
2. शुरू करने से पहले
Cloud प्रोजेक्ट का सेटअप
- Google Cloud Console में साइन इन करें और नया प्रोजेक्ट बनाएं या किसी मौजूदा प्रोजेक्ट का फिर से इस्तेमाल करें. अगर आपके पास पहले से कोई Google खाता नहीं है, तो आपको एक खाता बनाना होगा.
- प्रोजेक्ट का नाम, इस प्रोजेक्ट में हिस्सा लेने वाले लोगों का डिसप्ले नेम होता है. यह एक वर्ण स्ट्रिंग है, जिसका इस्तेमाल Google API नहीं करता. इसे कभी भी अपडेट किया जा सकता है.
- प्रोजेक्ट आईडी, Google Cloud के सभी प्रोजेक्ट के लिए यूनीक होता है. साथ ही, इसे बदला नहीं जा सकता. इसे सेट करने के बाद बदला नहीं जा सकता. Cloud Console, एक यूनीक स्ट्रिंग अपने-आप जनरेट करता है; आम तौर पर, आपको उसके होने की कोई परवाह नहीं होती. ज़्यादातर कोडलैब में, आपको प्रोजेक्ट आईडी का रेफ़रंस देना होगा. आम तौर पर, इसे
PROJECT_ID
के तौर पर पहचाना जाता है. अगर आपको जनरेट किया गया आईडी पसंद नहीं है, तो किसी भी क्रम में एक और आईडी जनरेट किया जा सकता है. इसके अलावा, खुद भी आज़माया जा सकता है और देखें कि वह उपलब्ध है या नहीं. इस चरण के बाद इसे बदला नहीं जा सकता और प्रोजेक्ट के कुल समय तक बना रहेगा. - आपकी जानकारी के लिए, एक तीसरी वैल्यू यानी प्रोजेक्ट नंबर है. इसका इस्तेमाल कुछ एपीआई करते हैं. दस्तावेज़ में इन तीनों वैल्यू के बारे में ज़्यादा जानें.
- इसके बाद, आपको क्लाउड संसाधनों/एपीआई का इस्तेमाल करने के लिए, Cloud Console में बिलिंग चालू करनी होगी. इस कोडलैब का इस्तेमाल करने पर, आपको ज़्यादा पैसे नहीं चुकाने होंगे. इस ट्यूटोरियल के अलावा, संसाधनों को बंद करने के लिए कि आपको बिलिंग न करनी पड़े. इसके लिए, अपने बनाए गए संसाधनों को मिटाएं या पूरा प्रोजेक्ट मिटाएं. Google Cloud के नए उपयोगकर्ता, 300 डॉलर के मुफ़्त ट्रायल वाले प्रोग्राम में हिस्सा ले सकते हैं.
एनवायरमेंट का सेटअप
खोज बार की दाईं ओर मौजूद आइकॉन पर क्लिक करके, Cloud Shell को चालू करें.
Cloud Shell से, एपीआई चालू करें:
gcloud services enable compute.googleapis.com sqladmin.googleapis.com \
run.googleapis.com artifactregistry.googleapis.com \
cloudbuild.googleapis.com servicenetworking.googleapis.com
अनुमति देने के लिए कहे जाने पर, "अनुमति दें" पर क्लिक करें जारी रखने के लिए.
इस निर्देश को पूरा होने में कुछ मिनट लग सकते हैं, लेकिन आखिर में इससे मिलता-जुलता एक मैसेज दिखेगा:
Operation "operations/acf.p2-327036483151-73d90d00-47ee-447a-b600-a6badf0eceae" finished successfully.
3. सेवा खाता सेट अप करना
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 क्लाइंट की भूमिका जोड़ने के लिए, gcloud प्रोजेक्ट 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 इंस्टेंस उपयोगकर्ता की भूमिका जोड़ने के लिए, gcloud प्रोजेक्ट 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 सेवा खाता बनाया है उसमें लॉग राइटर की भूमिका जोड़ने के लिए, gcloud प्रोजेक्ट 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"
4. Cloud SQL सेट अप करना
Cloud SQL इंस्टेंस बनाने के लिए, gcloud sql instances create
कमांड चलाएं.
- –database-version: डेटाबेस इंजन का टाइप और वर्शन. अगर किसी एपीआई की जानकारी नहीं दी जाती है, तो डिफ़ॉल्ट एपीआई का इस्तेमाल किया जाता है. मौजूदा वर्शन देखने के लिए, gcloud डेटाबेस के वर्शन का दस्तावेज़ देखें.
- –सीपीयू: मशीन में ज़रूरी कोर की संख्या.
- –मेमोरी: पूर्णांक की वैल्यू से पता चलता है कि मशीन में कितनी मेमोरी चाहिए. साइज़ की यूनिट दी जानी चाहिए (उदाहरण के लिए, 3072एमबी या 9 जीबी). अगर कोई इकाई तय नहीं की गई है, तो जीबी मान लिया जाता है.
- –region: इंस्टेंस की रीजनल लोकेशन (उदाहरण के लिए: us-central1, asia-east1, us-east1).
- –डेटाबेस-फ़्लैग: फ़्लैग सेट करने की अनुमति देता है. इस मामले में, हम पहले बनाए गए सेवा खाते का इस्तेमाल करके, Cloud Run को Cloud SQL से कनेक्ट करने के लिए
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
में Cloud SQL का डेटाबेस बनाने के लिए, 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
5. आवेदन तैयार करें
ऐसा Go ऐप्लिकेशन तैयार करें जो एचटीटीपी अनुरोधों का जवाब देता हो.
- Cloud Shell में
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
फ़ाइल बनाएं. यह कोड:- एचटीटीपी अनुरोध स्वीकार करें
- डेटाबेस से कनेक्ट करें
- एचटीटीपी अनुरोध के समय को डेटाबेस में सेव करता है
- पिछले पांच अनुरोधों का समय दिखाएं
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 एनवायरमेंट वैरिएबल के ज़रिए तय किए गए पोर्ट पर ध्यान देता है. यह ऐप्लिकेशन अब डिप्लॉय किए जाने के लिए तैयार है.
6. क्लाउड रन ऐप्लिकेशन डिप्लॉय करें
अपने ऐप्लिकेशन को डिप्लॉय करने के लिए, नीचे दिया गया निर्देश चलाएं:
- –region: इंस्टेंस की रीजनल लोकेशन (उदाहरण के लिए: us-central1, asia-east1, us-east1).
- –सोर्स: डिप्लॉय किया जाने वाला सोर्स कोड. इस मामले में,
.
, मौजूदा फ़ोल्डरhelloworld
के सोर्स कोड का हवाला देता है. - –set-env-vars: यह ऐप्लिकेशन के इस्तेमाल किए जाने वाले एनवायरमेंट वैरिएबल को सेट करता है, ताकि ऐप्लिकेशन को Cloud SQL डेटाबेस पर ले जाया जा सके.
- –सेवा-खाता: Cloud Run डिप्लॉयमेंट को सेवा खाते से जोड़ता है. इसके तहत, इस कोडलैब की शुरुआत में बनाए गए Cloud SQL डेटाबेस से कनेक्ट करने की अनुमतियां दी जाती हैं.
- –पुष्टि नहीं किए गए अनुरोधों को अनुमति दें: पुष्टि नहीं किए गए अनुरोधों को अनुमति देता है, ताकि ऐप्लिकेशन को इंटरनेट से ऐक्सेस किया जा सके.
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
कुछ मिनटों के बाद, ऐप्लिकेशन में आपको एक यूआरएल दिखेगा.
अपने ऐप्लिकेशन को काम करते हुए देखने के लिए यूआरएल पर जाएं. हर बार यूआरएल पर जाने या पेज को रीफ़्रेश करने पर, आपको हाल ही में हुई पांच विज़िट की जानकारी JSON के तौर पर दिखती है.
7. बधाई हो
आपने Cloud Run पर एक Go ऐप्लिकेशन डिप्लॉय किया है, जो Cloud SQL पर चलने वाले PostgreSQL डेटाबेस से कनेक्ट कर सकता है.
हमने इन विषयों के बारे में बताया:
- PostgreSQL के लिए Cloud SQL बनाना
- Go ऐप्लिकेशन को Cloud Run पर डिप्लॉय करना
- Go Connector का इस्तेमाल करके, अपने ऐप्लिकेशन को Cloud SQL से कनेक्ट करना
व्यवस्थित करें
इस ट्यूटोरियल में इस्तेमाल किए गए संसाधनों के लिए, आपके Google Cloud खाते पर शुल्क न लगे. इसके लिए, उस प्रोजेक्ट को मिटा दें जिसमें संसाधन शामिल हैं या प्रोजेक्ट को बनाए रखें और अलग-अलग संसाधनों को मिटाएं. अगर आपको पूरा प्रोजेक्ट मिटाना है, तो यह तरीका अपनाएं:
gcloud projects delete ${GOOGLE_CLOUD_PROJECT}