یک برنامه جاوا اسکریپت را در Cloud Run با AlloyDB اجرا کنید

1. بررسی اجمالی

Cloud Run یک پلت فرم بدون سرور کاملاً مدیریت شده است که به شما امکان می دهد کانتینرهای بدون حالتی را اجرا کنید که از طریق درخواست های HTTP قابل فراخوانی هستند. این Codelab نحوه اتصال یک برنامه Node.js در Cloud Run را به طور ایمن با یک حساب سرویس با استفاده از تأیید اعتبار IAM به AlloyDB نشان خواهد داد.

آنچه خواهید آموخت

در این آزمایشگاه شما یاد خواهید گرفت که چگونه:

  • یک نمونه AlloyDB ایجاد کنید (برای استفاده از Private Service Connect پیکربندی شده است)
  • برنامه ای را در Cloud Run مستقر کنید که به نمونه AlloyDB شما متصل می شود
  • از Gemini Code Assist برای افزودن قابلیت به برنامه خود استفاده کنید

2. پیش نیازها

  1. اگر قبلاً یک حساب Google ندارید، باید یک حساب Google ایجاد کنید .
    • از حساب شخصی به جای حساب کاری یا مدرسه استفاده کنید. حساب‌های محل کار و مدرسه ممکن است محدودیت‌هایی داشته باشند که شما را از فعال کردن APIهای مورد نیاز برای این آزمایشگاه باز می‌دارد.

3. راه اندازی پروژه

  1. به Google Cloud Console وارد شوید.
  2. صورتحساب را در کنسول Cloud فعال کنید .
    • تکمیل این آزمایشگاه باید کمتر از 1 دلار آمریکا در منابع Cloud هزینه داشته باشد.
    • برای جلوگیری از هزینه های بیشتر، می توانید مراحل انتهای این آزمایشگاه را برای حذف منابع دنبال کنید.
    • کاربران جدید واجد شرایط استفاده از نسخه آزمایشی رایگان 300 دلاری هستند.
  3. یک پروژه جدید ایجاد کنید یا استفاده مجدد از یک پروژه موجود را انتخاب کنید.

4. Cloud Shell Editor را باز کنید

  1. به Cloud Shell Editor بروید
  2. اگر ترمینال در پایین صفحه ظاهر نشد، آن را باز کنید:
    • روی منوی همبرگر کلیک کنید نماد منوی همبرگر
    • روی ترمینال کلیک کنید
    • روی New Terminal کلیک کنید ترمینال جدید را در Cloud Shell Editor باز کنید
  3. در ترمینال، پروژه خود را با این دستور تنظیم کنید:
    • قالب:
      gcloud config set project [PROJECT_ID]
      
    • مثال:
      gcloud config set project lab-project-id-example
      
    • اگر نمی توانید شناسه پروژه خود را به خاطر بسپارید:
      • می توانید تمام شناسه های پروژه خود را با موارد زیر فهرست کنید:
        gcloud projects list | awk '/PROJECT_ID/{print $2}'
        
      شناسه پروژه را در ترمینال Cloud Shell Editor تنظیم کنید
  4. اگر از شما خواسته شد که مجوز دهید، برای ادامه روی تأیید کلیک کنید. برای تأیید Cloud Shell کلیک کنید
  5. شما باید این پیام را ببینید:
    Updated property [core/project].
    
    اگر یک WARNING مشاهده کردید و از شما پرسیده شد Do you want to continue (Y/N)? ، پس احتمالاً شناسه پروژه را اشتباه وارد کرده اید. N را فشار دهید، Enter فشار دهید و دوباره دستور gcloud config set project را اجرا کنید.

5. API ها را فعال کنید

در ترمینال، API ها را فعال کنید:

gcloud services enable \
  compute.googleapis.com \
  alloydb.googleapis.com \
  run.googleapis.com \
  artifactregistry.googleapis.com \
  cloudbuild.googleapis.com \
  cloudaicompanion.googleapis.com

اگر از شما خواسته شد که مجوز دهید، برای ادامه روی تأیید کلیک کنید. برای تأیید Cloud Shell کلیک کنید

تکمیل این دستور ممکن است چند دقیقه طول بکشد، اما در نهایت باید یک پیام موفقیت آمیز مشابه این پیام تولید کند:

Operation "operations/acf.p2-73d90d00-47ee-447a-b600" finished successfully.

6. یک حساب سرویس راه اندازی کنید

