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:
- Memungkinkan Anda menjalankan aplikasi web secara lokal, dengan variabel lingkungan dan secret
yang ditentukan dalam file konfigurasi
apphosting.yaml
. - Dapat mengganti variabel lingkungan dan secret untuk digunakan di emulator dengan
file
apphosting.emulator.yaml
. - 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 (lokasifirebase.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.