Başlayın: ilk işlevlerinizi yazın, test edin ve dağıtın

Cloud Functions'ı kullanmaya başlamak için, gerekli kurulum görevleriyle başlayan ve ilgili iki işlevi oluşturma, test etme ve dağıtma yoluyla çalışan bu eğiticide çalışmayı deneyin:

  • addMessage() Bir metin değeri kabul eder ve Bulut Firestore yazar bir URL ortaya.
  • makeUppercase() , Hangi Bulut Firestore yazma ve metin büyük harfe dönüşümler üzerinde tetikler.

Bu arka plan tetikleyiciler iyice içinden test edilebilir çünkü kısmen bu örnek için Bulut FireStore ve HTTP tetiklenen JavaScript işlevlerini seçtiniz Firebase Yerel Emülatörü Suite . Bu araç seti ayrıca Realtime Database, PubSub, Auth ve HTTP çağrılabilir tetikleyicilerini de destekler. Diğer tür Uzaktan Config TestLAB olarak arka plan tetikleyiciler türleri ve Analytics tetikler tüm edilebilir etkileşimli test bu sayfada açıklanmayan toolsets kullanarak.

Bu öğreticinin aşağıdaki bölümleri, örneği oluşturmak, test etmek ve dağıtmak için gereken adımları ayrıntılı olarak açıklar. Bunun yerine sadece kod çalıştırmasına ve inceleyin isterseniz, jump İnceleme tam örnek kod .

Firebase Projesi Oluşturun

  1. In Firebase konsoluna , ardından Ekle projeyi tıklayın seçmek veya bir proje adı girin.

    Mevcut bir Google Cloud projeniz varsa, o projeye Firebase kaynakları eklemek için açılır menüden projeyi seçebilirsiniz.

  2. Eğer yeni bir proje oluşturuyorsanız (İsteğe bağlı) Proje kimliğini düzenleyebilirsiniz.

    Firebase, Firebase projenize otomatik olarak benzersiz bir kimlik atar. Ziyaret Firebase Projeleri Anlayın Firebase proje kimliğine nasıl kullandığı hakkında bilgi edinmek için.

  3. Devam tıklayın.

  4. Aşağıdaki Firebase ürünlerden herhangi birini kullanarak optimal bir deneyime sahip sağlayan projeniz için Google Analytics kadar (İsteğe bağlı) Seti:

    İstendiğinde, varolan kullanmayı seçmek Google Analytics hesabı veya yeni bir hesap oluşturun.
    Yeni bir hesap oluşturmak için seçerseniz, seçin Analytics rapor konumunu daha sonra projeniz için veri paylaşım ayarları ve Google Analytics şartları kabul.

  5. Tıklayın proje oluştur (veya mevcut bir Google Bulut projesini kullanıyorsanız, Firebase ekle).

Firebase, Firebase projeniz için kaynakları otomatik olarak sağlar. İşlem tamamlandığında, Firebase konsolundaki Firebase projenizin genel bakış sayfasına yönlendirileceksiniz.

Node.js ve Firebase CLI'yi kurun

Bir gerekir node.js yazma işlevlerine ortamı ve Bulut İşlevleri çalışma zamanı size dağıtma fonksiyonlarına Firebase CLI gerekir. Node.js ve yükleme için UÖM'sini , Düğüm Sürüm Yöneticisi önerilir.

Eğer node.js varsa ve yüklü NPM sonra Firebase CLI yüklemek tercih ettiğiniz yöntemi ile. CLI'yi npm aracılığıyla kurmak için şunu kullanın:

npm install -g firebase-tools

Bu, küresel olarak kullanılabilen firebase komutunu yükler. Komut başarısız olursa, gerekebilir npm izinlerini değiştirmek . En son sürümüne güncelleme için firebase-tools , aynı komutu yeniden çalıştırın.

Projenizi başlatın

Cloud Functions için Firebase SDK'yı başlattığınızda, bağımlılıklar ve bazı minimum örnek kodlar içeren boş bir proje oluşturursunuz ve işlevleri oluşturmak için TypeScript veya JavaScript'i seçersiniz. Bu eğiticinin amaçları doğrultusunda, Cloud Firestore'u da başlatmanız gerekir.

