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


Cloud Functions özelliğini kullanmaya başlamak için şu eğiticiyi uygulamayı deneyin: Bu eğitim, gerekli kurulum görevlerinden başlar ve ürün oluşturma, test etme, ve ilgili iki işlevi dağıtmanız gerekir:

  • "Mesaj ekleyin" metin değeri kabul eden bir URL sunan ve bunu yazan işlev Cloud Firestore numaralı telefona.
  • Cloud Firestore yazma işleminde tetiklenen ve metni büyük harfe dönüştüren bir "büyük harf yap" işlevi.

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

Bu eğiticinin aşağıdaki bölümlerinde, derleme için gereken adımlar ayrıntılı olarak açıklanmıştır: ve örneği dağıtabilirsiniz. Kodu çalıştırıp incelemeyi tercih ediyorsanız Örnek kodun tamamını inceleme bölümüne atlayın.

Firebase Projesi oluşturma

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

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

    • Yeni bir proje oluşturmak için istediğiniz proje adını girin. İsterseniz proje adının altında görüntülenen proje kimliğini de düzenleyebilirsiniz.

  2. İstenirse Firebase şartlarını inceleyip kabul edin.

  3. Devam'ı tıklayın.

  4. (İsteğe bağlı) Projeniz için Google Analytics'yi ayarlayın. Bu, aşağıdaki Firebase ürünlerinden herhangi birini kullanırken optimum bir deneyim yaşamanızı sağlar:

    Mevcut bir Google Analytics hesabı veya yeni bir hesap oluşturun.

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

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

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

Node.js ve Firebase CLI'yi ayarlama

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

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

npm install -g firebase-tools

Bu işlem, dünya genelinde kullanılabilen firebase komutunu yükler. Eğer komut başarısız olursa, npm izinlerini değiştirin. firebase-tools uygulamasının en son sürümüne güncellemek için aynı komutu yeniden çalıştırın.

Projenizi ilk kullanıma hazırlayın

Firebase SDK'sını Cloud Functions için başlattığınızda, bağımlılıkları ve bazı minimum örnek kodları içeren boş bir proje oluşturur ve işlevleri derlemek için TypeScript veya JavaScript'i seçersiniz. Bu Sözleşme'nin amaçları doğrultusunda, Cloud Firestore öğesini de ilk kullanıma hazırlamanız gerekir.

Projenizi ilk kullanıma hazırlamak için:

  1. Tarayıcı aracılığıyla giriş yapmak için firebase login komutunu çalıştırın ve Firebase KSA.
  2. Firebase proje dizininize gidin.
  3. firebase init firestore çalıştır. Bu eğitim için varsayılan ayarı kabul edebilirsiniz değerlerine sahip etiketleri kullanır. Kullanmadıysanız Bu projede Cloud Firestore ile ilgili açıklandığı gibi Firestore için bir başlangıç modu ve konum seçmeniz gerekir: Cloud Firestore özelliğini kullanmaya başlayın.
  4. firebase init functions'ü çalıştırın. CLI, sizden mevcut bir kod tabanı veya ilk kullanıma hazırlayıp yeni bir ad verin. Bu işe yeni başlıyorsanız varsayılan konumda tek bir kod tabanı yeterlidir. daha sonra, uygulamanız büyüdükçe işlevleri kod tabanlarında düzenlemek istiyorsanız.
  5. CLI, dil desteği için iki seçenek sunar:

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

  6. CLI, bağımlılıkları npm ile yükleme seçeneği sunar. Bağımlılıkları başka bir şekilde yönetmek istiyorsanız bu isteği reddetmek güvenlidir. Ancak reddederseniz işlevlerinizi taklit etmeden veya dağıtmadan önce npm install'yi çalıştırmanız gerekir.

