Menguji deployment aplikasi secara lokal

Anda dapat melakukan pengujian lokal aplikasi sebelum deployment App Hosting menggunakan emulator App Hosting, yang merupakan bagian dari Firebase Local Emulator Suite.

Sebelum menggunakan emulator App Hosting, pastikan Anda memahami keseluruhan alur kerja Local Emulator Suite Firebase Local, dan Anda menginstal serta mengonfigurasi Local Emulator Suite Local dan meninjau perintah CLI-nya.

Topik ini mengasumsikan bahwa Anda sudah memahami App Hosting. Jika perlu, tinjau pengantar App Hosting dan materi lainnya untuk membantu Anda memahami cara kerja App Hosting.

Apa yang dapat saya lakukan dengan emulator App Hosting?

Emulator App Hosting memungkinkan Anda menguji dan meningkatkan kualitas aplikasi web secara lokal. Hal ini dapat menyederhanakan proses pengembangan dan meningkatkan kualitas aplikasi web yang dibangun menggunakan Firebase dan di-deploy di App Hosting.

Emulator App Hosting:

  1. Memungkinkan Anda menjalankan aplikasi web secara lokal, dengan variabel lingkungan dan secret yang ditentukan dalam file konfigurasi apphosting.yaml.
  2. Dapat mengganti variabel lingkungan dan secret untuk digunakan di emulator dengan file apphosting.emulator.yaml.
  3. Dapat digunakan bersama emulator Firebase lainnya. Jika Anda menggunakan Firestore, Auth, atau emulator lainnya, Local Emulator Suite akan memastikan bahwa emulator ini dimulai terlebih dahulu sebelum emulator App Hosting.

Mengonfigurasi emulator

Untuk memulai, instal dan lakukan inisialisasi Local Emulator Suite seperti yang dijelaskan di Menginstal, mengonfigurasi, dan mengintegrasikan Local Emulator Suite. Selain emulator Firebase lainnya yang ingin Anda siapkan, pastikan untuk memilih App Hosting Emulator. CLI akan meminta Anda untuk memasukkan beberapa nilai emulator App Hosting, termasuk:

  • Direktori root aplikasi Anda relatif terhadap project; hal ini penting jika Anda menggunakan monorepo dengan App Hosting.
  • Apakah Anda ingin mengganti nilai apa pun untuk pengembangan lokal.
  • Apakah Anda ingin memberikan akses ke secret kepada rekan tim untuk pengembangan lokal.
firebase init emulators
=== Emulators Setup
? Which Firebase emulators do you want to set up? Press Space to select emulators, then Enter to confirm your choices. (Press
<space> to select, <a> to toggle all, <i> to invert selection, and <enter> to proceed)
❯◯ App Hosting Emulator
 ◯ Firestore Emulator
 ◯ Database Emulator
 ◯ Hosting Emulator
 ◯ Pub/Sub Emulator
 ◯ Storage Emulator
 ◯ Eventarc Emulator
(Move up and down to reveal more choices)

? Specify your app's root directory relative to your project (./)

? The App Hosting emulator uses a file called apphosting.emulator.yaml to
override values in apphosting.yaml for local testing. This codebase does not
have one, would you like to create it? (Y/n)

? Which environment variables would you like to override? (Press <space> to
select, <a> to toggle all, <i> to invert selection, and <enter> to proceed)
❯◯ MEMCACHE_ADDR
 ◯ API_KEY

? What new value would you like for plaintext MEMCACHE_ADDR?

? What would you like to name the secret reference for API_KEY? (test-api-key)

? What new value would you like for secret TESTKEY [input is hidden]? [input is hidden]

? Your config has secret values. Please provide a comma-separated list of users
or groups who should have access to secrets for local development:

✔  Successfully set IAM bindings on secret test-api-key.

Setiap nilai yang Anda berikan dalam alur penyiapan ini digunakan untuk memperbarui konfigurasi emulator App Hosting di firebase.json. Anda juga dapat mengonfigurasi emulator App Hosting dengan mengupdate firebase.json secara langsung. Skema untuk emulator App Hosting adalah:

