Uygulamanızı Cloud Functions Emülatörüne bağlayın

Uygulamanızı Cloud Functions öykünücüsüne bağlamadan önce, genel Firebase Local Emulator Suite iş akışını anladığınızdan ve Local Emulator Suite'i yükleyip yapılandırdığınızdan ve CLI komutlarını gözden geçirdiğinizden emin olun.

Firebase projesi seçin

Firebase Local Emulator Suite, tek bir Firebase projesine yönelik ürünleri taklit eder.

Kullanılacak projeyi seçmek için emülatörleri başlatmadan önce, CLI'de çalışma dizininizde firebase use çalıştırın. Veya --project bayrağını her emulator komutuna iletebilirsiniz.

Local Emulator Suite, gerçek Firebase projelerinin ve demo projelerinin emülasyonunu destekler.

Proje tipi Özellikler Emülatörlerle kullanın
Gerçek

Gerçek bir Firebase projesi, oluşturduğunuz ve yapılandırdığınız projedir (büyük olasılıkla Firebase konsolu aracılığıyla).

Gerçek projelerde veritabanı örnekleri, depolama grupları, işlevler veya Firebase projesi için ayarladığınız diğer kaynaklar gibi canlı kaynaklar bulunur.

Gerçek Firebase projeleriyle çalışırken desteklenen ürünlerin herhangi biri veya tümü için emülatörler çalıştırabilirsiniz.

Taklit etmediğiniz tüm ürünler için uygulamalarınız ve kodunuz canlı kaynakla (veritabanı örneği, depolama grubu, işlev vb.) etkileşime girecektir.

Demo

Bir demo Firebase projesinde gerçek bir Firebase yapılandırması ve canlı kaynak yoktur. Bu projelere genellikle codelab'ler veya diğer eğitimler aracılığıyla erişilir.

Demo projelerine ait proje kimlikleri demo- önekine sahiptir.

Demo Firebase projeleriyle çalışırken uygulamalarınız ve kodunuz yalnızca emülatörlerle etkileşime girer. Uygulamanız, öykünücünün çalışmadığı bir kaynakla etkileşim kurmaya çalışırsa bu kod başarısız olur.

Mümkün olan her yerde demo projelerini kullanmanızı öneririz. Faydaları şunları içerir:

  • Emülatörleri Firebase projesi oluşturmadan çalıştırabileceğiniz için daha kolay kurulum
  • Kodunuzun yanlışlıkla öykünmemiş (üretim) kaynakları çağırması durumunda veri değişikliği, kullanım ve faturalandırma şansı olmayacağı için daha güçlü güvenlik
  • SDK yapılandırmanızı indirmek için internete erişmenize gerek olmadığından daha iyi çevrimdışı destek.

Emülatörlerle konuşmak için uygulamanızı kullanın

Çağrılabilir işlevler için uygulamanızı kullanın

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

Kotlin+KTX
// 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);
Süratli
Functions.functions().useFunctionsEmulator(origin: "http://127.0.0.1:5001")

Web modular API

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

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

Web namespaced API

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

Uygulamanızı HTTPS işlevleri emülasyonu için kullanın

Kodunuzdaki her HTTPS işlevi, aşağıdaki URL biçimi kullanılarak yerel öykünücüden sunulacaktır:

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

Örneğin, varsayılan ana bilgisayar bağlantı noktası ve bölgesi ile basit bir helloWorld işlevi şu adreste sunulacaktır:

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

Arka planda tetiklenen işlevler emülasyonu için uygulamanızı kullanın

Cloud Functions öykünücüsü, aşağıdaki kaynaklardan arka planda tetiklenen işlevleri destekler:

  • Gerçek Zamanlı Veritabanı emülatörü
  • Cloud Firestore emülatörü
  • Kimlik doğrulama emülatörü
  • Pub/Sub emülatörü

Arka plan olaylarını tetiklemek için Emulator Suite kullanıcı arayüzünü kullanarak veya uygulamanızı veya test kodunuzu platformunuza yönelik SDK'yı kullanarak emülatörlere bağlayarak arka uç kaynaklarını değiştirin.

