Memigrasikan apl Node.js dari Heroku ke Cloud Run


Tutorial ini menjelaskan cara memigrasikan aplikasi web Node.js yang berjalan di Heroku ke Cloud Run di Google Cloud. Tutorial ini ditujukan kepada arsitek dan pemilik produk yang ingin memigrasikan aplikasi mereka dari Heroku ke layanan terkelola di Google Cloud.

Cloud Run adalah platform komputasi terkelola yang memungkinkan Anda menjalankan container stateless yang dapat dipanggil melalui permintaan HTTP. Alat ini dibangun di Knative open source, yang memungkinkan portabilitas di seluruh platform serta mendukung alur kerja container dan standar untuk continuous delivery. Platform Cloud Run terintegrasi secara baik dengan rangkaian produk Google Cloud dan memudahkan Anda untuk mendesain dan mengembangkan aplikasi yang portabel, skalabel, dan tangguh.

Dalam tutorial ini, Anda akan mempelajari cara memigrasikan aplikasi ke Google Cloud yang yang ditulis dalam Node.js dan menggunakan Heroku Postgres sebagai layanan pendukung di Heroku. Aplikasi web ditempatkan dalam container dan dihosting di Cloud Run, serta menggunakan Cloud SQL untuk PostgreSQL sebagai lapisan persistensinya.

Dalam tutorial ini, Anda menggunakan aplikasi sederhana bernama Tasks yang memungkinkan Anda melihat dan membuat tugas. Tugas ini disimpan di Heroku Postgres dalam deployment aplikasi saat ini di Heroku.

Tutorial ini mengasumsikan bahwa Anda telah memahami fungsi dasar Heroku dan Anda memiliki akun Heroku (atau akses ke akun tersebut). Langkah ini juga menganggap Anda sudah familier dengan Cloud Run .Cloud SQL .Docker , dan Node.js.

Tujuan

  • Build image Docker untuk men-deploy aplikasi ke Cloud Run.
  • Buat instance Cloud SQL untuk PostgreSQL yang berfungsi sebagai backend setelah migrasi ke Google Cloud.
  • Tinjau kode Node.js untuk memahami cara Cloud Run terhubung ke Cloud SQL dan melihat perubahan kode (jika ada) yang diperlukan untuk bermigrasi ke Cloud Run dari Heroku.
  • Memigrasikan data dari Heroku Postgres ke Cloud SQL untuk PostgreSQL.
  • Men-deploy aplikasi ke Cloud Run.
  • Menguji aplikasi yang di-deploy.

Biaya

Dalam dokumen ini, Anda menggunakan komponen Google Cloud yang dapat ditagih berikut:

Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda, gunakan kalkulator harga. Pengguna baru Google Cloud mungkin memenuhi syarat untuk mendapatkan uji coba gratis.

Anda mungkin juga akan dikenai biaya untuk resource yang Anda gunakan di Heroku.