{
  ...
  "emulators": {
    "apphosting": {
      "startCommand": <command> [optional]
      "rootDirectory": <path> [optional]
      }
    }
  }
  • startCommand otomatis dibuat dan ditetapkan saat emulator diinisialisasi. Jika tidak disediakan, emulator akan mendeteksi dan menjalankan perintah developer pengelola paket Anda.
  • rootDirectory digunakan untuk mendukung penyiapan project monorepo. Jika aplikasi web Anda berada di subdirektori, Anda harus memberikan jalur direktori tersebut yang relatif terhadap root (lokasi firebase.json).

Mengelola emulasi

Inisialisasi emulator akan membuat file apphosting.emulator.yaml di direktori root aplikasi Anda. File konfigurasi ini memiliki skema yang sama dengan file apphosting.yaml yang digunakan dalam produksi, tetapi hanya ditujukan untuk pengembangan lokal. Secara default, emulator membaca konfigurasi dari file apphosting.yaml Anda, tetapi jika file apphosting.emulator.yaml ada, konfigurasi dalam file tersebut akan diprioritaskan dan lebih diutamakan.

File apphosting.emulator.yaml dirancang agar aman untuk di-commit dan dibagikan kepada rekan kerja. Untuk membantu memastikan Anda tidak secara tidak sengaja melakukan commit data sensitif ke repositori sumber, setiap variabel lingkungan yang merupakan secret di apphosting.yaml juga harus merupakan secret di apphosting.emulator.yaml. Jika secret tidak perlu diubah antara produksi dan pengembangan lokal (misalnya, kunci Gemini API), secret tersebut tidak perlu ditambahkan ke apphosting.emulator.yaml; sebagai gantinya, berikan akses ke secret tersebut kepada tim Anda.

Jika aplikasi Anda menggunakan banyak secret (misalnya, kunci API untuk tiga layanan yang berbeda, dengan nilai yang berbeda untuk setiap produksi, staging, dan pengembangan lokal), Anda dapat melebihi paket gratis Cloud Secret Manager dan membayar $0,06 per secret tambahan per bulan. Jika Anda memilih untuk mengelola konfigurasi lokal di luar kontrol sumber untuk menghindari biaya ini, Anda dapat menggunakan file apphosting.local.yaml lama. Tidak seperti apphosting.emulator.yaml, file ini diizinkan untuk memberikan nilai teks biasa untuk variabel lingkungan yang merupakan nilai secret di apphosting.yaml.

Memberikan akses ke secret kepada pengguna atau grup

Secret yang disimpan di apphosting.emulator.yaml dibaca saat emulator dimulai. Artinya, tim pengembangan Anda memerlukan akses ke secret. Anda dapat menggunakan perintah apphosting:secrets:grantaccess untuk memberikan akses ke secret kepada pengguna atau grup melalui email.

firebase apphosting:secrets:grantaccess test-api-key --emails my-team@my-company.com

Jika berlaku, pertimbangkan untuk menggunakan kunci khusus pengujian di apphosting.emulator.yaml yang tidak memiliki akses ke data produksi, tidak dapat memiliki efek samping global (mengirim email, menagih kartu kredit), dan/atau memiliki kuota yang lebih rendah. Hal ini membantu memastikan bahwa kode yang tidak ditinjau memiliki lebih sedikit konsekuensi di dunia nyata.

Pertimbangkan untuk menggunakan Google Grup untuk mengelola akses ke secret, bukan memberikan akses kepada setiap pengguna. Hal ini akan menyederhanakan orientasi anggota baru ke tim developer Anda karena menambahkan mereka ke grup akan memberi mereka akses ke semua secret yang mereka butuhkan. Anda mungkin sudah memiliki grup yang sesuai tempat developer berkomunikasi satu sama lain. Mengontrol akses oleh Google Grup juga membantu memastikan bahwa developer yang keluar dari tim Anda kehilangan akses ke semua secret saat mereka dihapus dari grup email. Jika secret memiliki akses ke data produksi atau efek samping di dunia nyata, sebaiknya tetap rotasi kunci Anda dan berikan nilai baru dengan firebase apphosting:secrets:set.

Menjalankan emulator

firebase emulators:start

Tindakan ini akan memulai semua emulator yang ditentukan dalam file firebase.json, termasuk emulator App Hosting.