Uzantılar tarafından yayılan özel olaylara yönelik test işleyicileri

Firebase Extensions özel olaylarını Cloud Functions v2 ile işlemek üzere uyguladığınız işlevler için Cloud Functions öykünücüsü, Eventarc tetikleyicilerini desteklemek üzere Eventarc öykünücüsüyle eşleşir.

Olayları yayan uzantılar açısından özel olay işleyicilerini test etmek için Cloud Functions ve Eventarc öykünücülerini yüklemeniz gerekir.

Cloud Functions çalışma zamanı, Eventarc öykünücüsü çalışıyorsa mevcut işlemde EVENTARC_EMULATOR ortam değişkenini localhost:9299 olarak ayarlar. Firebase Yönetici SDK'ları, EVENTARC_EMULATOR ortam değişkeni ayarlandığında otomatik olarak Eventarc öykünücüsüne bağlanır. Varsayılan bağlantı noktasını Yerel Emulator Suite'i Yapılandır bölümünde tartışıldığı gibi değiştirebilirsiniz.

Ortam değişkenleri doğru şekilde yapılandırıldığında Firebase Admin SDK, olayları otomatik olarak Eventarc öykünücüsüne gönderir. Buna karşılık Eventarc emülatörü, kayıtlı işleyicileri tetiklemek için Cloud Functions emülatörüne geri çağrı yapar.

İşleyici yürütmeyle ilgili ayrıntılar için Emulator Suite kullanıcı arayüzündeki İşlev günlüklerini kontrol edebilirsiniz.

Yerel bir test ortamı yapılandırma

İşlevleriniz dotenv tabanlı ortam yapılandırmasına dayanıyorsa, bu davranışı yerel test ortamınızda taklit edebilirsiniz.

Yerel bir Cloud Functions öykünücüsü kullanırken, bir .env.local dosyası oluşturarak projeniz için ortam değişkenlerini geçersiz kılabilirsiniz. .env.local içeriği .env ve projeye özel .env dosyasına göre önceliklidir.

Örneğin bir proje, geliştirme ve yerel test için biraz farklı değerler içeren şu üç dosyayı içerebilir:

.env .env.dev .env.local
GEZEGEN=Dünya

İZLEYİCİ=İnsanlar

KİTLE=Geliştirici İnsanlar İZLEYİCİ=Yerel İnsanlar

Yerel bağlamda başlatıldığında öykünücü, ortam değişkenlerini gösterildiği gibi yükler:

  $ firebase emulators:start
  i  emulators: Starting emulators: functions
  # Starts emulator with following environment variables:
  #  PLANET=Earth
  #  AUDIENCE=Local Humans

Cloud Functions emülatöründeki sırlar ve kimlik bilgileri

Cloud Functions öykünücüsü , hassas yapılandırma bilgilerini depolamak ve bunlara erişmek için gizli dizilerin kullanımını destekler. Varsayılan olarak emülatör, uygulamanın varsayılan kimlik bilgilerini kullanarak üretim sırlarınıza erişmeye çalışacaktır. CI ortamları gibi belirli durumlarda emülatör, izin kısıtlamaları nedeniyle gizli değerlere erişemeyebilir.

Ortam değişkenleri için Cloud Functions emülatör desteğine benzer şekilde, bir .secret.local dosyası oluşturarak gizli dizi değerlerini geçersiz kılabilirsiniz. Bu, özellikle gizli değere erişiminiz yoksa, işlevlerinizi yerel olarak test etmenizi kolaylaştırır.

Bulut İşlevlerini test etmek için başka hangi araçlar mevcut?

