Mengonfigurasi Hosting Aplikasi

Untuk konfigurasi lanjutan seperti variabel lingkungan atau setelan runtime seperti batas konkurensi, CPU, dan memori, Anda harus membuat dan mengedit file apphosting.yaml di direktori utama aplikasi. File ini juga mendukung referensi ke secret yang dikelola dengan Cloud Secret Manager, sehingga aman untuk check ke kontrol sumber.

Berikut tampilan file apphosting.yaml standar, dengan setelan untuk layanan Cloud Run backend, beberapa variabel lingkungan, dan beberapa referensi ke secret yang dikelola oleh Cloud Secret Manager:

# Settings for Cloud Run
runConfig:
  minInstances: 2
  maxInstances: 100
  concurrency: 100
  cpu: 2
  memoryMiB: 1024

# Environment variables and secrets
env:
  - variable: STORAGE_BUCKET
    value: mybucket.appspot.com
    availability:
      - BUILD
      - RUNTIME

  - variable: API_KEY
    secret: myApiKeySecret

    # Same as API_KEY above but with a pinned version.
  - variable: PINNED_API_KEY
    secret: myApiKeySecret@5

    # Same as API_KEY above but with the long form secret reference as defined by Cloud Secret Manager.
  - variable: VERBOSE_API_KEY
    secret: projects/test-project/secrets/secretID

    # Same as API_KEY above but with the long form secret reference with pinned version.
  - variable: PINNED_VERBOSE_API_KEY
    secret: projects/test-project/secrets/secretID/versions/5

Bagian selanjutnya dari panduan ini memberikan lebih banyak informasi dan konteks untuk contoh setelan ini.

Mengonfigurasi setelan layanan Cloud Run

Dengan setelan apphosting.yaml, Anda dapat mengonfigurasi cara penyediaan layanan Cloud Run. Setelan yang tersedia untuk layanan Cloud Run disediakan dalam objek runConfig:

  • cpu – Jumlah CPU yang digunakan untuk setiap instance penayangan (default 0).
  • memoryMiB – Jumlah memori yang dialokasikan untuk setiap instance inferensi dalam MiB (default 512)
  • maxInstances – Jumlah maksimum container yang pernah dijalankan pada satu waktu (default 100 dan dikelola berdasarkan kuota)
  • minInstances – Jumlah penampung yang selalu aktif (default 0).
  • concurrency – Jumlah permintaan maksimum yang dapat diterima setiap instance penayangan (default 80).

Perhatikan hubungan penting antara cpu dan memoryMiB; memori dapat ditetapkan ke nilai bilangan bulat apa pun antara 128 hingga 32768, tetapi meningkatkan batas memori mungkin memerlukan peningkatan batas CPU:

  • Lebih dari 4 GiB memerlukan setidaknya 2 CPU
  • Lebih dari 8 GiB memerlukan setidaknya 4 CPU
  • Lebih dari 16 GiB memerlukan setidaknya 6 CPU
  • Lebih dari 24 GiB memerlukan setidaknya 8 CPU

Demikian pula, nilai cpu memengaruhi setelan serentak. Jika menetapkan nilai kurang dari 1 CPU, Anda harus menetapkan konkurensi ke 1, dan CPU hanya akan dialokasikan selama pemrosesan permintaan.

Mengonfigurasi lingkungan build

Terkadang, Anda memerlukan konfigurasi tambahan untuk proses build, seperti kunci API pihak ketiga atau setelan yang dapat disesuaikan. App Hosting menawarkan konfigurasi lingkungan di apphosting.yaml untuk menyimpan dan mengambil jenis data ini untuk project Anda.

env:
-   variable: STORAGE_BUCKET
    value: mybucket.appspot.com

Untuk aplikasi Next.js, file dotenv yang berisi variabel lingkungan juga akan berfungsi dengan App Hosting. Sebaiknya gunakan apphosting.yaml untuk kontrol variabel lingkungan terperinci dengan framework apa pun.

Di apphosting.yaml, Anda dapat menentukan proses mana yang memiliki akses ke variabel lingkungan Anda menggunakan properti availability. Anda dapat membatasi variabel lingkungan agar hanya tersedia untuk lingkungan build atau hanya tersedia untuk lingkungan runtime. Secara default, opsi ini tersedia untuk keduanya.

env:
-   variable: STORAGE_BUCKET
    value: mybucket.appspot.com
    availability:
    -   BUILD
    -   RUNTIME

Untuk aplikasi Next.js, Anda juga dapat menggunakan awalan NEXT_PUBLIC_ dengan cara yang sama seperti yang Anda lakukan pada file dotenv untuk membuat variabel dapat diakses di browser.

env:
-   variable: NEXT_PUBLIC_STORAGE_BUCKET
    value: mybucket.appspot.com
    availability:
    -   BUILD
    -   RUNTIME

Kunci variabel yang valid terdiri dari karakter A-Z atau garis bawah. Beberapa kunci variabel lingkungan dicadangkan untuk penggunaan internal. Jangan gunakan salah satu kunci berikut di file konfigurasi Anda:

  • Variabel apa pun yang diawali dengan X_FIREBASE_
  • PORT
  • K_SERVICE
  • K_REVISION
  • K_CONFIGURATION

Menyimpan dan mengakses parameter secret

Informasi sensitif seperti kunci API harus disimpan sebagai secret. Anda dapat mereferensikan secret di apphosting.yaml untuk menghindari pemeriksaan informasi sensitif ke dalam kontrol sumber.

Parameter jenis secret mewakili parameter string yang memiliki nilai yang disimpan di Cloud Secret Manager. Daripada mengambil nilai secara langsung, parameter secret memeriksa keberadaan nilai di Cloud Secret Manager, dan memuat nilai selama peluncuran.

  -   variable: API_KEY
      secret: myApiKeySecret

Secret di Cloud Secret Manager dapat memiliki beberapa versi. Secara default, nilai parameter secret yang tersedia untuk backend langsung Anda disematkan ke versi secret terbaru yang tersedia pada saat backend dibuat. Jika memiliki persyaratan untuk pembuatan versi dan pengelolaan siklus proses parameter, Anda dapat menyematkan ke versi tertentu dengan Cloud Secret Manager. Misalnya, untuk menyematkan ke versi 5:

  - variable: PINNED_API_KEY
    secret: myApiKeySecret@5

Anda dapat membuat secret dengan perintah CLI firebase apphosting:secrets:set, dan Anda akan diminta untuk menambahkan izin yang diperlukan. Alur ini memberi Anda opsi untuk otomatis menambahkan referensi rahasia ke apphosting.yaml.

Untuk menggunakan rangkaian lengkap fungsi Cloud Secret Manager, Anda dapat menggunakan konsol Cloud Secret Manager. Jika melakukannya, Anda harus memberikan izin ke backend App Hosting dengan perintah CLI firebase apphosting:secrets:grantaccess.

Menyinkronkan status Firebase Auth

Aplikasi yang menggunakan Firebase Auth harus mempertimbangkan penggunaan Firebase Web SDK untuk membantu menjaga status autentikasi tetap sinkron antara klien dan server. Hal ini dapat difasilitasi dengan menerapkan FirebaseServerApp dengan pekerja layanan. Alur tugas dasarnya adalah:

  1. Implementasikan pekerja layanan yang menambahkan header yang tepat untuk aplikasi Anda saat diminta ke server.
  2. Dapatkan header dari permintaan di server, lalu konversikan menjadi pengguna autentikasi dengan FirebaseServerApp.