Projenizi başlatmak için:

  1. Run firebase login tarayıcısı üzerinden giriş ve Firebase aracı kimliğini doğrulamak için.
  2. Firebase proje dizininize gidin.
  3. Çalışma firebase init firestore . Bu öğretici için, Firestore kuralları ve dizin dosyaları istendiğinde varsayılan değerleri kabul edebilirsiniz. Henüz bu projede Bulut FireStore kullanmadıysanız, ayrıca anlatıldığı gibi Firestore için bir başlangıç modu ve konum seçmek gerekir Bulut Firestore başlayın .
  4. Çalıştır firebase init functions . Araç size npm ile bağımlılıkları yükleme seçeneği sunar. Başka bir şekilde bağımlılıkları yönetmek istiyorsanız düşüş yaparsanız çalıştırmak gerekir olsa düşmeye güvenlidir npm install taklit veya işlevlerini dağıtmadan önce.
  5. Araç, dil desteği için size iki seçenek sunar:

    Bu eğitim için JavaScript seçin.

Bu komutlar başarıyla tamamlandıktan sonra proje yapınız şöyle görünür:

myproject
 +- .firebaserc    # Hidden file that helps you quickly switch between
 |                 # projects with `firebase use`
 |
 +- firebase.json  # Describes properties for your project
 |
 +- functions/     # Directory containing all your functions code
      |
      +- .eslintrc.json  # Optional file containing rules for JavaScript linting.
      |
      +- package.json  # npm package file describing your Cloud Functions code
      |
      +- index.js      # main source file for your Cloud Functions code
      |
      +- node_modules/ # directory where your dependencies (declared in
                       # package.json) are installed

package.json : başlatma sırasında oluşturulan dosya önemli anahtar içerir "engines": {"node": "10"} . Bu, işlevleri yazmak ve dağıtmak için Node.js sürümünüzü belirtir. Sen olabilir desteklenen diğer sürümleri seçin .

Gerekli modülleri içe aktarın ve bir uygulamayı başlatın

Kurulum görevlerini tamamladıktan sonra kaynak dizini açıp aşağıdaki bölümlerde anlatıldığı gibi kod eklemeye başlayabilirsiniz. Bu örnek için, proje Düğüm kullanarak Bulut Fonksiyonlar ve Yönetici SDK modülleri aktarmanız gerekir require ifadeleri. Senin için şu satırlar ekleyin index.js dosyası:

// The Cloud Functions for Firebase SDK to create Cloud Functions and set up triggers.
const functions = require('firebase-functions');

// The Firebase Admin SDK to access Firestore.
const admin = require('firebase-admin');
admin.initializeApp();

Bu satırlar yük firebase-functions ve firebase-admin modülleri ve bir başlatmak admin Bulut Firestore değişiklikler yapılabilir hangi uygulama örneği. Her yerde Yönetici SDK o FCM, Kimlik Doğrulama ve Firebase Gerçek Zamanlı Veritabanı için olduğu kadar destek mevcuttur, Bulut Fonksiyon kullanarak Firebase entegre için güçlü bir yol sağlar.

Firebase CLI, projenizi başlattığınızda Firebase ve Firebase SDK for Cloud Functions Node modüllerini otomatik olarak yükler. Projenize 3. parti kütüphaneleri eklemek için, değiştirebilir package.json ve çalıştırmak npm install . Daha fazla bilgi için, bkz Sap bağımlılıklar .

Ekle addMessage() fonksiyonu

İçin addMessage() fonksiyonu şu satırları ekle index.js :

// Take the text parameter passed to this HTTP endpoint and insert it into 
// Firestore under the path /messages/:documentId/original
exports.addMessage = functions.https.onRequest(async (req, res) => {
  // Grab the text parameter.
  const original = req.query.text;
  // Push the new message into Firestore using the Firebase Admin SDK.
  const writeResult = await admin.firestore().collection('messages').add({original: original});
  // Send back a message that we've successfully written the message
  res.json({result: `Message with ID: ${writeResult.id} added.`});
});

addMessage() işlevi, bir HTTP uç noktasıdır. ExpressJS tarzı içinde uç nokta sonuçlarına herhangi bir istek Request ve Response geçirilen nesnelerin onRequest() callback'inde.

HTTP fonksiyonları (benzer senkron olan çağrılabilir fonksiyonları böylece Bulut FireStore kullanarak mümkün ve erteleme çalışmaları olduğunca çabuk bir yanıt göndermelidir). addMessage() HTTP fonksiyonu yolu altında veritabanına HTTP uç ve kesici uçlar da bir metin değeri geçirir /messages/:documentId/original .

Ekle makeUppercase() fonksiyonu

İçin makeUppercase() fonksiyonu şu satırları ekle index.js :

