İşlevleri yerel olarak çalıştırma

Firebase CLI, aşağıdaki işlev türlerini taklit edebilen bir Cloud Functions emülatörü içerir:

  • HTTPS işlevleri
  • Çağrılabilir işlevler
  • Görev sırası işlevleri
  • Firebase Authentication, Realtime Database, Cloud Firestore, Cloud Storage, desteklenen Firebase uyarıları ve Cloud Pub/Sub'dan tetiklenen arka plan işlevleri.

İşlevleri, üretim ortamına dağıtmadan önce test etmek için yerel olarak çalıştırabilirsiniz.

Firebase CLI'yı yükleme

Cloud Functions emülatörünü kullanmak için önce Firebase CLI'yı yükleyin:

npm install -g firebase-tools

Yerel emülatörü kullanmak için Cloud Functions uygulamanızın şunlara bağlı olması gerekir:

  • firebase-admin sürüm 8.0.0 veya daha yeni bir sürüm.
  • firebase-functions sürüm 3.0.0 veya daha yeni bir sürüm.

Yönetici kimlik bilgilerini ayarlama (isteğe bağlı)

İşlev testlerinizin Firebase Admin SDK aracılığıyla Google API'leri veya diğer Firebase API'leriyle etkileşim kurmasını istiyorsanız yönetici kimlik bilgilerini ayarlamanız gerekebilir.

  • Cloud Firestore ve Realtime Database tetikleyicileri zaten yeterli kimlik bilgilerine sahiptir ve ek kurulum gerektirmez.
  • Authentication ve FCM gibi Firebase API'leri veya Cloud Translation ya da Cloud Speech gibi Google API'leri de dahil olmak üzere diğer tüm API'ler için bu bölümde açıklanan kurulum adımları gerekir. Bu, Cloud Functions kabuğunu veya firebase emulators:start'i kullanmanız fark etmeksizin geçerlidir.

Öykünülmüş işlevler için yönetici kimlik bilgilerini ayarlamak üzere:

  1. Google Cloud konsolunun Hizmet Hesapları bölmesini açın.
  2. App Engine varsayılan hizmet hesabı'nın seçili olduğundan emin olun ve sağdaki seçenekler menüsünü kullanarak Anahtar oluştur'u seçin.
  3. İstendiğinde anahtar türü için JSON'u seçin ve Oluştur'u tıklayın.
  4. Google varsayılan kimlik bilgilerinizi, indirilen anahtarı işaret edecek şekilde ayarlayın:

    Unix

    export GOOGLE_APPLICATION_CREDENTIALS="path/to/key.json"
    firebase emulators:start
    

    Windows

    set GOOGLE_APPLICATION_CREDENTIALS=path\to\key.json
    firebase emulators:start
    

Bu adımları tamamladıktan sonra işlev testleriniz, Admin SDK'yı kullanarak Firebase ve Google API'lerine erişebilir. Örneğin, bir Authentication tetikleyicisini test ederken emüle edilen işlev admin.auth().getUserByEmail(email) işlevini çağırabilir.

İşlev yapılandırmasını ayarlama (isteğe bağlı)

Özel işlev yapılandırma değişkenleri kullanıyorsanız önce yerel ortamınızda özel yapılandırmanızı almak için komutu çalıştırın (bunu functions dizininde çalıştırın):

firebase functions:config:get > .runtimeconfig.json
# If using Windows PowerShell, replace the above with:
# firebase functions:config:get | ac .runtimeconfig.json

Emülatör paketini çalıştırma

Cloud Functions emülatörünü çalıştırmak için emulators:start komutunu kullanın:

firebase emulators:start

emulators:start komutu, firebase init kullanarak yerel projenizde başlattığınız ürünlere göre Cloud Functions, Cloud Firestore, Realtime Database ve Firebase Hosting için emülatörleri başlatır. Belirli bir emülatörü başlatmak istiyorsanız --only işaretini kullanın:

firebase emulators:start --only functions

Emülatörler başlatıldıktan sonra bir test paketi veya test komut dosyası çalıştırmak istiyorsanız emulators:exec komutunu kullanın:

firebase emulators:exec "./my-test.sh"