Sebelum memulai

  1. Login ke akun Google Cloud Anda. Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa produk kami dalam skenario dunia nyata. Pelanggan baru juga mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.
  2. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  3. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

  4. Aktifkan API Cloud SQL, Cloud Build, Cloud Run, Container Registry, Service Networking, Serverless VPC Access.

    Mengaktifkan API

  5. Pastikan Anda memiliki peran berikut di project: Cloud Run > Cloud Run Admin, Cloud Storage > Storage Admin, Cloud SQL > Cloud SQL Admin, Compute Engine > Compute Network Admin, Resource Manager > Project IAM Admin, Cloud Build > Cloud Build Editor, Serverless VPC Access > Serverless VPC Access Admin, Logging > Logs Viewer, Service Accounts > Service Account Admin, Service Accounts > Service Account User, and Service Usage > Service Usage Consumer

    Memeriksa peran

    1. Di konsol Google Cloud, buka halaman IAM.

      Buka IAM
    2. Pilih project.
    3. Di kolom Akun utama, cari baris yang berisi alamat email Anda.

      Jika alamat email Anda tidak ada di kolom tersebut, berarti Anda tidak memiliki peran apa pun.

    4. Di kolom Peran untuk baris yang berisi alamat email Anda, periksa apakah daftar peran menyertakan peran yang diperlukan.

    Memberikan peran

    1. Di konsol Google Cloud, buka halaman IAM.

      Buka IAM
    2. Pilih project.
    3. Klik Berikan akses.
    4. Di kolom Akun utama baru, masukkan alamat email Anda.
    5. Di daftar Pilih peran, pilih peran.
    6. Untuk memberikan peran tambahan, klik Tambahkan peran lain, lalu tambahkan setiap peran tambahan.
    7. Klik Simpan.
  6. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  7. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

  8. Aktifkan API Cloud SQL, Cloud Build, Cloud Run, Container Registry, Service Networking, Serverless VPC Access.

    Mengaktifkan API

  9. Pastikan Anda memiliki peran berikut di project: Cloud Run > Cloud Run Admin, Cloud Storage > Storage Admin, Cloud SQL > Cloud SQL Admin, Compute Engine > Compute Network Admin, Resource Manager > Project IAM Admin, Cloud Build > Cloud Build Editor, Serverless VPC Access > Serverless VPC Access Admin, Logging > Logs Viewer, Service Accounts > Service Account Admin, Service Accounts > Service Account User, and Service Usage > Service Usage Consumer

    Memeriksa peran

    1. Di konsol Google Cloud, buka halaman IAM.

      Buka IAM
    2. Pilih project.
    3. Di kolom Akun utama, cari baris yang berisi alamat email Anda.

      Jika alamat email Anda tidak ada di kolom tersebut, berarti Anda tidak memiliki peran apa pun.

    4. Di kolom Peran untuk baris yang berisi alamat email Anda, periksa apakah daftar peran menyertakan peran yang diperlukan.

    Memberikan peran

    1. Di konsol Google Cloud, buka halaman IAM.

      Buka IAM
    2. Pilih project.
    3. Klik Berikan akses.
    4. Di kolom Akun utama baru, masukkan alamat email Anda.
    5. Di daftar Pilih peran, pilih peran.
    6. Untuk memberikan peran tambahan, klik Tambahkan peran lain, lalu tambahkan setiap peran tambahan.
    7. Klik Simpan.

Menyiapkan lingkungan Anda

  1. Buka Cloud Shell.

    BUKA Cloud Shell

  2. Di Cloud Shell, tetapkan variabel lingkungan dan nilai default untuk Google Cloud CLI yang digunakan dalam tutorial ini.

    gcloud config set project PROJECT_ID
    gcloud config set run/region us-central1
    

    Ganti PROJECT_ID dengan project ID Anda.

Arsitektur

Gambar berikut menguraikan arsitektur aplikasi web di Heroku (sebagaimana adanya) dan tata letak arsitekturnya di Google Cloud (yang akan Anda build).

Arsitektur as-is di Heroku.
Gambar 1. Arsitektur as-is di Heroku

Aplikasi Tasks yang saat ini di-deploy di Heroku terdiri dari satu atau beberapa dyno web. Dyno web dapat menerima dan merespons traffic HTTP, tidak seperti dyno pekerja, yang lebih cocok untuk pekerjaan latar belakang dan tugas berjangka waktu. Aplikasi menyalurkan halaman indeks yang menampilkan tugas yang disimpan dalam database Postgres, menggunakan library template Mustache untuk Node.js.

Anda dapat mengakses aplikasi di URL HTTPS. Rute /tasks di URL tersebut memungkinkan Anda membuat tugas baru.

Arsitektur as-is di Heroku.
Gambar 2. Arsitektur yang Anda bangun di Google Cloud

Di Google Cloud, Cloud Run digunakan sebagai platform serverless untuk men-deploy aplikasi Tasks. Cloud Run dirancang untuk menjalankan container berbasis permintaan dan stateless. Alat ini sangat cocok saat Anda memerlukan layanan terkelola untuk mendukung aplikasi dalam container yang melakukan penskalaan otomatis dan juga menskalakan hingga nol saat tidak menyalurkan traffic.