Cloud Functions öykünücüsü diğer prototip ve test araçlarıyla desteklenir:

  • Etkileşimli, yinelemeli işlevlerin prototiplenmesine ve geliştirilmesine olanak tanıyan Bulut İşlevleri kabuğu. Kabuk, geliştirme için REPL tarzı bir arayüze sahip Bulut İşlevleri öykünücüsünü kullanır. Cloud Firestore veya Realtime Database emülatörleriyle entegrasyon sağlanmamaktadır. Kabuğu kullanarak verilerle alay eder ve Local Emulator Suite'in şu anda desteklemediği Analytics, Remote Config ve Crashlytics ürünleriyle etkileşimi simüle etmek için işlev çağrıları gerçekleştirirsiniz.
  • Bulut İşlevleri için Firebase Test SDK'sı, işlev geliştirmeye yönelik mocha çerçevesine sahip bir Node.js. Aslında Bulut İşlevleri Test SDK'sı, Bulut İşlevleri kabuğunun üzerinde otomasyon sağlar.

Bulut İşlevleri kabuğu ve Bulut İşlevleri Test SDK'sı hakkında daha fazla bilgiyi Test işlevlerini etkileşimli olarak ve Bulut İşlevlerinin Birim Testi bölümünde bulabilirsiniz.

Cloud Functions öykünücüsünün üretimden farkı nedir?

Cloud Functions öykünücüsü, kullanım durumlarının çoğunda üretim ortamına oldukça yakındır. Node çalışma zamanındaki her şeyin üretime mümkün olduğunca yakın olmasını sağlamak için kapsamlı çalışmalar yaptık. Ancak öykünücü, kapsayıcıya alınmış üretim ortamının tamamını taklit etmez; dolayısıyla işlev kodunuz gerçekçi bir şekilde yürütülürken ortamınızın diğer yönleri (yani yerel dosyalar, işlevlerin çökmesinden sonraki davranışlar vb.) farklı olacaktır.

Bulut IAM

Firebase Emulator Suite, çalıştırmak için IAM ile ilgili herhangi bir davranışı kopyalamaya veya bunlara uymaya çalışmaz. Emülatörler sağlanan Firebase Güvenlik Kurallarına uyar, ancak normalde IAM'in kullanılacağı durumlarda (örneğin, hizmet hesabını çağıran Cloud Functions'ı ve dolayısıyla izinleri ayarlamak için), emülatör yapılandırılamaz ve geliştirici makinenizde genel olarak mevcut olan hesabı kullanır. yerel bir betiği doğrudan çalıştırmaya benzer.

Bellek ve işlemci kısıtlamaları

Emülatör, işlevleriniz için bellek veya işlemci kısıtlamaları uygulamaz. Ancak emülatör, timeoutSeconds çalışma zamanı argümanı aracılığıyla zaman aşımı işlevlerini destekler.

Öykünücüde işlevler çalıştırıldığında, işlev yürütme süresinin üretimden farklı olabileceğini unutmayın. Öykünücüyle işlevleri tasarlayıp test ettikten sonra, yürütme sürelerini doğrulamak için üretimde sınırlı testler çalıştırmanızı öneririz.

Yerel ve üretim ortamlarındaki farklılıklara yönelik planlama

Emülatör yerel makinenizde çalıştığından, uygulamalar, yerleşik programlar ve yardımcı programlar açısından yerel ortamınıza bağlıdır.

Cloud Functions geliştirme için yerel ortamınızın Google üretim ortamından farklı olabileceğini unutmayın:

  • Üretim ortamını simüle etmek için yerel olarak yüklediğiniz uygulamalar (örneğin, bu eğitimdeki ImageMagick), özellikle farklı bir sürüme ihtiyacınız varsa veya Linux dışı bir ortamda geliştirme yapıyorsanız, davranış açısından üretimden farklı olabilir. Eksik programın kendi ikili kopyasını işlev dağıtımınızın yanında dağıtmayı düşünün.

  • Benzer şekilde, yerleşik yardımcı programlar (örneğin, ls , mkdir gibi kabuk komutları), özellikle Linux dışı bir ortamda (örneğin, macOS) geliştirme yapıyorsanız, üretimde mevcut olan sürümlerden farklı olabilir. Yerel komutlara yalnızca düğüm alternatifleri kullanarak veya dağıtımınızla birlikte paketlenecek Linux ikili dosyaları oluşturarak bu sorunu çözebilirsiniz.

Yeniden deneniyor

Cloud Functions öykünücüsü, başarısızlık durumunda işlevlerin yeniden denenmesini desteklemez.

Sırada ne var?