Başlatıldıktan sonra emülatör, işlevlerinizden çalıştığı terminal penceresine günlükleri aktarır. İşlevlerinizdeki console.log(), console.info(), console.error() ve console.warn() ifadelerinin tüm çıkışlarını gösterir.

Emülatör çıkışının, işlevlerin dağıtımını varsayılan olarak belirli bir bölgede (us-central1) simüle ettiğini ve bu bölgenin gerçek üretim dağıtımının varsayılan bölgesiyle eşleşmeyebileceğini unutmayın. Bölgeler hakkında daha fazla bilgi için Cloud Functions konumları bölümüne bakın.

Uygulamanızı emülatörlerle iletişim kuracak şekilde yapılandırma

Uygulamanızı emülatörlerle etkileşim kuracak şekilde ayarlamak için ek yapılandırma yapmanız gerekebilir.

Uygulamanızı çağrılabilir işlevler için hazırlama

Prototip ve test etkinlikleriniz çağrılabilir arka uç işlevleri içeriyorsa Cloud Functions for Firebase emülatörüyle etkileşimi şu şekilde yapılandırın:

Kotlin
// 10.0.2.2 is the special IP address to connect to the 'localhost' of
// the host computer from an Android emulator.
val functions = Firebase.functions
functions.useEmulator("10.0.2.2", 5001)
Java
// 10.0.2.2 is the special IP address to connect to the 'localhost' of
// the host computer from an Android emulator.
FirebaseFunctions functions = FirebaseFunctions.getInstance();
functions.useEmulator("10.0.2.2", 5001);
Swift
Functions.functions().useEmulator(withHost: "localhost", port: 5001)
Unity
FirebaseFunctions functions = FirebaseFunctions.DefaultInstance;
// Connects to the Functions Emulator running on port 5001
functions.UseFunctionsEmulator("http://127.0.0.1:5001");

Web

import { getApp } from "firebase/app";
import { getFunctions, connectFunctionsEmulator } from "firebase/functions";

const functions = getFunctions(getApp());
connectFunctionsEmulator(functions, "127.0.0.1", 5001);

Web

firebase.functions().useEmulator("127.0.0.1", 5001);

Uygulamanızı HTTPS işlevleri emülasyonu için hazırlama

Kodunuzdaki her HTTPS işlevi, aşağıdaki URL biçimi kullanılarak yerel emülatörden sunulur:

http://$HOST:$PORT/$PROJECT/$REGION/$NAME

Örneğin, varsayılan ana makine bağlantı noktası ve bölgeye sahip basit bir helloWorld işlevi şu adreste sunulur:

https://localhost:5001/$PROJECT/us-central1/helloWorld

Uygulamanızı görev sırası işlevleri emülasyonu için hazırlama

Öykünücü, tetikleyici tanımlarına göre öykünülmüş görev sıralarını otomatik olarak ayarlar. Yönetici SDK'sı, CLOUD_TASKS_EMULATOR_HOST ortam değişkeni aracılığıyla çalıştığını algılarsa sıraya alınmış istekleri öykünücüye yönlendirir.

Üretim ortamında kullanılan sevk sisteminin, emülatörde uygulanandan daha karmaşık olduğunu unutmayın. Bu nedenle, emülasyonlu davranışın üretim ortamlarını tam olarak yansıtmasını beklememelisiniz. Öykünücüdeki parametreler, görevlerin gönderilme ve yeniden denenme hızının üst sınırlarını belirler.

Uygulamanızı arka planda tetiklenen işlevlerin emülasyonu için hazırlama

Cloud Functions emülatörü, aşağıdaki kaynaklardan arka planda tetiklenen işlevleri destekler:

  • Realtime Database emülatörü
  • Cloud Firestore emülatörü
  • Authentication emülatörü
  • Pub/Sub emülatörü
  • Firebase Alerts Emulator

Arka plan etkinliklerini tetiklemek için Emulator Suite UI kullanarak veya uygulamanızı ya da test kodunuzu platformunuzun SDK'sını kullanarak emülatörlere bağlayarak arka uç kaynaklarını değiştirin.

Uzantılar tarafından yayınlanan özel etkinlikler için test işleyicileri