Memetakan komponen yang digunakan dalam Heroku ke Google Cloud

Tabel berikut memetakan komponen di platform Heroku ke Google Cloud. Pemetaan ini membantu Anda menerjemahkan arsitektur yang diuraikan dalam tutorial ini dari Heroku ke Google Cloud.

Komponen Platform Heroku Google Cloud
Container Dyno: Heroku menggunakan model container untuk membangun dan menskalakan aplikasi Heroku. Container Linux ini disebut dyno dan dapat diskalakan ke angka yang Anda tentukan untuk mendukung permintaan resource untuk aplikasi Heroku Anda. Anda dapat memilih dari berbagai jenis dyno berdasarkan kebutuhan memori dan CPU aplikasi Anda. Container Cloud Run: Google Cloud mendukung pengoperasian workload dalam container dalam container stateless yang dapat dijalankan di lingkungan yang terkelola sepenuhnya atau di klaster Google Kubernetes Engine (GKE).
Aplikasi web Aplikasi Heroku: Dyno adalah elemen penyusun aplikasi Heroku. Aplikasi biasanya terdiri dari satu atau beberapa jenis dyno, biasanya kombinasi dyno web dan pekerja. Layanan Cloud Run: Aplikasi web dapat dimodelkan sebagai layanan Cloud Run. Setiap layanan mendapatkan endpoint HTTPS-nya sendiri dan dapat secara otomatis meningkatkan atau menurunkan skala dari 0 ke N berdasarkan traffic ke endpoint layanan Anda.
Database Heroku Postgres adalah database as a service (DaaS) Heroku berdasarkan PostgreSQL. Cloud SQL adalah layanan database terkelola untuk database relasional di Google Cloud.

Men-deploy contoh aplikasi web Tasks ke Heroku

Bagian berikutnya menunjukkan cara menyiapkan antarmuka command line (CLI) untuk Heroku, meng-clone repositori sumber GitHub, dan men-deploy aplikasi ke Heroku.

Menyiapkan antarmuka command line untuk Heroku

Tutorial ini menjalankan Heroku CLI di Cloud Shell dan harus melakukan autentikasi menggunakan kunci API Heroku. Saat dijalankan di Cloud Shell, Heroku CLI tidak dapat melakukan autentikasi menggunakan sandi atau autentikasi berbasis web.

Atau, jika Anda menjalankan contoh di terminal lokal, Anda dapat menggunakan metode autentikasi Heroku CLI apa pun. Saat menjalankan tutorial di terminal lokal, Anda juga harus menginstal Google Cloud CLI, git, dan Docker.

  1. Login ke konsol web untuk Heroku, lalu dari halaman setelan akun Anda, salin nilai kunci API Anda.

  2. Di Cloud Shell, instal Heroku CLI

  3. Di Cloud Shell, lakukan autentikasi Heroku CLI. Saat diminta memasukkan sandi, masukkan nilai kunci API yang Anda salin dari konsol Heroku, bukan sandi yang digunakan untuk login ke konsol.

    heroku login --interactive
    

Meng-clone repositori sumber

  1. Di Cloud Shell, lakukan clone contoh repositori GitHub aplikasi Tasks:

    git clone https://github.com/GoogleCloudPlatform/migrate-webapp-heroku-to-cloudrun-node.git
    
  2. Ubah direktori ke direktori yang dibuat dengan meng-clone repositori:

    cd migrate-webapp-heroku-to-cloudrun-node
    

    Direktori tersebut berisi file berikut:

    • Skrip Node.js yang disebut index.js dengan kode untuk rute yang disalurkan oleh aplikasi web.
    • File package.json dan package-lock.json yang menguraikan dependensi aplikasi web. Anda harus menginstal dependensi ini agar aplikasi dapat berjalan.
    • File Procfile yang menentukan perintah yang dijalankan aplikasi saat aplikasi dimulai. Anda membuat file Procfile untuk men-deploy aplikasi ke Heroku.
    • Direktori views, dengan konten HTML yang disajikan oleh aplikasi web pada rute "/".
    • File .gitignore

