Bu codelab hakkında
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 PostgreSQL için Cloud SQL veritabanına nasıl bağlanacağı gösterilmektedir.
Öğrenecekleriniz
Bu laboratuvarda şunları öğreneceksiniz:
- PostgreSQL için Cloud SQL örneği oluşturma
- Cloud Run'a, Cloud SQL veritabanınıza bağlanan bir uygulama dağıtma
Öğrenecekleriniz
- PostgreSQL için Cloud SQL örneği oluşturma
- Cloud Run'a, Cloud SQL veritabanınıza bağlanan bir uygulama 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, 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.
- 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 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}'
- Tüm proje kimliklerinizi şu komutla listeleyebilirsiniz:
- Biçim:
- Yetkilendirme isteğinde bulunulursa devam etmek için Yetkilendir'i tıklayın.
- Aşağıdaki mesajı görürsünüz:
Updated property [core/project].
WARNING
görüyorsanız veDo you want to continue (Y/N)?
soruyorsanız proje kimliğini yanlış girdiğiniz muhtemeldir.N
,Enter
tuşlarına basın vegcloud 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 \
sqladmin.googleapis.com \
run.googleapis.com \
artifactregistry.googleapis.com \
cloudbuild.googleapis.com \
networkconnectivity.googleapis.com \
servicenetworking.googleapis.com \
cloudaicompanion.googleapis.com
Yetkilendirme isteğinde bulunulursa devam etmek için Yetkilendir'i 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
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 doğru izinlere sahip olmalıdır.
- 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" - 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. Cloud SQL veritabanı oluşturma
- Private Service Connect ile Cloud Run'dan Cloud SQL'e ağ bağlantısına izin vermek için bir Hizmet Bağlantısı Politikası oluşturun
gcloud network-connectivity service-connection-policies create quickstart-policy \
--network=default \
--project=${GOOGLE_CLOUD_PROJECT} \
--region=us-central1 \
--service-class=google-cloud-sql \
--subnets=https://www.googleapis.com/compute/v1/projects/${GOOGLE_CLOUD_PROJECT}/regions/us-central1/subnetworks/default - Veritabanı için benzersiz bir şifre oluşturma
export DB_PASSWORD=$(openssl rand -base64 20)
- Cloud SQL örneği oluşturmak için
gcloud sql instances create
komutunu çalıştırmagcloud sql instances create quickstart-instance \
--project=${GOOGLE_CLOUD_PROJECT} \
--root-password=${DB_PASSWORD} \
--database-version=POSTGRES_17 \
--tier=db-perf-optimized-N-2 \
--region=us-central1 \
--ssl-mode=ENCRYPTED_ONLY \
--no-assign-ip \
--enable-private-service-connect \
--psc-auto-connections=network=projects/${GOOGLE_CLOUD_PROJECT}/global/networks/default
Bu komutun çalıştırılması birkaç dakika sürebilir.
quickstart-instance
içinde bir Cloud SQL veritabanı oluşturmak içingcloud sql databases create
komutunu çalıştırın.gcloud sql databases create quickstart_db \
--instance=quickstart-instance
8. Başvuruyu hazırlama
HTTP isteklerine yanıt veren bir Node.js uygulaması hazırlayın.
- Cloud Shell'de
helloworld
adlı yeni bir dizin oluşturun ve ardından bu dizine geçin:mkdir helloworld
cd helloworld - 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" - PostgreSQL veritabanıyla etkileşimde bulunmak için
pg
'ü 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 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
cat > index.mjs << "EOF"
import express from 'express';
import pg from 'pg';
const { Pool } = pg;
const pool = new Pool({
host: process.env.DB_HOST,
user: process.env.DB_USER,
password: process.env.DB_PASSWORD,
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. Uygulamayı Cloud Run'a 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
Y
veEnter
'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.
10. Tebrikler
Bu laboratuvarda şunları nasıl yapacağınızı öğrendiniz:
- PostgreSQL için Cloud SQL örneği oluşturma
- Cloud Run'a, Cloud SQL veritabanınıza bağlanan bir uygulama 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:
- Codelab proje dizinini silin:
rm -rf ~/task-app
- 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
- Cloud SQL Node.js Bağlantı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ğlantısı'nı kullanarak PostgreSQL için Cloud SQL ile Cloud Run'a tam yığın Angular uygulaması dağıtma
- Node.js Admin SDK'sını kullanarak Firestore ile Cloud Run'a tam yığın Angular uygulaması dağıtma
- Node.js Admin SDK'sını kullanarak Firestore ile Cloud Run'a tam yığın Next.js uygulaması dağıtma