Cloud Functions v2 ile Firebase Extensions özel etkinliklerini işlemek için uyguladığınız işlevlerde Cloud Functions emülatörü, Eventarc tetikleyicilerini desteklemek için Eventarc emülatörüyle eşleşir.

Etkinlik yayınlayan uzantılar için özel etkinlik işleyicileri test etmek istiyorsanız Cloud Functions ve Eventarc emülatörlerini yüklemeniz gerekir.

Eventarc emülatörü çalışıyorsa Cloud Functions çalışma zamanı, geçerli işlemde EVENTARC_EMULATOR ortam değişkenini localhost:9299 olarak ayarlar. EVENTARC_EMULATOR ortam değişkeni ayarlandığında Firebase Admin SDK, Eventarc emülatörüne otomatik olarak bağlanır. Varsayılan bağlantı noktasını Local Emulator Suite yapılandırma bölümünde açıklandığı şekilde değiştirebilirsiniz.

Ortam değişkenleri doğru şekilde yapılandırıldığında Firebase Admin SDK, etkinlikleri otomatik olarak Eventarc emülatörüne gönderir. Eventarc emülatörü de kayıtlı işleyicileri tetiklemek için Cloud Functions emülatörüne geri çağırma yapar.

İşleyici yürütme işlemiyle ilgili ayrıntılar için Emulator Suite UI adresindeki Functions günlüklerini inceleyebilirsiniz.

Diğer hizmetlerle etkileşimler

Emülatör paketi, ürünler arası etkileşimlerin test edilmesini sağlayan birden fazla emülatör içerir.

Cloud Firestore

Cloud Firestore hizmetine yazmak için Firebase Admin SDK'yı kullanan işlevleriniz varsa bu yazma işlemleri, çalışıyorsa Cloud Firestore emülatörüne gönderilir. Bu yazma işlemleri başka işlevleri tetiklerse bu işlevler Cloud Functions emülatöründe çalıştırılır.

Cloud Storage

Cloud Storage konumuna yazmak için Firebase Admin SDK'sını (sürüm 9.7.0 veya daha yeni) kullanan işlevleriniz varsa bu yazma işlemleri, çalışıyorsa Cloud Storage emülatörüne gönderilir. Bu yazma işlemleri başka işlevleri tetiklerse bu işlevler Cloud Functions emülatöründe çalıştırılır.

Firebase Authentication

Firebase Authentication konumuna yazmak için Firebase Admin SDK'yı (9.3.0 veya daha yeni bir sürüm) kullanan işlevleriniz varsa bu yazma işlemleri, çalışıyorsa Auth emülatörüne gönderilir. Bu yazma işlemleri başka işlevleri tetiklerse bu işlevler Cloud Functions emülatöründe çalıştırılır.

Firebase Hosting

Firebase Hosting için dinamik içerik oluşturmak Firebase Hosting amacıyla Cloud Functions kullanıyorsanız firebase emulators:start, yerel HTTP işlevlerinizi barındırma için proxy olarak kullanır.

Firebase uyarıları

Desteklenen en az bir Firebase uyarı tetikleyicisi içeren tüm projelerde, emülatör kullanıcı arayüzünde FireAlerts sekmesi bulunur. Bir uyarı tetikleyicisini taklit etmek için:

  1. FireAlerts sekmesini açın. Bu sekmede, kendileriyle ilişkili tetikleyicileri olan uyarı türleriyle doldurulmuş bir açılır liste gösterilir (örneğin, onNewFatalIssuePublished tetikleyiciniz varsa crashlytics.newFatalIssue gösterilir).
  2. Uyarı türü seçin. Form, düzenlenebilen varsayılan değerlerle otomatik olarak doldurulur. Etkinliğin alanlarını düzenleyebilirsiniz (uyarı etkinliğindeki diğer bilgiler tahmin edilir, örnek değerlerdir veya rastgele oluşturulur).
  3. İşlev emülatörüne yapay bir uyarı göndermek için Uyarı Gönder'i seçin. Günlük kaydı, Firebase konsolundaki Uyarılar bölümünde (ve günlüklerde) mevcuttur.

Sonraki adımlar

Firebase Emulator Suite'in kullanımına dair kapsamlı bir örnek için test hızlı başlangıç örneğine bakın.