// Listens for new messages added to /messages/:documentId/original and creates an
// uppercase version of the message to /messages/:documentId/uppercase
exports.makeUppercase = functions.firestore.document('/messages/{documentId}')
    .onCreate((snap, context) => {
      // Grab the current value of what was written to Firestore.
      const original = snap.data().original;

      // Access the parameter `{documentId}` with `context.params`
      functions.logger.log('Uppercasing', context.params.documentId, original);
      
      const uppercase = original.toUpperCase();
      
      // You must return a Promise when performing asynchronous tasks inside a Functions such as
      // writing to Firestore.
      // Setting an 'uppercase' field in Firestore document returns a Promise.
      return snap.ref.set({uppercase}, {merge: true});
    });

makeUppercase() işlev yürütür bulut Firestore yazıldığında. ref.set işlevi dinlemek için belgeyi tanımlar. Performans nedenleriyle, mümkün olduğunca spesifik olmalısınız.

Korseler-örneğin, {documentId} -surround "parametreleri" geri aramasında Eşleştikleri veri ortaya joker.

Bulut Firestore tetikler onWrite() veri verilen belge üzerinde yazılı veya güncellendiğinde geri arama.

Cloud Firestore olayları gibi olaya dayalı işlevler eşzamansızdır. Geri arama işlevi, bir ya dönmelidir null bir nesne ya da bir Promise . Hiçbir şey döndürmezseniz, işlev bir hata sinyali vererek zaman aşımına uğrar ve yeniden denenir. Bkz senkron, uyumsuz ve Promises .

İşlevlerinizin yürütülmesini taklit edin

Firebase Yerel Emulator Suite Bir Firebase projeye dağıtmak yerine yerel makinenizde testi uygulamaları oluşturmak ve olanak verir. Geliştirme sırasında yerel testler, kısmen, bir üretim ortamında potansiyel olarak maliyete neden olabilecek kodlama hatalarından kaynaklanan riski azalttığı için şiddetle tavsiye edilir (örneğin, sonsuz bir döngü).

İşlevlerinizi taklit etmek için:

  1. Run firebase emulators:start ve emülatörü Suite UI URL için çıkışını kontrol edin. Bu varsayılan için 4000: localhost'a ancak makinede farklı port üzerinde barındırılan olabilir. Emulator Suite kullanıcı arayüzünü açmak için bu URL'yi tarayıcınıza girin.

  2. Çıktısını kontrol firebase emulators:start HTTP fonksiyonu URL'sini komutunu addMessage() . Bu benzer görünür http://localhost:5001/MY_PROJECT/us-central1/addMessage ; ancak:

    1. MY_PROJECT proje kimliği ile değiştirilecektir.
    2. Bağlantı noktası yerel makinenizde farklı olabilir.
  3. Sorgu dizesi ekle ?text=uppercaseme işlevin URL'nin sonuna. Bu gibi görünmelidir http://localhost:5001/MY_PROJECT/us-central1/addMessage?text=uppercaseme . İsteğe bağlı olarak, "büyük harf" mesajını özel bir mesajla değiştirebilirsiniz.

  4. URL'yi tarayıcınızda yeni bir sekmede açarak yeni bir mesaj oluşturun.

  5. Emulator Suite Kullanıcı Arayüzündeki işlevlerin etkilerini görüntüleyin:

    1. Kayıtlar sekmesinde, belirten yeni günlükleri görmesi gereken işlevleri addMessage() ve makeUppercase() ran:

      i işlevleri: "addMessage"ın yürütülmesine başlanıyor

      i işlevleri: "makeUppercase" uygulamasının başlatılması

    2. Firestore sekmesinde, (o "uppercaseme" ise, "UPPERCASEME" göreceksiniz aslen olsaydı) bir belge de mesajınızın Büyük harfli sürümü kadar orijinal mesajı içeren görmelisiniz.

İşlevleri bir üretim ortamına dağıtın

İşlevleriniz öykünücüde istediğiniz gibi çalıştığında, bunları üretim ortamında dağıtmaya, test etmeye ve çalıştırmaya devam edebilirsiniz. Tavsiye node.js 14 çalışma zamanı ortamına dağıtmak için unutmayın, proje üzerinde olmalıdır Blaze fiyatlandırma planı . Bkz Bulut İşlevleri fiyatlandırma .