Men-deploy aplikasi ke Heroku

  1. Di Cloud Shell, buat aplikasi Heroku:

    heroku create
    

    Catat nama yang dibuat untuk aplikasi tersebut. Anda memerlukan nilai ini pada langkah berikutnya.

  2. Buat variabel lingkungan untuk nama aplikasi Heroku:

    export APP_NAME=APP_NAME
    

    Ganti APP_NAME dengan nama aplikasi yang ditampilkan oleh perintah heroku create.

  3. Tambahkan add-on Heroku Postgres untuk menyediakan database PostgreSQL:

    heroku addons:create heroku-postgresql:mini
    
  4. Pastikan add-on berhasil ditambahkan:

    heroku addons
    

    Jika add-on Postgres berhasil ditambahkan, Anda akan melihat pesan yang serupa seperti berikut:

    Add-on               Plan     Price       State
    -----------------    -----    --------    -----
    heroku-postgresql    mini     5$/month    created
    
  5. Deploy aplikasi ke Heroku:

    git push heroku master
    
  6. Jalankan perintah berikut untuk mengonfirmasi nilai DATABASE_URL.

    heroku config
    

    Catat nilai yang diambil untuk DATABASE_URL. Anda memerlukan nilai ini pada langkah berikutnya.

  7. Menjalankan container Docker.

    docker run -it --rm postgres psql "DATABASE_URL"
    

    Ganti DATABASE_URL dengan URL Heroku Postgres yang Anda catat di langkah sebelumnya.

  8. Di container Docker, buat tabel TASKS menggunakan perintah berikut:

    CREATE TABLE TASKS
    (DESCRIPTION TEXT NOT NULL);
    
  9. Keluar dari container:

    exit
    
  10. Di Cloud Shell, dapatkan URL Web untuk aplikasi Heroku Anda dengan menjalankan perintah berikut:

    heroku info
    
  11. Buka URL web di jendela browser. Aplikasi akan terlihat seperti screenshot berikut (meskipun versi Anda tidak akan mencantumkan tugas):

    Aplikasi daftar tugas di browser web.

  12. Membuat contoh tugas di aplikasi Anda dari browser. Pastikan tugas diambil dari database dan terlihat di UI.

Menyiapkan kode aplikasi web untuk migrasi ke Cloud Run

Bagian ini menjelaskan langkah-langkah yang harus Anda selesaikan guna menyiapkan aplikasi web untuk deployment ke Cloud Run.

Membangun dan memublikasikan container Docker ke Container Registry

Anda memerlukan image Docker untuk membangun container aplikasi agar dapat berjalan di Cloud Run. Anda dapat mem-build container secara manual atau dengan menggunakan Buildpacks.

Mem-build container secara manual

  1. Di Cloud Shell, buat Dockerfile dalam direktori yang dibuat dengan meng-clone repositori untuk tutorial ini:

    cat <<"EOF" > Dockerfile
    # Use the official Node image.
    # https://hub.docker.com/_/node
    FROM node:10-alpine
    
    # Create and change to the app directory.
    WORKDIR /app
    
    # Copying this separately prevents re-running npm install on every code change.
    COPY package*.json ./
    RUN npm install
    
    # Copy local code to the container image.
    COPY . /app
    
    # Configure and document the service HTTP port.
    ENV PORT 8080
    EXPOSE $PORT
    
    # Run the web service on container startup.
    CMD ["npm", "start"]
    EOF
    
  2. Bangun container Anda dengan Cloud Build dan memublikasikan gambar ke Container Registry:

    gcloud builds submit --tag gcr.io/PROJECT_ID/APP_NAME:1 \
      --gcs-log-dir=gs://PROJECT_ID_cloudbuild
    
  3. Buat variabel lingkungan untuk menyimpan nama image Docker yang Anda buat:

    export IMAGE_NAME="gcr.io/PROJECT_ID/APP_NAME:1"
    

