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


Cloud Functions'ı kullanmaya başlamak için şu eğiticiyi inceleyin: 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'a entegre edebilirsiniz.
  • "Büyük harf yap" Cloud Firestore'da yazma ve dönüştürme işlemini tetikleyen işlev büyük harfe çevirebilirsiniz.

Bunun için Cloud Firestore ve HTTP tetiklenmiş JavaScript işlevlerini seçtik bu arka plan tetikleyiciler ayrıntılı şekilde test edilebildiğinden Firebase Local Emulator Suite kullanın. Bu araç seti Realtime Database'i de destekliyor. PubSub, Auth ve HTTP çağrılabilir tetikleyicileri. Diğer arka plan tetikleyici türleri Remote Config, TestLab ve Analytics tetikleyicileri gibi etkileşimli bir şekilde test etmek için, bu sayfada açıklandığından emin olun.

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 incelemek isterseniz Örnek kodu eksiksiz inceleme bölümüne geçin.

Firebase Projesi oluşturma

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

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

    • Yeni proje oluşturmak için istediğiniz proje adını girin. Ayrıca isteğe bağlı olarak proje adının altında gösterilen proje kimliğini düzenleyin.

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

  3. Devam'ı tıklayın.

  4. (İsteğe bağlı) Projeniz için Google Analytics'i kurun. Bu sayede aşağıdakileri yapabilirsiniz: kullanarak en iyi deneyime sahip olmanız gerekir:

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

    Yeni bir hesap oluşturuyorsanız Analytics raporlama konumu, ardından kabul edin ve Google Analytics şartlarını öğreneceğiz.

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

Firebase, Firebase projeniz için kaynakları otomatik olarak sağlar. Zaman İşlem tamamlandığında Firebase'inizin genel bakış sayfasına yönlendirilirsiniz projesindeki adımları uygulayın.

Node.js'yi ve Firebase CLI'ı ayarlama

İşlev yazmak için bir Node.js ortamına ihtiyacınız vardır, Firebase CLI'ı kullanarak işlevleri dağıtabilirsiniz. Cloud Functions çalışma zamanı. Node.js ve npm'yi yüklemek için Düğüm Sürüm Yöneticisi önerilir.

Node.js ve npm yüklendikten sonra, Firebase CLI'ı yükleyin tercih ettiğiniz yöntemle yapabilirsiniz. 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

Cloud Functions için Firebase SDK'sını başlattığınızda boş bir proje oluşturursunuz ve minimum düzeyde örnek kodlar içerir ve Fonksiyon oluşturmak için TypeScript veya JavaScript kullanın. Bu Sözleşme'nin amaçları doğrultusunda, Cloud Firestore'u ilk kullanıma hazırlamanız da gerekir.

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

  1. Tarayıcı üzerinden giriş yapmak vefirebase login Firebase CLI.
  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 henüz Cloud Firestore'u kullanmadıysanız açıklandığı gibi Firestore için bir başlangıç modu ve konum seçmeniz gerekir: Cloud Firestore'u kullanmaya başlayın.
  4. firebase init functions çalıştır. 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, npm ile bağımlılıkları yükleme seçeneği sunar. Güvenlidir Bağımlılıkları başka bir şekilde yönetmek istiyorsanız reddetmeyi tercih edebilirsiniz. ancak reddederseniz emülasyondan önce npm install komutunu çalıştırmanız gerekir. daha yakından inceleyeceğiz.

Bu komutlar başarıyla tamamlandıktan sonra proje yapınız bu:

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. Çizgi ekleyin Şunun gibi index.js dosyanız:

// 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 ise Cloud Functions'ı kullanarak Firebase'i entegre etmenin etkili bir yoludur.

Firebase CLI, otomatik olarak ilk kullanıma açtığınızda Cloud Functions Düğümü modülleri için Firebase ve Firebase SDK'sını yükler akılda kalıcı bir yolunu sunar. Üçüncü taraf kitaplıkları eklemek için eklemek için package.json öğesini değiştirebilir ve npm install ç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çermesi gerekir. Bu nedenle, ve Cloud Firestore kullanarak işleri 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ığında yürütülür. İlgili içeriği oluşturmak için kullanılan ref.set işlevi dinlenecek belgeyi 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, aşağıdaki gibi onCreate() geri çağırmasına olanak tanır.

Cloud Firestore etkinlikleri gibi etkinliğe dayalı işlevler eşzamansız. 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, bir hata sinyali verir ve yeniden denendi. Senkronizasyon, Eşzamansız ve Vaatler başlıklı bölüme bakın.

İş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. ortaya çıkabilecek kodlama hatalarının riskini azalttığı için Bir üretim ortamında (örneğin, sonsuz döngü) maliyete neden olabilir.

İşlevlerinizi emüle etmek için:

  1. firebase emulators:start komutunu çalıştırın ve URL'nin çıkışını kontrol edin gösteren bir e-posta alırsınız. Varsayılan olarak localhost:4000 ancak farklı bir yerde barındırılıyor olabilir bağlantı noktası ekleyin. Emulator Suite kullanıcı arayüzü.

  2. firebase emulators:start çıkışını kontrol edin komutu addMessage() HTTP fonksiyonu. Ş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 İsterseniz "büyük harf" mesajını değiştirebilirsiniz. özele dönüştür mesajını alırsınız.

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

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

    1. Günlükler sekmesinde, işlevlerin gerçekleştirildiğini gösteren günlükler addMessage() ve makeUppercase() şu an çalıştırıldı:

      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 ve üretim ortamında dağıtmayı, test etmeyi ve çalıştırmayı içerir. 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. Görüntüleyin Cloud Functions fiyatlandırması.

Eğiticiyi tamamlamak için işlevlerinizi dağıtıp yürütün makeUppercase() tetiklemek için addMessage().

  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. Terminalinizde şuna benzer 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. Bu konuda endişelenmenize gerek olmasa da, bazı üretim HTTP işlevleri için bir konum Ağ gecikmesini en aza indirin.

    "Ş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, tarayıcıyı çalıştırır ve şuraya yönlendirir: Veritabanı konumundaki Firebase konsolu metin dizesinin depolandığı yer. Bu büyük harfle yazan makeUppercase() etkinlik tetikleyicilerini yaz dizesinin sürümü için de geçerlidir.

İşlevleri dağıtıp yürüttükten sonra şunları yapabilirsiniz: Google Cloud Console'da günlükleri görüntüleyebilirsiniz. İşlevleri silmeniz gerekiyorsa Firebase CLI'ı kullanın.

Üretimde, fonksiyonların performansını ve kontrolünü optimize etmek isteyebilirsiniz. minimum ve maksimum örnek sayısını ayarlayarak otomatik maliyetleri artırır. 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ı inceleyin

İşlevleri içeren tamamlanmış functions/index.js aşağıda verilmiştir addMessage() ve makeUppercase(). Bu işlevler bir parametresini bir HTTP uç noktasına Cloud Firestore'a bir değer yazan ve ardından bunu dizedeki tüm karakterleri büyük harfle yazmak

// 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önetme Ayrıca paydaşların Cloud Functions tarafından desteklenen tüm etkinlik türlerini işleyin.

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