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ğerini kabul eden ve bunu Cloud Firestore'a yazan bir URL'yi ortaya çıkarır.
  • Cloud Firestore'da yazmayı tetikleyen ve metni büyük harfe dönüştüren makeUppercase() .

Bu arka plan tetikleyicileri Firebase Local Emulator Suite aracılığıyla kapsamlı bir şekilde test edilebildiğinden, kısmen bu örnek için Cloud Firestore ve HTTP ile tetiklenen JavaScript işlevlerini seçtik. Bu araç seti ayrıca Realtime Database, PubSub, Auth ve HTTP çağrılabilir tetikleyicilerini de destekler. Remote Config, TestLab ve Analytics tetikleyicileri gibi diğer arka plan tetikleyici türlerinin tümü, bu sayfada açıklanmayan araç setleri kullanılarak etkileşimli olarak test edilebilir.

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. Kodu çalıştırmayı ve incelemeyi tercih ederseniz, Örnek kodun tamamını gözden geçir seçeneğine atlayın.

Firebase Projesi Oluşturun

  1. Firebase konsolunda Proje ekle'yi tıklayın.

    • Firebase kaynaklarını mevcut bir Google Cloud projesine eklemek için proje adını girin veya açılır menüden seçin.

    • Yeni bir proje oluşturmak için istediğiniz proje adını girin. Proje adının altında görüntülenen proje kimliğini de isteğe bağlı olarak düzenleyebilirsiniz.

  2. İstenirse Firebase şartlarını inceleyin ve kabul edin.

  3. Devam'ı tıklayın.

  4. (İsteğe bağlı) Aşağıdaki Firebase ürünlerinden herhangi birini kullanarak en iyi deneyimi yaşamanızı sağlayan projeniz için Google Analytics'i kurun:

    Ya mevcut bir Google Analytics hesabını seçin ya da yeni bir hesap oluşturun.

    Yeni bir hesap oluşturursanız, Analytics raporlama konumunuzu seçin ve ardından projeniz için veri paylaşımı ayarlarını ve Google Analytics şartlarını kabul edin.

  5. Proje oluştur'u (veya mevcut bir Google Cloud projesi kullanıyorsanız Firebase Ekle'yi ) tıklayın.

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

İşlevleri yazmak için bir Node.js ortamına ihtiyacınız olacak ve işlevleri Cloud Functions çalışma zamanına dağıtmak için Firebase CLI'ye ihtiyacınız olacak. Node.js ve npm yüklemek için Node Version Manager önerilir.

Node.js ve npm'yi yükledikten sonra, tercih ettiğiniz yöntemle Firebase CLI'yi yükleyin . CLI'yi npm aracılığıyla kurmak için şunu kullanın:

npm install -g firebase-tools

Bu, global olarak kullanılabilen firebase komutunu yükler. Komut başarısız olursa, npm izinlerini değiştirmeniz gerekebilir . firebase-tools en son sürümüne güncellemek için 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 öğreticinin amaçları doğrultusunda, Cloud Firestore'u da başlatmanız gerekir.

Projenizi başlatmak için:

  1. Tarayıcı aracılığıyla firebase login ve firebase aracının kimliğini doğrulamak için firebase girişini çalıştırın.
  2. Firebase proje dizininize gidin.
  3. firebase init firestore çalıştırın. Bu öğretici için, Firestore kuralları ve dizin dosyaları istendiğinde varsayılan değerleri kabul edebilirsiniz. Bu projede henüz Cloud Firestore'u kullanmadıysanız, Cloud Firestore'u kullanmaya başlama bölümünde açıklandığı gibi Firestore için bir başlangıç ​​modu ve konum seçmeniz gerekir.
  4. firebase init functions çalıştırın. Araç size npm ile bağımlılıkları yükleme seçeneği sunar. Bağımlılıkları başka bir şekilde yönetmek istiyorsanız reddetmek güvenlidir, ancak reddederseniz, işlevlerinizi taklit etmeden veya dağıtmadan önce npm install çalıştırmanız gerekir.
  5. Araç, dil desteği için size iki seçenek sunar:

    Bu eğitim için JavaScript'i 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

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

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 projeniz, Node require deyimlerini kullanarak Cloud Functions ve Admin SDK modüllerini içe aktarmalıdır. index.js dosyanıza aşağıdaki gibi satırlar ekleyin:

// 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, firebase-functions ve firebase-admin modüllerini yükler ve Cloud Firestore değişikliklerinin yapılabileceği bir admin uygulaması örneğini başlatır. FCM, Kimlik Doğrulama ve Firebase Realtime Database için olduğu gibi, Admin SDK desteğinin olduğu her yerde, Cloud Functions kullanarak Firebase'i entegre etmenin güçlü bir yolunu sunar.

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

addMessage() işlevini ekleyin