Membangun container dengan Buildpacks

  1. Di Cloud Shell, instal paket CLI.

  2. Setel CLI paket untuk menggunakan builder Heroku secara default:

    pack config default-builder heroku/buildpacks:22
    
  3. Buat variabel lingkungan untuk menyimpan nama image Docker:

    export IMAGE_NAME=gcr.io/PROJECT_ID/APP_NAME:1
    
  4. Build image menggunakan perintah pack, lalu kirim atau publikasikan image ke Container Registry:

    pack build --publish $IMAGE_NAME
    

Membuat instance Cloud SQL untuk PostgreSQL

Anda membuat instance Cloud SQL untuk PostgreSQL agar berfungsi sebagai backend untuk aplikasi web. Dalam tutorial ini, PostgreSQL paling cocok sebagai aplikasi contoh yang di-deploy di Heroku, yang menggunakan database Postgres sebagai backend-nya. Untuk tujuan aplikasi ini, bermigrasi ke Cloud SQL untuk PostgreSQL dari layanan Postgres terkelola tidak memerlukan perubahan skema.

  1. Siapkan jaringan Anda untuk Cloud SQL dengan alamat IP pribadi.

    gcloud compute addresses create google-managed-services-default \
      --global \
      --purpose=VPC_PEERING \
      --prefix-length=16 \
      --description="peering range for CloudSQL Private Service Access" \
      --network=default
    
    gcloud services vpc-peerings connect \
      --service=servicenetworking.googleapis.com \
      --ranges=google-managed-services-default \
      --network=default \
      --project=PROJECT_ID
    
  2. Buat variabel lingkungan bernama CLOUDSQL_DB_NAME untuk menyimpan nama instance database yang Anda buat di langkah berikutnya:

    export CLOUDSQL_DB_NAME=tasks-db
    
  3. Membuat Database:

    gcloud sql instances create $CLOUDSQL_DB_NAME \
    --cpu=1 \
    --memory=4352Mib \
    --database-version=POSTGRES_15 \
    --region=us-central1 \
    --network default \
    --no-assign-ip
    

    Instance mungkin memerlukan waktu beberapa menit untuk diinisialisasi.

  4. Setel sandi untuk pengguna Postgres:

    gcloud sql users set-password postgres \
        --instance=$CLOUDSQL_DB_NAME  \
        --password=POSTGRES_PASSWORD
    

    Ganti POSTGRES_PASSWORD dengan sandi yang ingin Anda gunakan untuk database Postgres.

Mengimpor data ke Cloud SQL dari Heroku Postgres

Ada beberapa pola migrasi yang dapat Anda gunakan untuk memigrasikan data ke Cloud SQL. Secara umum, pendekatan terbaik yang memerlukan sedikit atau tidak ada periode nonaktif adalah dengan mengonfigurasi Cloud SQL sebagai replika untuk database yang sedang dimigrasikan, dan menjadikan Cloud SQL sebagai instance utama setelah migrasi. Heroku Postgres tidak mendukung replika eksternal (pengikut). Jadi, dalam tutorial ini, Anda harus menggunakan alat open source untuk memigrasikan skema aplikasi.