Eğiticiden tamamlamak Fonksiyonlarınızı dağıtmak ve sonra yürütmek için addMessage() tetiklemek için makeUppercase() .

  1. İşlevlerinizi dağıtmak için bu komutu çalıştırın:

    $ firebase deploy --only functions
    

    Bu komutu çalıştırdıktan sonra, Firebase CLI, herhangi bir HTTP işlevi uç noktasının URL'sini verir. Terminalinizde aşağıdaki gibi bir satır görmelisiniz:

    Function URL (addMessage): https://us-central1-MY_PROJECT.cloudfunctions.net/addMessage
    

    URL, proje kimliğinizi ve HTTP işlevi için bir bölgeyi içerir. Şimdi bu konuda endişe gerekmez rağmen, bazı üretim HTTP fonksiyonları bir belirtmelidir konumu ağ gecikmesini en aza indirmek için.

    Aşağıdaki gibi erişim hatalarla karşılaşırsanız "projesine authorize erişime edemeyen" çek deneyin proje aliasing .

  2. Kullanılması addMessage() CLI URL çıkışını, bir metin sorgu parametresi ekleyin ve bir tarayıcısında açın:

    https://us-central1-MY_PROJECT.cloudfunctions.net/addMessage?text=uppercasemetoo
    

    İşlev, tarayıcıyı metin dizesinin depolandığı veritabanı konumunda çalıştırır ve Firebase konsoluna yönlendirir. Bu yazma olayı tetikler makeUppercase() dize büyük harfli versiyonunu yazar.

Dağıtma ve fonksiyonlarını yürütmek sonra şunları yapabilirsiniz Bulut Fonksiyonlar için Firebase konsolunda günlükleri görüntülemek . Eğer gerekiyorsa fonksiyonlarını silmek geliştirme veya üretim Firebase CLI kullanın.

Üretimde, çalıştırılacak minimum ve maksimum örnek sayısını ayarlayarak işlev performansını optimize etmek ve maliyetleri kontrol etmek isteyebilirsiniz. Bkz Kontrol ölçekleme davranışı bu çalışma zamanı seçenekleri hakkında daha fazla bilgi için bkz.

Tam örnek kodu inceleyin

İşte tamamlandı var functions/index.js işlevleri içeren addMessage() ve makeUppercase() . Bu işlevler, Cloud Firestore'a bir değer yazan ve ardından dizedeki tüm karakterleri büyük harfe çevirerek onu dönüştüren bir HTTP uç noktasına bir parametre iletmenize olanak tanır.

// The Cloud Functions for Firebase SDK to create Cloud Functions and set up triggers.
const functions = require('firebase-functions');

// The Firebase Admin SDK to access Firestore.
const admin = require('firebase-admin');
admin.initializeApp();

// Take the text parameter passed to this HTTP endpoint and insert it into 
// Firestore under the path /messages/:documentId/original
exports.addMessage = functions.https.onRequest(async (req, res) => {
  // Grab the text parameter.
  const original = req.query.text;
  // Push the new message into Firestore using the Firebase Admin SDK.
  const writeResult = await admin.firestore().collection('messages').add({original: original});
  // Send back a message that we've successfully written the message
  res.json({result: `Message with ID: ${writeResult.id} added.`});
});

// Listens for new messages added to /messages/:documentId/original and creates an
// uppercase version of the message to /messages/:documentId/uppercase
exports.makeUppercase = functions.firestore.document('/messages/{documentId}')
    .onCreate((snap, context) => {
      // Grab the current value of what was written to Firestore.
      const original = snap.data().original;

      // Access the parameter `{documentId}` with `context.params`
      functions.logger.log('Uppercasing', context.params.documentId, original);
      
      const uppercase = original.toUpperCase();
      
      // You must return a Promise when performing asynchronous tasks inside a Functions such as
      // writing to Firestore.
      // Setting an 'uppercase' field in Firestore document returns a Promise.
      return snap.ref.set({uppercase}, {merge: true});
    });

Sonraki adımlar

Bu belgelerde, üzerine daha fazla bilgi bulabilirsiniz genel kavramlar için Bulut Fonksiyonlar yanı sıra kılavuzları için fonksiyonları yazma Bulut İşlevleri tarafından desteklenen etkinliğe türlerini işlemeye.

Bulut İşlevleri hakkında daha fazla bilgi edinmek için aşağıdakileri de yapabilirsiniz:

Video öğretici

Video eğitimlerini izleyerek Bulut İşlevleri hakkında daha fazla bilgi edinebilirsiniz. Bu videoda, Node.js ve CLI kurulumu dahil olmak üzere Cloud Functions'ı kullanmaya başlama konusunda ayrıntılı rehberlik bulacaksınız.