یک حساب سرویس Google Cloud ایجاد و پیکربندی کنید تا توسط Cloud Run استفاده شود تا مجوزهای صحیح برای اتصال به AlloyDB را داشته باشد.

  1. دستور gcloud iam service-accounts create را به صورت زیر اجرا کنید تا یک حساب سرویس جدید ایجاد کنید:
    gcloud iam service-accounts create quickstart-service-account \
      --display-name="Quickstart Service Account"
    
  2. دستور add-iam-policy-binding پروژه های gcloud را به صورت زیر اجرا کنید تا نقش کاربر پایگاه داده AlloyDB را به حساب سرویس Google Cloud که ایجاد کرده اید اضافه کنید.
    gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} \
      --member="serviceAccount:quickstart-service-account@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" \
      --role="roles/alloydb.databaseUser"
    
  3. دستور add-iam-policy-binding پروژه های gcloud را به صورت زیر اجرا کنید تا نقش مصرف کننده سرویس Usage را به حساب سرویس Google Cloud که ایجاد کرده اید اضافه کنید.
    gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} \
      --member="serviceAccount:quickstart-service-account@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" \
      --role="roles/serviceusage.serviceUsageConsumer"
    
  4. دستور add-iam-policy-binding پروژه های gcloud را به صورت زیر اجرا کنید تا نقش Log Writer را به حساب سرویس Google Cloud که ایجاد کرده اید اضافه کنید.
    gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} \
      --member="serviceAccount:quickstart-service-account@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" \
      --role="roles/logging.logWriter"
    

7. نمونه AlloyDB ایجاد کنید

  1. دستور gcloud alloydb clusters create برای ایجاد یک نمونه Cloud SQL اجرا کنید.
    gcloud alloydb clusters create quickstart-cluster \
      --password=$(openssl rand -base64 20) \
      --region=us-central1 \
      --project=${GOOGLE_CLOUD_PROJECT} \
      --enable-private-service-connect \
      --database-version=POSTGRES_16
    

تکمیل این دستور ممکن است چند دقیقه طول بکشد.

  1. برای ایجاد یک نمونه Cloud SQL دستور gcloud alloydb instances create اجرا کنید
    gcloud alloydb instances create quickstart-instance \
      --project=${GOOGLE_CLOUD_PROJECT} \
      --instance-type=PRIMARY \
      --cpu-count=2 \
      --region=us-central1 \
      --cluster=quickstart-cluster \
      --allowed-psc-projects=${GOOGLE_CLOUD_PROJECT} \
      --database-flags=alloydb.iam_authentication=on
    
  2. دستور gcloud alloydb instances describe اجرا کنید تا پیوند پیوست سرویس PSC را دریافت کنید و آن را به یک متغیر صادر کنید.
    export SERVICE_ATTACHMENT=$(gcloud alloydb instances describe quickstart-instance \
        --cluster=quickstart-cluster --region=us-central1 \
        --format="value(pscInstanceConfig.serviceAttachmentLink)")
    
  3. gcloud compute addresses create quickstart-address \
      --region=us-central1 \
      --subnet=default
    
  4. gcloud compute forwarding-rules create quickstart-endpoint \
      --region=us-central1 \
      --network=default \
      --address=quickstart-address \
      --target-service-attachment=${SERVICE_ATTACHMENT}
    

یک کاربر پایگاه داده PostgreSQL برای حساب سرویسی که قبلاً ایجاد کرده اید برای دسترسی به پایگاه داده ایجاد کنید.

gcloud alloydb users create quickstart-service-account@${GOOGLE_CLOUD_PROJECT}.iam \
  --cluster=quickstart-cluster \
  --region=us-central1 \
  --type=IAM_BASED \
  --superuser=true

8. برنامه را آماده کنید

