1. Genel Bakış
Cloud SQL Node.js bağlayıcısı, Node.js uygulamanızı Cloud SQL veritabanınıza güvenli bir şekilde bağlamanın en kolay yoludur. 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ı IAM kimlik doğrulaması kullanarak hizmet hesabıyla Cloud SQL for PostgreSQL veritabanına güvenli bir şekilde bağlama işlemi gösterilecektir.
Öğrenecekleriniz
Bu laboratuvarda şunları yapmayı öğreneceksiniz:
- PostgreSQL veritabanı için Cloud SQL örneği oluşturma
- Cloud Run'a Node.js uygulaması dağıtma
- Cloud SQL Node.js Connector kitaplığını kullanarak uygulamanızı veritabanınıza bağlama
Ön koşullar
- Bu laboratuvarda, Cloud Console ve Cloud Shell ortamlarına aşina olduğunuz varsayılır.
2. Başlamadan önce
Cloud projesi kurulumu
- Google Cloud Console'da oturum açın ve yeni bir proje oluşturun veya mevcut bir projeyi yeniden kullanın. Google Hesabınız yoksa hesap oluşturmanız gerekir.



- Proje adı, bu projenin katılımcıları için görünen addır. Google API'leri tarafından kullanılmayan bir karakter dizesidir. Dilediğiniz zaman bunu güncelleyebilirsiniz.
- Proje kimliği, tüm Google Cloud projelerinde benzersizdir ve sabittir (ayarlandıktan sonra değiştirilemez). Cloud Console, benzersiz bir dizeyi otomatik olarak oluşturur. Genellikle bu dizenin ne olduğuyla ilgilenmezsiniz. Çoğu codelab'de proje kimliğine (genellikle
PROJECT_IDolarak tanımlanır) başvurmanız gerekir. Oluşturulan kimliği beğenmezseniz başka bir rastgele kimlik oluşturabilirsiniz. Dilerseniz kendi adınızı deneyerek kullanılabilir olup olmadığını kontrol edebilirsiniz. Bu adımdan sonra değiştirilemez ve proje süresince geçerli kalır. - Bazı API'lerin kullandığı üçüncü bir değer olan Proje Numarası da vardır. Bu üç değer hakkında daha fazla bilgiyi belgelerde bulabilirsiniz.
- Ardından, Cloud kaynaklarını/API'lerini kullanmak için Cloud Console'da faturalandırmayı etkinleştirmeniz gerekir. Bu codelab'i tamamlamak neredeyse hiç maliyetli değildir. Bu eğitimin ötesinde faturalandırmaya tabi olmamak için kaynakları kapatmak üzere oluşturduğunuz kaynakları veya projenin tamamını silebilirsiniz. Google Cloud'un yeni kullanıcıları 300 ABD doları değerinde ücretsiz deneme programından yararlanabilir.
Ortam Kurulumu
Arama çubuğunun sağındaki simgeyi tıklayarak Cloud Shell'i etkinleştirin.