Untuk aplikasi Tasks dalam tutorial ini, Anda menggunakan pg_dump aplikasi utilitas untuk mengekspor data dari Heroku Postgres ke bucket Cloud Storage lalu mengimpornya ke Cloud SQL. Utilitas ini dapat mentransfer data di seluruh versi homogen atau jika versi database tujuan lebih baru dari database sumber.

  1. Di Cloud Shell, dapatkan kredensial database untuk database Heroku Postgres yang dilampirkan ke aplikasi contoh. Anda memerlukan kredensial ini pada langkah berikutnya.

    heroku pg:credentials:url
    

    Perintah ini menampilkan string informasi koneksi dan URL koneksi untuk aplikasi Anda. String informasi koneksi memiliki format berikut:

    "dbname=DATABASE_NAME host=FQDN port=5432 user=USER_NAME password=PASSWORD_STRING sslmode=require"
    

    Anda memerlukan nilai yang ditampilkan dalam string koneksi di langkah berikutnya.

    Untuk contoh nilai FQDN (nama domain yang sepenuhnya memenuhi syarat) dalam string informasi koneksi, lihat dokumentasi Heroku.

  2. Tetapkan variabel lingkungan untuk menyimpan nilai Heroku yang Anda gunakan pada langkah-langkah berikutnya:

    export HEROKU_PG_DBNAME=DATABASE_NAME
    export HEROKU_PG_HOST=FQDN
    export HEROKU_PG_USER=USER_NAME
    export HEROKU_PG_PASSWORD=PASSWORD_STRING
    

    Ganti kode berikut:

    • DATABASE_NAME: nama database yang ditampilkan dalam string informasi.
    • FQDN: FQDN yang ditampilkan dalam string informasi.
    • USER_NAME: nama pengguna yang ditampilkan dalam string informasi.
    • PASSWORD_STRING: string sandi yang ditampilkan dalam string informasi.
  3. Buat cadangan format SQL dari database Heroku Postgres:

    docker run \
      -it --rm \
      -e PGPASSWORD=$HEROKU_PG_PASSWORD \
      -v $(pwd):/tmp \
      --entrypoint "pg_dump" \
      postgres \
      -Fp \
      --no-acl \
      --no-owner \
      -h $HEROKU_PG_HOST \
      -U $HEROKU_PG_USER \
      $HEROKU_PG_DBNAME > herokudump.sql
    
  4. Buat variabel lingkungan untuk menyimpan nama bucket Cloud Storage Anda:

    export PG_BACKUP_BUCKET=gs://PROJECT_ID-pg-backup-bucket
    
  5. Membuat bucket Cloud Storage:

    gcloud storage buckets create $PG_BACKUP_BUCKET \
      --location=us-central1 \
      --public-access-prevention \
      --uniform-bucket-level-access
    
  6. Upload file SQL ke bucket ini:

    gcloud storage cp herokudump.sql $PG_BACKUP_BUCKET/herokudump.sql
    
  7. Otorisasi instance Cloud SQL Anda dengan peran yang diperlukan untuk mengimpor file SQL dari bucket Cloud Storage:

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member=serviceAccount:$(gcloud sql instances describe $CLOUDSQL_DB_NAME --format='get("serviceAccountEmailAddress")') \
      --role=roles/storage.objectAdmin
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member=serviceAccount:$(gcloud sql instances describe $CLOUDSQL_DB_NAME --format='get("serviceAccountEmailAddress")') \
      --role=roles/cloudsql.editor
    
  8. Impor file SQL ke instance Cloud SQL:

    gcloud sql import sql $CLOUDSQL_DB_NAME $PG_BACKUP_BUCKET/herokudump.sql \
      --database=postgres \
      --user=postgres
    

    Saat diminta do you want to continue (y/n), masukkan "y".

Cara Cloud Run mengakses database Cloud SQL

Sama seperti aplikasi web yang di-deploy ke Heroku yang perlu terhubung ke instance terkelola Heroku Postgres, Cloud Run memerlukan akses ke Cloud SQL agar dapat membaca dan menulis data.

Cloud Run berkomunikasi dengan Cloud SQL menggunakan proxy Cloud SQL yang diaktifkan dan dikonfigurasi secara otomatis saat Anda men-deploy container ke Cloud Run. Database tidak perlu memiliki alamat IP eksternal yang disetujui karena semua komunikasi yang diterimanya berasal dari proxy yang menggunakan TCP aman.

Kode Anda perlu memanggil operasi database (seperti mengambil data dari database atau menulisnya) dengan memanggil proxy melalui soket UNIX.

Karena aplikasi web ini ditulis dalam Node.js, Anda harus menggunakan library pg-connection-string untuk mengurai URL database dan membuat objek config. Keuntungan dari pendekatan ini adalah membuat koneksi ke database backend menjadi lancar di seluruh Heroku dan Cloud Run.

