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ızı sağlayan, tümüyle yönetilen, sunucusuz bir platformdur. Bu Codelab, Cloud Run'daki bir Node.js uygulamasının PostgreSQL için Cloud SQL veritabanına IAM Kimlik Doğrulaması kullanarak bir hizmet hesabıyla güvenli şekilde nasıl bağlanacağını gösterir.
Öğrenecekleriniz
Bu laboratuvarda aşağıdakileri nasıl yapacağınızı öğreneceksiniz:
- PostgreSQL veritabanı için Cloud SQL örneği oluşturma
- Node.js uygulamasını Cloud Run'a dağıtma
- Cloud SQL Node.js Connector kitaplığını kullanarak uygulamanızı veritabanınıza bağlayın
Ön koşullar
- Bu laboratuvarda, Cloud Console ve Cloud Shell ortamlarıyla ilgili bilgi sahibi olmanız gerekir.
2. Başlamadan önce
Cloud projesi kurulumu
- Google Cloud Console'da oturum açıp yeni bir proje oluşturun veya mevcut bir projeyi yeniden kullanın. Henüz 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. İstediğiniz zaman güncelleyebilirsiniz.
- Proje Kimliği, tüm Google Cloud projelerinde benzersizdir ve değiştirilemez (belirlendikten sonra değiştirilemez). Cloud Console, otomatik olarak benzersiz bir dize oluşturur. bunun ne olduğunu umursamıyorsunuz. Çoğu codelab'de proje kimliğini (genellikle
PROJECT_ID
olarak tanımlanır) referans almanız gerekir. Oluşturulan kimliği beğenmezseniz rastgele bir kimlik daha oluşturabilirsiniz. Alternatif olarak, kendi ölçümünüzü deneyip mevcut olup olmadığına bakabilirsiniz. Bu adımdan sonra değiştirilemez ve proje süresince kalır. - Bilginiz için bazı API'lerin kullandığı üçüncü bir değer, yani Proje Numarası daha vardır. Bu değerlerin üçü hakkında daha fazla bilgiyi belgelerde bulabilirsiniz.
- Sonraki adımda, Cloud kaynaklarını/API'lerini kullanmak için Cloud Console'da faturalandırmayı etkinleştirmeniz gerekir. Bu codelab'i çalıştırmanın maliyeti, yüksek değildir. Bu eğitim dışında faturalandırma yapılmaması için kaynakları kapatmak isterseniz oluşturduğunuz kaynakları silebilir veya projenin tamamını silebilirsiniz. Yeni Google Cloud kullanıcıları, 300 ABD doları değerindeki ücretsiz denemeden 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
Yetki vermeniz istenirse "Yetkilendir"i tıklayın seçeneğini tıklayın.
Bu komutun tamamlanması birkaç dakika sürebilir ancak sonunda şuna benzer başarılı bir mesaj oluşturacaktır:
Operation "operations/acf.p2-327036483151-73d90d00-47ee-447a-b600-a6badf0eceae" finished successfully.
3. Hizmet Hesabı oluşturun
Cloud Run tarafından kullanılacak bir Google Cloud hizmet hesabı oluşturup yapılandırın. Bu hesap, Cloud SQL'e bağlanmak için gerekli izinlere sahip olmalıdır.
- Yeni bir hizmet hesabı oluşturmak için
gcloud iam service-accounts create
komutunu aşağıdaki şekilde çalıştırın:gcloud iam service-accounts create quickstart-service-account \ --display-name="Quickstart Service Account"
- Cloud SQL İstemcisi rolünü, yeni oluşturduğunuz Google Cloud hizmet hesabına eklemek için gcloud projects add-iam-policy-binding komutunu aşağıdaki gibi çalıştırın. Cloud Shell'de
${GOOGLE_CLOUD_PROJECT}
ifadesi projenizin adıyla değiştirilir. Daha rahat hissediyorsanız bu değişimi 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"
- Cloud SQL Örneği Kullanıcısı rolünü, yeni oluşturduğunuz Google Cloud hizmet hesabına 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"
- Log Writer rolünü, az önce oluşturduğunuz Google Cloud hizmet hesabına 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 kurun
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ü. Belirtilmemişse varsayılan API kullanılır. Mevcut sürümleri görmek için gcloud veritabanı sürümleri belgelerine bakın.
- –cpu: Makinede istenen çekirdek sayısı.
- -bellek: Makinede ne kadar bellek istendiğini gösteren tam sayı değeridir. Bir boyut birimi sağlanmalıdır (örneğin, 3072 MB veya 9 GB). Birim belirtilmezse GB olarak kabul edilir.
- –region: Örneğin, bölgesel konumu (ör. us-central1, asia-east1, us-east1).
- –database-flags: İşaretlerin ayarlanmasına olanak tanır. Bu durumda, Cloud Run'ın daha önce oluşturduğumuz hizmet hesabını kullanarak Cloud SQL'e bağlanmasını sağlamak için
cloudsql.iam_authentication
hizmetini etkinleştiriyoruz.gcloud sql instances create quickstart-instance \ --database-version=POSTGRES_14 \ --cpu=1 \ --memory=4GB \ --region=us-central1 \ --database-flags=cloudsql.iam_authentication=on
Bu komutun tamamlanması birkaç dakika sürebilir.
quickstart-instance
içinde Cloud SQL veritabanı oluşturmak için gcloud sql databases create
komutunu çalıştırın.
gcloud sql databases create quickstart_db \
--instance=quickstart-instance
Veritabanına erişmek amacıyla, 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
5. Başvuruyu Hazırla
HTTP isteklerine yanıt veren bir Node.js uygulaması hazırlayın.
- Cloud Shell'de
helloworld
adında yeni bir dizin oluşturun ve bu dizinde değişiklik yapın:mkdir helloworld cd helloworld
- Bir
package.json
dosyası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şimde bulunmak için
pg
uygulamasını yükleyin.npm install pg
- Gelen http isteklerini kabul etmek için express'i yükleyin.
npm install express
- Uygulama kodunu içeren bir
index.mjs
dosyası oluşturun. Bu kodla:- HTTP isteklerini kabul et
- Veritabanına bağlanın
- HTTP isteğinin zamanını veritabanında depolama
- 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şkeni tarafından tanımlanan 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
.
, mevcuthelloworld
klasöründeki kaynak koduna başvurur. - –set-env-vars: Uygulamanın Cloud SQL veritabanına yönlendirilmesi için kullandığı 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 izinlerine sahip 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 uygulamanın, ziyaret etmeniz için bir URL sağlaması gerekir.
Uygulamanızın nasıl çalıştığını görmek için URL'ye gidin. URL'yi her ziyaret ettiğinizde veya sayfayı her yenilediğinizde, JSON biçiminde döndürülen son beş ziyareti görürsünüz.
7. Tebrikler
Cloud SQL'de çalışan PostgreSQL veritabanına bağlanabilen bir Node.js uygulamasını Cloud Run'a dağıttınız.
İşlediğimiz konular:
- PostgreSQL iç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ğiticide kullanılan kaynaklar için Google Cloud hesabınızın ücretlendirilmesini istemiyorsanız kaynakları içeren projeyi silin veya projeyi tutup tek tek kaynakları silin. Projeyi tamamen silmek istiyorsanız aşağıdaki komutu çalıştırabilirsiniz:
gcloud projects delete ${GOOGLE_CLOUD_PROJECT}