Bu komutlar başarıyla tamamlandıktan sonra projenizin yapısı aşağıdaki gibi 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: "engines": {"node": "16"}. Bu, fonksiyonları yazma ve dağıtma. Şunları yapabilirsiniz: 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çın ve şu sayfada açıklandığı şekilde kodu eklemeye başlayın: bu bölümde bulabilirsiniz. Bu örnek için, projenizin require düğümünü kullanan Cloud Functions ve Yönetici SDK'sı modülleri açıklamalarına dikkat edin. 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/v1');

// 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 uygulama örneğini başlatın. Yönetici SDK'sı desteğinin mevcut olduğu her yerde, FCM, Authentication ve Firebase Realtime Database için bir Cloud Functions kullanarak Firebase'i entegre etmenin etkili bir yoludur.

Firebase KSA otomatik olarak ilk kullanıma açtığınızda Cloud Functions Düğüm modülü için Firebase ve Firebase SDK'sını yükler akılda kalıcı bir yolunu sunar. Projenize üçüncü taraf kitaplıkları eklemek için package.json dosyasını değiştirebilir ve npm install dosyasını çalıştırabilirsiniz. Daha fazla bilgi için bkz. Bağımlılıkları ele alın.

addMessage() işlevini ekleyin

addMessage() işlevi için şu satırları index.js işlevine 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 tüm istekler ExpressJS stilindeki sonuçlar İstek ve Yanıt onRequest() geri çağırma.

HTTP işlevleri eşzamanlıdır ( çağrılanabilir işlevler) içeriyorsa bir yanıt göndermeniz gerekir ve Cloud Firestore kullanarak çalışmayı erteleyin. addMessage() HTTP işlevi, HTTP uç noktasına bir metin değeri iletir ve bunu veritabanını /messages/:documentId/original yolu altında bulabilirsiniz.

makeUppercase() işlevini ekleyin

makeUppercase() işlevi için şu satırları index.js işlevine 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ığı zaman yürütülür. ref.set işlevi, dinlenecek dokümanı tanımlar. Performans nedeniyle, olabildiğince ayrıntı vermeye çalışın.

"Parametreler" ve "parametreler" etrafında şekillenen parantezler (örneğin, {documentId}) joker karakterler geri aramada, eşleştirilen verilerini gösteren

Cloud Firestore, onCreate() geri çağırmasına olanak tanır.

Cloud Firestore etkinlikleri gibi olay odaklı işlevler asenkrondur. Geri çağırma işlevi null, Nesne ve veya Vaat olarak anılır. Hiçbir şey döndürmezseniz işlev zaman aşımına uğrar, hata sinyali verir ve yeniden denenir. Senkronizasyon, Eşzamansız İşlemler ve Sözler başlıklı makaleyi inceleyin.

İşlevlerinizin yürütülmesini emüle etme

İlgili içeriği oluşturmak için kullanılan Firebase Local Emulator Suite Böylece, uygulamaları doğrudan müşterilerinize dağıtmak yerine yerel makinenizde Firebase projesi olabilir. Geliştirme sırasında yerel test yapılması önemle tavsiye edilir. Bunun bir nedeni, üretim ortamında maliyete neden olabilecek kodlama hatalarının (ör. sonsuz döngü) riskini azaltmasıdır.