Pada langkah berikutnya, Anda meneruskan URL database sebagai variabel lingkungan saat men-deploy aplikasi web.

Men-deploy aplikasi contoh ke Cloud Run

  1. Di Cloud Shell, konfigurasikan akses vpc serverless untuk mengizinkan traffic pribadi dari Cloud Run ke Cloud SQL:

    gcloud compute networks subnets create serverless-connector-subnet \
    --network=default \
    --range=10.0.0.0/28 \
    --region=us-central1
    
    gcloud compute networks vpc-access connectors create serverless-connector \
    --region=us-central1 \
    --subnet=serverless-connector-subnet
    
  2. Di Cloud Shell, buat variabel lingkungan yang menyimpan nama koneksi instance Cloud SQL yang Anda buat:

    export DB_CONN_NAME=$(gcloud sql instances describe $CLOUDSQL_DB_NAME --format='value(connectionName)')
    
  3. Buat variabel lingkungan bernama DATABASE_URL untuk menyimpan string koneksi yang akan terhubung ke Proxy Cloud SQL melalui port UNIX.

    export DATABASE_URL="socket:/cloudsql/${DB_CONN_NAME}?db=postgres&user=postgres&password=POSTGRES_PASSWORD"
    
  4. Buat akun layanan untuk Cloud Run dengan peran IAM untuk terhubung ke database:

    gcloud iam service-accounts create sa-run-db-client
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:sa-run-db-client@PROJECT_ID. \
        --role=roles/cloudsql.client
    
  5. Men-deploy aplikasi web ke Cloud Run:

    gcloud run deploy tasksapp-PROJECT_ID \
        --image=$IMAGE_NAME \
        --service-account=sa-run-db-client@PROJECT_ID. \
        --set-env-vars=DATABASE_URL=$DATABASE_URL \
        --add-cloudsql-instances $DB_CONN_NAME \
        --vpc-connector serverless-connector \
        --allow-unauthenticated
    
    

    Perintah sebelumnya juga menautkan container Cloud Run Anda ke instance database Cloud SQL yang Anda buat. Perintah tersebut menetapkan variabel lingkungan agar Cloud Run mengarah ke string DATABASE_URL yang Anda buat di langkah sebelumnya.

Menguji aplikasi

  1. Di Cloud Shell, dapatkan URL tempat Cloud Run menyalurkan traffic:

    gcloud run services list
    

    Anda juga dapat meninjau Layanan Cloud Run di Konsol Google Cloud.

  2. Pastikan aplikasi web Anda menerima permintaan HTTP dengan membuka URL Layanan Cloud Run.

Cloud Run membuat, atau menjalankan, container baru saat permintaan HTTP dikirim ke endpoint penyaluran dan jika sebuah container belum berjalan. Ini berarti permintaan yang menyebabkan container baru muncul mungkin memerlukan waktu sedikit lebih lama untuk ditayangkan. Mengingat waktu tambahan tersebut, pertimbangkan jumlah permintaan serentak yang dapat didukung aplikasi Anda dan persyaratan memori tertentu yang mungkin dimilikinya.

Untuk aplikasi ini, Anda menggunakan setelan serentak default, yang memungkinkan layanan Cloud Run menyalurkan 80 permintaan secara serentak dari satu container.

Pembersihan

Agar tidak menimbulkan tagihan ke akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini: Anda mungkin juga ingin menghapus resource yang dibuat di Heroku untuk tutorial ini.

Menghapus project Google Cloud

  1. Di konsol Google Cloud, buka halaman Manage resource.

    Buka Manage resource

  2. Pada daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
  3. Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.

Menghapus Aplikasi Heroku

Untuk menghapus aplikasi contoh yang Anda deploy ke Heroku dan add-on PostgreSQL terkait, jalankan perintah berikut:

heroku apps:destroy -a APP_NAME

Langkah berikutnya