یک برنامه Node.js را آماده کنید که به درخواست های HTTP پاسخ دهد.

  1. در Cloud Shell یک دایرکتوری جدید به نام helloworld ایجاد کنید، سپس به آن دایرکتوری تغییر دهید:
    mkdir helloworld
    cd helloworld
    
  2. یک فایل package.json را به عنوان یک ماژول راه اندازی کنید.
    npm init -y
    npm pkg set type="module"
    npm pkg set main="index.mjs"
    npm pkg set scripts.start="node index.mjs"
    
  3. کتابخانه Google Cloud Auth را نصب کنید.
    npm install google-auth-library
    
  4. pg برای تعامل با پایگاه داده PostgreSQL نصب کنید.
    npm install pg
    
  5. برای پذیرش درخواست‌های http ورودی، express را نصب کنید.
    npm install express
    
  6. یک فایل index.mjs با کد برنامه ایجاد کنید. این کد قادر است:
    • درخواست های HTTP را بپذیرید
    • به پایگاه داده متصل شوید
    • زمان درخواست HTTP را در پایگاه داده ذخیره کنید
    • زمان پنج درخواست آخر را برگردانید
    دستور زیر را در Cloud Shell اجرا کنید:
    cat > index.mjs << "EOF"
    import express from 'express';
    import pg from 'pg';
    const { Pool } = pg;
    import {GoogleAuth} from 'google-auth-library';
    
    const auth = new GoogleAuth({
      scopes: ['https://www.googleapis.com/auth/alloydb.login'],
    });
    
    const pool = new Pool({
      host: process.env.DB_HOST,
      user: process.env.DB_USER,
      password: async () => {
        return await auth.getAccessToken();
      },
      database: process.env.DB_NAME,
      ssl: {
        require: true,
        rejectUnauthorized: false, // required for self-signed certs
        // https://node-postgres.com/features/ssl#self-signed-cert
      }
    });
    
    const app = express();
    
    app.get('/', async (req, res) => {
      await pool.query('INSERT INTO visits(created_at) VALUES(NOW())');
      const {rows} = await pool.query('SELECT created_at FROM visits ORDER BY created_at DESC LIMIT 5');
      console.table(rows); // prints the last 5 visits
      res.send(rows);
    });
    
    const port = parseInt(process.env.PORT) || 8080;
    app.listen(port, async () => {
      console.log('process.env: ', process.env);
      await pool.query(`CREATE TABLE IF NOT EXISTS visits (
        id SERIAL NOT NULL,
        created_at timestamp NOT NULL,
        PRIMARY KEY (id)
      );`);
      console.log(`helloworld: listening on port ${port}`);
    });
    
    EOF
    

این کد یک وب سرور اصلی ایجاد می کند که به پورت تعریف شده توسط متغیر محیط PORT گوش می دهد. برنامه اکنون آماده استقرار است.

9. برنامه Cloud Run را مستقر کنید

  1. دستور add-iam-policy-binding پروژه های gcloud را به صورت زیر اجرا کنید تا نقش Network User را به حساب سرویس Cloud Run برای سرویس Cloud Run که می خواهید ایجاد کنید اضافه کنید.
    gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} \
    --member "serviceAccount:service-$(gcloud projects describe ${GOOGLE_CLOUD_PROJECT} --format="value(projectNumber)")@serverless-robot-prod.iam.gserviceaccount.com" \
    --role "roles/compute.networkUser"
    
  1. دستور زیر را برای استقرار برنامه خود در Cloud Run اجرا کنید:
    gcloud run deploy helloworld \
      --region=us-central1 \
      --source=. \
      --set-env-vars DB_NAME="quickstart_db" \
      --set-env-vars DB_USER="postgres" \
      --set-env-vars DB_PASSWORD=${DB_PASSWORD} \
      --set-env-vars DB_HOST="$(gcloud sql instances describe quickstart-instance --project=${GOOGLE_CLOUD_PROJECT} --format='value(settings.ipConfiguration.pscConfig.pscAutoConnections.ipAddress)')" \
      --service-account="quickstart-service-account@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" \
      --network=default \
      --subnet=default \
      --allow-unauthenticated
    
  2. اگر از شما خواسته شد، Y و Enter فشار دهید تا تأیید کنید که می‌خواهید ادامه دهید:
    Do you want to continue (Y/n)? Y
    

پس از چند دقیقه، برنامه باید یک URL برای بازدید شما ارائه دهد.

برای مشاهده عملکرد برنامه خود به URL بروید. هر بار که از URL بازدید می کنید یا صفحه را بازخوانی می کنید، پنج بازدید اخیر را خواهید دید که به صورت JSON بازگردانده شده اند.

پس از چند دقیقه، برنامه باید یک URL برای بازدید شما ارائه دهد.

برای مشاهده عملکرد برنامه خود به URL بروید. هر بار که از URL بازدید می کنید یا صفحه را بازخوانی می کنید، پنج بازدید اخیر را خواهید دید که به صورت JSON بازگردانده شده اند.

10. تبریک می گویم

در این آزمایشگاه شما یاد گرفته اید که چگونه:

  • یک نمونه AlloyDB ایجاد کنید (برای استفاده از Private Service Connect پیکربندی شده است)
  • برنامه ای را در Cloud Run مستقر کنید که به نمونه AlloyDB شما متصل می شود
  • از Gemini Code Assist برای افزودن قابلیت به برنامه خود استفاده کنید

پاک کن

برای جلوگیری از تحمیل هزینه به حساب Google Cloud خود برای منابع استفاده شده در این آموزش، یا پروژه حاوی منابع را حذف کنید یا پروژه را نگه دارید و منابع فردی را حذف کنید. اگر می خواهید کل پروژه را حذف کنید، می توانید اجرا کنید:

gcloud projects delete ${GOOGLE_CLOUD_PROJECT}