addMessage() işlevi için şu satırları index.js dosyasına ekleyin:

// 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. Uç noktaya yapılan herhangi bir istek, onRequest() geri çağrısına geçirilen ExpressJS tarzı İstek ve Yanıt nesneleri ile sonuçlanır.

HTTP işlevleri eşzamanlıdır ( çağrılabilir işlevlere benzer), bu nedenle mümkün olduğunca çabuk bir yanıt göndermeli ve Cloud Firestore'u kullanarak çalışmayı ertelemelisiniz. addMessage() HTTP işlevi, HTTP uç noktasına bir metin değeri iletir ve bunu /messages/:documentId/original yolu altındaki veritabanına ekler.

makeUppercase() işlevini ekleyin

makeUppercase() işlevi için şu satırları index.js dosyasına ekleyin:

// 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şlevi, Cloud Firestore'a yazıldığında yürütülür. ref.set işlevi, dinlenecek belgeyi tanımlar. Performans nedenleriyle, mümkün olduğunca spesifik olmalısınız.

Parantezler (örneğin, {documentId} "parametreleri" çevreler, geri aramada eşleşen verilerini ortaya çıkaran joker karakterler.

Cloud Firestore, verilen belgeye veri yazıldığında veya güncellendiğinde onWrite() geri çağrısını tetikler.

Cloud Firestore olayları gibi olaya dayalı işlevler eşzamansızdır. Geri arama işlevi bir null , bir Object veya bir Promise döndürmelidir. Hiçbir şey döndürmezseniz, işlev bir hata sinyali vererek zaman aşımına uğrar ve yeniden denenir. Bkz. Eşitleme, Eşzamansız ve Sözler .

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

Firebase Local Emulator Suite , bir Firebase projesine dağıtmak yerine yerel makinenizde uygulamalar oluşturmanıza ve test etmenize olanak tanır. 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. firebase emulators:start ve Emulator Suite kullanıcı arabiriminin URL'sinin çıktısını kontrol edin. Varsayılan olarak localhost:4000 şeklindedir, ancak makinenizdeki farklı bir bağlantı noktasında barındırılıyor olabilir. Emulator Suite kullanıcı arayüzünü açmak için bu URL'yi tarayıcınıza girin.

  2. HTTP işlevinin addMessage() URL'si için firebase emulators:start komutunun çıktısını kontrol edin. Aşağıdakiler dışında http://localhost:5001/MY_PROJECT/us-central1/addMessage ile benzer görünecektir:

    1. MY_PROJECT , proje kimliğiniz ile değiştirilecektir.
    2. Bağlantı noktası yerel makinenizde farklı olabilir.
  3. ?text=uppercaseme sorgu dizesini işlevin URL'sinin sonuna ekleyin. Bu şöyle 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. Günlükler sekmesinde, addMessage() ve makeUppercase() işlevlerinin çalıştığını gösteren yeni günlükler görmelisiniz:

      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, orijinal mesajınızı ve mesajınızın büyük harfli versiyonunu içeren bir belge görmelisiniz (başlangıçta "büyük harf" ise, "BÜYÜK HARF" görürsünüz).

İş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. Önerilen Node.js 14 çalışma zamanı ortamına dağıtmak için projenizin Blaze fiyatlandırma planında olması gerektiğini unutmayın. Bulut İşlevleri fiyatlandırmasına bakın.

Öğreticiyi tamamlamak için işlevlerinizi dağıtın ve ardından addMessage() öğesini tetiklemek için makeUppercase() çalıştırın.

  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 endişelenmenize gerek olmasa da, bazı üretim HTTP işlevlerinin ağ gecikmesini en aza indirmek için bir konum belirtmesi gerekir.

    "Projeye erişim yetkilendirilemiyor" gibi erişim hatalarıyla karşılaşırsanız, proje takma adınızı kontrol etmeyi deneyin.

  2. addMessage() URL çıktısını kullanarak bir metin sorgusu parametresi ekleyin ve bunu bir tarayıcıda 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ı, dizenin büyük harfli bir sürümünü yazan makeUppercase() tetikler.

İşlevleri dağıttıktan ve yürüttükten sonra, günlükleri Google Cloud Console'da görüntüleyebilirsiniz. Geliştirme veya üretimdeki işlevleri silmeniz gerekiyorsa Firebase CLI'yi 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. Bu çalışma zamanı seçenekleri hakkında daha fazla bilgi için bkz. Ölçekleme davranışını kontrol edin.

Tam örnek kodu inceleyin

İşte addMessage() ve makeUppercase() işlevlerini içeren tamamlanmış functions/index.js . 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 belgede, Cloud Functions tarafından desteklenen olay türlerini işlemek için işlevlerin yazılmasına ilişkin kılavuzların yanı sıra Cloud Functions için genel kavramlar hakkında daha fazla bilgi bulabilirsiniz.

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.