Cloud Shell'den API'leri etkinleştirin:
gcloud services enable compute.googleapis.com sqladmin.googleapis.com \
run.googleapis.com artifactregistry.googleapis.com \
cloudbuild.googleapis.com servicenetworking.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-327036483151-73d90d00-47ee-447a-b600-a6badf0eceae" finished successfully.
3. Hizmet hesabı oluşturma
Cloud Run tarafından kullanılacak bir Google Cloud hizmet hesabı oluşturup yapılandırın. Bu hizmet hesabının Cloud SQL'e bağlanmak için doğru izinlere sahip olması gerekir.
- 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 Cloud SQL İstemcisi rolünü eklemek için gcloud projects add-iam-policy-binding komutunu aşağıdaki gibi çalıştırın. Cloud Shell'de
${GOOGLE_CLOUD_PROJECT}ifadesinin yerini projenizin adı alır. Dilerseniz bu işlemi manuel olarak da yapabilirsiniz.gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} \ --member="serviceAccount:quickstart-service-account@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" \ --role="roles/cloudsql.client" - Yeni oluşturduğunuz Google Cloud hizmet hesabına Cloud SQL Örneği 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/cloudsql.instanceUser" - 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"
4. Cloud SQL'i ayarlama
Cloud SQL örneği oluşturmak için gcloud sql instances create komutunu çalıştırın.
--database-version: Veritabanı motoru türü ve sürümü. Belirtilmezse API varsayılanı kullanılır. Mevcut sürümleri görmek için gcloud veritabanı sürümleri dokümanlarına bakın.--cpu: Makinede istenen çekirdek sayısı.--memory: Makinede ne kadar bellek istendiğini gösteren tam sayı değeri. Bir boyut birimi sağlanmalıdır (örneğin, 3072 MB veya 9 GB). Bir birim belirtilmezse GB olduğu varsayılır.--region: Örneğin bölgesel konumu (ör. us-central1, asia-east1, us-east1).--database-flags: Bayrakların ayarlanmasına izin verir. Bu durumda, daha önce oluşturduğumuz hizmet hesabını kullanarak Cloud Run'ın Cloud SQL'e bağlanmasını sağlamak içincloudsql.iam_authenticationseçeneğini etkinleştiriyoruz.gcloud sql instances create quickstart-instance \ --database-version=POSTGRES_18 \ --tier=db-custom-1-3840 \ --region=us-central1 \ --edition=ENTERPRISE \ --database-flags=cloudsql.iam_authentication=on
Bu komutun tamamlanması birkaç dakika sürebilir.
gcloud sql databases create komutunu çalıştırarak quickstart-instance içinde bir Cloud SQL veritabanı oluşturun.
gcloud sql databases create quickstart_db \
--instance=quickstart-instance
Veritabanına erişmek için daha önce oluşturduğunuz hizmet hesabı için bir PostgreSQL veritabanı kullanıcısı oluşturun.
gcloud sql users create quickstart-service-account@${GOOGLE_CLOUD_PROJECT}.iam \
--instance=quickstart-instance \
--type=cloud_iam_service_account \
--database-roles=postgres
Uyarı: Üretim uygulamalarında --database-roles=postgres kullanmayın. Bu, laboratuvardaki kod için programatik olarak tablo oluşturup bırakmak üzere gereken ayrıcalıkları sağlamak amacıyla kullanılır.
5. 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"- Cloud SQL Node.js bağlayıcı bağımlılığını yükleyin.
npm install @google-cloud/cloud-sql-connector - 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'; import {Connector} from '@google-cloud/cloud-sql-connector'; const {Pool} = pg; const connector = new Connector(); const clientOpts = await connector.getOptions({ instanceConnectionName: process.env.INSTANCE_CONNECTION_NAME, authType: 'IAM' }); const pool = new Pool({ ...clientOpts, user: process.env.DB_USER, database: process.env.DB_NAME }); 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.
6. Cloud Run uygulamasını dağıtma
Uygulamanızı Cloud Run'a dağıtmak için aşağıdaki komutu çalıştırın:
--region: Örneğin bölgesel konumu (ör. us-central1, asia-east1, us-east1).--source: Dağıtılacak kaynak kodu. Bu durumda,., geçerli klasördekihelloworldkaynak kodunu ifade eder.--set-env-vars: Uygulamayı Cloud SQL veritabanına yönlendirmek için uygulama tarafından kullanılan ortam değişkenlerini ayarlar.--service-account: Cloud Run dağıtımını, bu Codelab'in başında oluşturulan Cloud SQL veritabanına bağlanma izni olan hizmet hesabına bağlar.--allow-unauthenticated: Uygulamaya internetten erişilebilmesi için kimliği doğrulanmamış isteklere izin verir.
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
İstenirse devam etmek istediğinizi onaylamak için y ve Enter tuşlarına basın:
Do you want to continue (Y/n)? y
Birkaç dakika sonra uygulamada ziyaret edebileceğiniz bir URL sağlanır.
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.
7. Tebrikler
Cloud Run'da, Cloud SQL'de çalışan bir PostgreSQL veritabanına bağlanabilen bir Node.js uygulaması dağıtmış olmanız gerekir.
İşlediğimiz konular:
- PostgreSQL İçin Cloud SQL veritabanı oluşturma
- Node.js uygulamasını Cloud Run'a dağıtma
- Cloud SQL Node.js Bağlayıcısı'nı kullanarak uygulamanızı Cloud SQL'e bağlama
Temizleme
Bu eğitimde kullanılan kaynaklar için Google Cloud hesabınızın ücretlendirilmesini önlemek amacıyla kaynakları içeren projeyi silin veya projeyi koruyup tek tek kaynakları silin. Projenin tamamını silmek isterseniz şu komutu çalıştırabilirsiniz:
gcloud projects delete ${GOOGLE_CLOUD_PROJECT}