AlloyDB ile JavaScript uygulamasını Cloud Run'a dağıtma

AlloyDB ile JavaScript uygulamasını Cloud Run'a dağıtma

Bu codelab hakkında

subjectSon güncelleme Nis 11, 2025
account_circleYazan: Luke Schlangen & Jack Wotherspoon

1. Genel Bakış

Cloud Run, HTTP istekleriyle çağrılabilen durum bilgisiz container'lar çalıştırmanıza olanak tanıyan, tümüyle yönetilen bir sunucusuz platformdur. Bu Codelab'de, Cloud Run'daki bir Node.js uygulamasının IAM kimlik doğrulamasını kullanarak bir hizmet hesabıyla AlloyDB'ye nasıl güvenli bir şekilde bağlanacağı gösterilmektedir.

Bu laboratuvarda şunları öğreneceksiniz:

  • AlloyDB örneği oluşturun (Private Service Connect'i kullanacak şekilde yapılandırılmış)
  • AlloyDB örneğinize bağlanan bir uygulamayı Cloud Run'a dağıtma

2. Ön koşullar

  1. Google Hesabınız yoksa Google Hesabı oluşturmanız gerekir.
    • İş veya okul hesabı yerine kişisel hesap kullanıyorsanız. İş ve okul hesaplarında, bu laboratuvar için gereken API'leri etkinleştirmenizi engelleyen kısıtlamalar olabilir.

3. Proje ayarlama

  1. Google Cloud Console'da oturum açın.
  2. Cloud Console'da faturalandırmayı etkinleştirin.
    • Bu laboratuvarı tamamlamak, bulut kaynaklarında 1 ABD dolarından az maliyete mal olur.
    • Daha fazla ödeme alınmaması için bu laboratuvarın sonundaki adımları uygulayarak kaynakları silebilirsiniz.
    • Yeni kullanıcılar 300 ABD doları tutarındaki ücretsiz deneme sürümünden yararlanabilir.
  3. Yeni bir proje oluşturun veya mevcut bir projeyi yeniden kullanmayı seçin.

4. Cloud Shell Düzenleyici'yi açma

  1. Cloud Shell Düzenleyici'ye gidin
  2. Terminal ekranın alt kısmında görünmüyorsa açın:
    • Hamburger menüsünü Hamburger menü simgesi tıklayın.
    • Terminal'i tıklayın.
    • Yeni Terminal'i tıklayınCloud Shell Düzenleyici'de yeni terminal açma
  3. Terminalde projenizi şu komutla ayarlayın:
    • Biçim:
      gcloud config set project [PROJECT_ID]
    • Örnek:
      gcloud config set project lab-project-id-example
    • Proje kimliğinizi hatırlamıyorsanız:
      • Tüm proje kimliklerinizi şu komutla listeleyebilirsiniz:
        gcloud projects list | awk '/PROJECT_ID/{print $2}'
      Cloud Shell Düzenleyici terminalinde proje kimliğini ayarlama
  4. Yetkilendirme isteğinde bulunulursa devam etmek için Yetkilendir'i tıklayın. Cloud Shell'e yetki vermek için tıklayın
  5. Aşağıdaki mesajı görürsünüz:
    Updated property [core/project].
    
    WARNING görüyorsanız ve Do you want to continue (Y/N)? soruyorsanız proje kimliğini yanlış girdiğiniz muhtemeldir. N, Enter tuşlarına basın ve gcloud config set project komutunu tekrar çalıştırmayı deneyin.

5. API'leri etkinleştir

Terminalde API'leri etkinleştirin:

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

Yetkilendirme isteğinde bulunulursa devam etmek için Yetkilendir'i tıklayın. Cloud Shell'e yetki vermek için tıklayın

Bu komutun tamamlanması birkaç dakika sürebilir ancak sonunda şuna benzer bir başarılı mesaj gösterilir:

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

6. Hizmet hesabı oluşturma

AlloyDB'ye bağlanmak için doğru izinlere sahip olması amacıyla Cloud Run tarafından kullanılacak bir Google Cloud hizmet hesabı oluşturun ve yapılandırın.

  1. Yeni bir hizmet hesabı oluşturmak için gcloud iam service-accounts create komutunu aşağıdaki gibi çalıştırın:
    gcloud iam service-accounts create quickstart-service-account \
     
    --display-name="Quickstart Service Account"
  2. Yeni oluşturduğunuz Google Cloud hizmet hesabına AlloyDB Veritabanı Kullanıcısı rolünü eklemek için gcloud projects add-iam-policy-binding komutunu aşağıdaki gibi çalıştırın.
    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. Yeni oluşturduğunuz Google Cloud hizmet hesabına Hizmet Kullanımı Tüketicisi rolünü eklemek için gcloud projects add-iam-policy-binding komutunu aşağıdaki gibi çalıştırın.
    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. Az önce oluşturduğunuz Google Cloud hizmet hesabına Günlük Yazıcı rolünü eklemek için gcloud projects add-iam-policy-binding komutunu aşağıdaki gibi çalıştırın.
    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 Veritabanı Oluşturma

  1. Cloud SQL örneği oluşturmak için gcloud alloydb clusters create komutunu çalıştırma
    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

Bu komutun çalıştırılması birkaç dakika sürebilir.

  1. Cloud SQL örneği oluşturmak için gcloud alloydb instances create komutunu çalıştırma
    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. PSC hizmet eki bağlantısını almak ve bir değişkene aktarmak için gcloud alloydb instances describe komutunu çalıştırın
    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}

Veritabanına erişmek için daha önce oluşturduğunuz hizmet hesabı için bir PostgreSQL veritabanı kullanıcısı oluşturun.

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

8. Başvuruyu hazırlama

HTTP isteklerine yanıt veren bir Node.js uygulaması hazırlayın.

  1. Cloud Shell'de helloworld adlı yeni bir dizin oluşturun ve ardından bu dizine geçin:
    mkdir helloworld
    cd helloworld
  2. Bir package.json dosyasını modül olarak başlatma.
    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 kitaplığını yükleyin.
    npm install google-auth-library
  4. PostgreSQL veritabanıyla etkileşimde bulunmak için pg'ü yükleyin.
    npm install pg
  5. Gelen HTTP isteklerini kabul etmek için express'i yükleyin.
    npm install express
  6. Uygulama kodunu içeren bir index.mjs dosyası oluşturun. Bu kod şunları yapabilir:
    • HTTP isteklerini kabul etme
    • Veritabanına bağlanma
    • HTTP isteğinin zamanını veritabanında depolama
    • Son beş isteğin zamanını döndürme
    Cloud Shell'de aşağıdaki komutu çalıştırın:
    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

Bu kod, PORT ortam değişkeni tarafından tanımlanan bağlantı noktasında dinleme yapan temel bir web sunucusu oluşturur. Uygulama artık dağıtılmaya hazırdır.

9. Cloud Run uygulamasını dağıtma

  1. Uygulamanızı Cloud Run'a dağıtmak için aşağıdaki komutu çalıştırın:
    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. İstenirse devam etmek istediğinizi onaylamak için Y ve Enter'ye basın:
    Do you want to continue (Y/n)? Y
    

Birkaç dakika sonra uygulama, ziyaret etmeniz için bir URL sağlar.

Uygulamanızı çalışırken görmek için URL'ye gidin. URL'yi her ziyaret ettiğinizde veya sayfayı her yenilettiğinizde en son beş ziyaretin JSON olarak döndürüldüğünü görürsünüz.

Birkaç dakika sonra uygulama, ziyaret etmeniz için bir URL sağlar.

Uygulamanızı çalışırken görmek için URL'ye gidin. URL'yi her ziyaret ettiğinizde veya sayfayı her yenilettiğinizde en son beş ziyaretin JSON olarak döndürüldüğünü görürsünüz.

10. Tebrikler

Bu laboratuvarda şunları öğrendiniz:

  • AlloyDB örneği oluşturun (Private Service Connect'i kullanacak şekilde yapılandırılmış)
  • AlloyDB örneğinize bağlanan bir uygulamayı Cloud Run'a dağıtma

Temizleme

Cloud SQL'in ücretsiz katmanı yoktur ve kullanmaya devam ederseniz sizden ücret alınır. Ek ücret ödememek için Cloud projenizi silebilirsiniz.

Cloud Run, hizmet kullanılmadığında ücret almaz ancak container görüntüsünü Artifact Registry'de depolamak için sizden ücret alınabilir. Cloud projeniz silindiğinde, söz konusu projede kullanılan tüm kaynakların faturalandırması durdurulur.

İsterseniz projeyi silin:

gcloud projects delete $GOOGLE_CLOUD_PROJECT

Gereksiz kaynakları CloudShell diskinizden de silebilirsiniz. Şunları yapabilirsiniz:

  1. Codelab proje dizinini silin:
    rm -rf ~/task-app
  2. Uyarı! Sonraki işlem geri alınamaz. Yer açmak için Cloud Shell'inizdeki her şeyi silmek istiyorsanız ana dizininizi tamamen silebilirsiniz. Saklamak istediğiniz her şeyin başka bir yere kaydedildiğinden emin olun.
    sudo rm -rf $HOME

Öğrenmeye devam edin