İşlevlerinizi taklit etmek için:

  1. firebase emulators:start'yi çalıştırın ve Emulator Suite UI URL'sinin çıkışını kontrol edin. Varsayılan olarak localhost:4000 ancak farklı bir yerde barındırılıyor olabilir bağlantı noktası ekleyin. Emulator Suite UI

  2. addMessage() HTTP işlevinin URL'si için firebase emulators:start komutunun çıktısını kontrol edin. Şuna benzer olacaktır: http://localhost:5001/MY_PROJECT/us-central1/addMessage, aşağıdakiler hariç:

    1. MY_PROJECT, proje kimliğinizle değiştirilecek.
    2. Bağlantı noktası, yerel makinenizde farklı olabilir.
  3. ?text=uppercaseme sorgu dizesini, işlevin URL'sinin sonuna ekleyin. Aşağıdaki gibi görünecektir: http://localhost:5001/MY_PROJECT/us-central1/addMessage?text=uppercaseme İsteğe bağlı olarak, "uppercaseme" mesajını özel bir mesajla değiştirebilirsiniz.

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

  5. İşlevlerin etkilerini Emulator Suite UI aracında görüntüleyin:

    1. Günlükler sekmesinde, addMessage() ve makeUppercase() işlevlerinin çalıştığını belirten yeni günlükler görürsünüz:

      i functions: Beginning execution of "addMessage"

      i functions: Beginning execution of "makeUppercase"

    2. Firestore sekmesinde, orijinal kodunuzu içeren bir doküman hem de mesajınızın büyük harfli versiyonunu (kullanılmışsa orijinalinde "büyük harf" ise "BÜYÜK HARF" ifadesini görürsünüz).

İşlevleri bir üretim ortamına dağıtma

İşlevleriniz emülatörde istediğiniz gibi çalışmaya başladıktan sonra bunları üretim ortamında dağıtmaya, test etmeye ve çalıştırmaya devam edebilirsiniz. Unutmamanız gereken noktalar önerilen Node.js 14 çalışma zamanı ortamına dağıtmak için Blaze fiyatlandırma planı kapsamında olmalıdır. Cloud Functions fiyatlandırmasına bakın.

Eğitimi tamamlamak için işlevlerinizi dağıtın ve ardından makeUppercase()'u tetiklemek için addMessage()'ü yürütün.

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

     firebase deploy --only functions
     

    Bu komutu çalıştırdıktan sonra Firebase CLI, tüm HTTP işlevi uç noktalarının URL'sini döndürür. Terminalinizde aşağıdaki gibi bir satır görürsünüz:

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

    URL, proje kimliğinizi ve HTTP için bir bölgeyi içerir işlevini kullanın. Şu anda bu konuda endişelenmenize gerek olmasa da bazı üretim HTTP işlevleri, ağ gecikmesini en aza indirmek için bir konum belirtmelidir.

    "Şuna erişim yetkilendirilemiyor: " projenizin takma adını kontrol etmeyi deneyin.

  2. KSA'nın addMessage() URL çıkışını kullanarak bir metin sorgusu parametresi ekleyin, ve bir tarayıcıda açın:

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

    İşlev çalıştırılır ve tarayıcı, metin dizesinin depolandığı veritabanı konumundaki Firebase konsoluna yönlendirilir. Bu yazma etkinliği, dizenin büyük harfli bir sürümünü yazan makeUppercase() işlevini tetikler.

İşlevleri dağıtıp çalıştırdıktan sonra günlükleri Google Cloud konsolunda görüntüleyebilirsiniz. İşlevleri silmeniz gerekiyorsa Firebase KSA'yı kullanın.

Üretimde, çalıştırılacak minimum ve maksimum örnek sayısını ayarlayarak işlev performansını optimize edebilir ve maliyetleri kontrol edebilirsiniz. Görüntüleyin Ölçeklendirme davranışını kontrol etme bu çalışma zamanı seçenekleri hakkında daha fazla bilgi edinin.

Örnek kodun tamamını inceleme

İşlevleri içeren tamamlanmış functions/index.js aşağıda verilmiştir addMessage() ve makeUppercase(). Bu işlevler, bir HTTP uç noktasına bir parametre iletmenize olanak tanır. Bu parametre, Cloud Firestore değerini yazar ve ardından dizedeki tüm karakterleri büyük harf yaparak dönüştürür.

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

// 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 dokümanlarda, Yeşil Ofis web sitesinde Cloud Functions için işlevleri yönetin Ayrıca paydaşların Cloud Functions tarafından desteklenen tüm etkinlik türlerini işlemek için kullanılır.

Cloud Functions hakkında daha fazla bilgi edinmek için: şunları da yapabilir: