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ı kullanılarak bir hizmet hesabıyla AlloyDB'ye nasıl güvenli bir şekilde bağlanacağı gösterilmektedir.
Öğrenecekleriniz
Bu laboratuvarda şunları öğreneceksiniz:
- AlloyDB örneği oluşturma (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
- 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
- Google Cloud Console'da oturum açın.
- Cloud Console'da faturalandırmayı etkinleştirin.
- Bu laboratuvarı tamamlamak için 1 ABD dolarından daha az tutarda bulut kaynağı kullanmanız gerekir.
- Daha fazla ücret ödememek için bu laboratuvarın sonundaki adımları uygulayarak kaynakları silebilirsiniz.
- Yeni kullanıcılar 300 ABD doları değerinde ücretsiz deneme sürümünden yararlanabilir.
- Yeni bir proje oluşturun veya mevcut bir projeyi yeniden kullanmayı seçin.
4. Cloud Shell Düzenleyici'yi açma
- Cloud Shell Düzenleyici'ye gidin.
- Terminal ekranın alt kısmında görünmüyorsa açın:
- Hamburger menüsünü
tıklayın. - Terminal'i tıklayın.
- Yeni Terminal'i tıklayın.

- Hamburger menüsünü
- Terminalde şu komutla projenizi 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}'

- Tüm proje kimliklerinizi şu komutla listeleyebilirsiniz:
- Biçim:
- Yetkilendirmeniz istenirse devam etmek için Yetkilendir'i tıklayın.

- Şu mesajı görmeniz gerekir:
Updated property [core/project].
WARNINGsimgesini görüyorsanız veDo you want to continue (Y/N)?soruluyorsa proje kimliğini yanlış girmiş olabilirsiniz.Ntuşuna,Entertuşuna basın vegcloud config set projectkomutunu 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
Yetkilendirmeniz istenirse devam etmek için Yetkilendir'i tıklayın. 
Bu komutun tamamlanması birkaç dakika sürebilir ancak sonunda aşağıdakine benzer bir başarılı mesaj üretmesi gerekir:
Operation "operations/acf.p2-73d90d00-47ee-447a-b600" finished successfully.
6. Hizmet hesabı oluşturma
Cloud Run tarafından kullanılacak bir Google Cloud hizmet hesabı oluşturup AlloyDB'ye bağlanmak için doğru izinlere sahip olacak şekilde yapılandırın.
- Yeni bir hizmet hesabı oluşturmak için
gcloud iam service-accounts createkomutunu aşağıdaki gibi çalıştırın:gcloud iam service-accounts create quickstart-service-account \ --display-name="Quickstart Service Account" - 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" - 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" - Yeni oluşturduğunuz Google Cloud hizmet hesabına Log Writer 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
- Cloud SQL örneği oluşturmak için
gcloud alloydb clusters createkomutunu çalıştırın.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 tamamlanması birkaç dakika sürebilir.
- Cloud SQL örneği oluşturmak için
gcloud alloydb instances createkomutunu çalıştırın.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 - PSC hizmet eki bağlantısını almak ve bunu bir değişkene aktarmak için
gcloud alloydb instances describekomutunu çalıştırın.export SERVICE_ATTACHMENT=$(gcloud alloydb instances describe quickstart-instance \ --cluster=quickstart-cluster --region=us-central1 \ --format="value(pscInstanceConfig.serviceAttachmentLink)") gcloud compute addresses create quickstart-address \ --region=us-central1 \ --subnet=defaultgcloud 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. Uygulamayı hazırlama
HTTP isteklerine yanıt veren bir Node.js uygulaması hazırlayın.
- Cloud Shell'de
helloworldadlı yeni bir dizin oluşturun ve bu dizine geçin:mkdir helloworld cd helloworld package.jsondosyasını modül olarak başlatın.npm init -y npm pkg set type="module" npm pkg set main="index.mjs" npm pkg set scripts.start="node index.mjs"- Google Cloud Auth kitaplığını yükleyin.
npm install google-auth-library - PostgreSQL veritabanıyla etkileşim kurmak için
pg'ı yükleyin.npm install pg - Gelen HTTP isteklerini kabul etmek için express'i yükleyin.
npm install express - Uygulama koduyla bir
index.mjsdosyası oluşturun. Bu kod şunları yapabilir:- HTTP isteklerini kabul etme
- Veritabanına bağlanma
- HTTP isteğinin zamanını veritabanında saklama
- Son beş isteğin zamanlarını döndürür.
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şkeninin tanımladığı bağlantı noktasında dinleme yapan temel bir web sunucusu oluşturur. Uygulama artık dağıtılmaya hazır.
9. Cloud Run uygulamasını dağıtma
- 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 - İstenirse devam etmek istediğinizi onaylamak için
YveEntertuşlarına 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 yenilediğinizde, en son beş ziyaret JSON olarak döndürülür.
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 yenilediğinizde, en son beş ziyaret JSON olarak döndürülür.
10. Tebrikler
Bu laboratuvarda şunları öğrendiniz:
- AlloyDB örneği oluşturma (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 depoladığınız için ücretlendirilebilirsiniz. Cloud projenizi sildiğinizde, bu projede kullanılan tüm kaynaklar için faturalandırma durdurulur.
İsterseniz projeyi silebilirsiniz:
gcloud projects delete $GOOGLE_CLOUD_PROJECT
Ayrıca, gereksiz kaynakları cloudshell diskinizden de silebilirsiniz. Şunları yapabilirsiniz:
- Codelab proje dizinini silin:
rm -rf ~/task-app - Uyarı! Bu işlem geri alınamaz. Yer açmak için Cloud Shell'inizdeki her şeyi silmek istiyorsanız tüm ana dizininizi silebilirsiniz. Saklamak istediğiniz her şeyin başka bir yere kaydedildiğinden emin olun.
sudo rm -rf $HOME
Öğrenmeye devam edin
- Cloud SQL Node.js Bağlayıcısı'nı kullanarak PostgreSQL için Cloud SQL ile Cloud Run'a tam yığın Next.js uygulaması dağıtma
- Cloud SQL Node.js Bağlayıcısı'nı kullanarak PostgreSQL için Cloud SQL ile Cloud Run'a tam yığın Angular uygulaması dağıtma
- Node.js Admin SDK'yı kullanarak Firestore ile Cloud Run'a tam yığın Angular uygulaması dağıtma
- Node.js Admin SDK'yı kullanarak Firestore ile Cloud Run'a tam yığın Next.js uygulaması dağıtma