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.

İşlevleri içeren tam örnek kodu aşağıda bulabilirsiniz:

Node.js

// The Cloud Functions for Firebase SDK to create Cloud Functions and triggers.
const {logger} = require("firebase-functions");
const {onRequest} = require("firebase-functions/v2/https");
const {onDocumentCreated} = require("firebase-functions/v2/firestore");

// The Firebase Admin SDK to access Firestore.
const {initializeApp} = require("firebase-admin/app");
const {getFirestore} = require("firebase-admin/firestore");

initializeApp();

// Take the text parameter passed to this HTTP endpoint and insert it into
// Firestore under the path /messages/:documentId/original
exports.addmessage = 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 getFirestore()
      .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 saves an uppercased version of the message
// to /messages/:documentId/uppercase
exports.makeuppercase = onDocumentCreated("/messages/{documentId}", (event) => {
  // Grab the current value of what was written to Firestore.
  const original = event.data.data().original;

  // Access the parameter `{documentId}` with `event.params`
  logger.log("Uppercasing", event.params.documentId, original);

  const uppercase = original.toUpperCase();

  // You must return a Promise when performing
  // asynchronous tasks inside a function
  // such as writing to Firestore.
  // Setting an 'uppercase' field in Firestore document returns a Promise.
  return event.data.ref.set({uppercase}, {merge: true});
});

Python

# The Cloud Functions for Firebase SDK to create Cloud Functions and set up triggers.
from firebase_functions import firestore_fn, https_fn

# The Firebase Admin SDK to access Cloud Firestore.
from firebase_admin import initialize_app, firestore
import google.cloud.firestore

app = initialize_app()


@https_fn.on_request()
def addmessage(req: https_fn.Request) -> https_fn.Response:
    """Take the text parameter passed to this HTTP endpoint and insert it into
    a new document in the messages collection."""
    # Grab the text parameter.
    original = req.args.get("text")
    if original is None:
        return https_fn.Response("No text parameter provided", status=400)

    firestore_client: google.cloud.firestore.Client = firestore.client()

    # Push the new message into Cloud Firestore using the Firebase Admin SDK.
    _, doc_ref = firestore_client.collection("messages").add({"original": original})

    # Send back a message that we've successfully written the message
    return https_fn.Response(f"Message with ID {doc_ref.id} added.")


@firestore_fn.on_document_created(document="messages/{pushId}")
def makeuppercase(event: firestore_fn.Event[firestore_fn.DocumentSnapshot | None]) -> None:
    """Listens for new documents to be added to /messages. If the document has
    an "original" field, creates an "uppercase" field containg the contents of
    "original" in upper case."""

    # Get the value of "original" if it exists.
    if event.data is None:
        return
    try:
        original = event.data.get("original")
    except KeyError:
        # No "original" field, so do nothing.
        return

    # Set the "uppercase" field.
    print(f"Uppercasing {event.params['pushId']}: {original}")
    upper = original.upper()
    event.data.reference.update({"uppercase": upper})

Bu eğitim hakkında

Bunun için Cloud Firestore ve HTTP tetiklenen işlevleri seçtik bu arka plan tetikleyicilerinin tamamen test edilebildiği ve Firebase Local Emulator Suite üzerinden. Bu araç seti ayrıca Realtime Database, Cloud Storage ve PubSub, Auth ve HTTP çağrılabilir tetikleyicileri. Remote Config ve TestLab tetikleyicileri gibi diğer arka plan tetikleyici türleri, bu sayfada açıklanmayan araç setleri kullanılarak etkileşimli olarak test edilebilir.

Bu eğitimdeki aşağıdaki bölümlerde, örneği derlemek, test etmek ve dağıtmak için gereken adımlar ayrıntılı olarak açıklanmıştır.

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. Zaman İşlem tamamlandığında Firebase'inizin genel bakış sayfasına yönlendirilirsiniz projesi Firebase konsolda da görüntülenebilir.

Ortamınızı ve Firebase CLI'ı ayarlama

Node.js

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

Node.js ve npm yüklendikten sonra, Firebase CLI'ı yükleyin tercih ettiğiniz yöntemle yapabilirsiniz. CLI'yi npm üzerinden yüklemek için:

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'ün en son sürümüne güncellemek için aynı komutu yeniden çalıştırın.

Python

İşlev yazmak için bir Python ortamına, işlevleri Cloud Functions çalışma zamanına dağıtmak için ise Firebase CLI'ye ihtiyacınız vardır. Şunları yapmak için venv kullanmanızı öneririz: ve bağımlılıkları birazdan irdeleyeceğiz. 3.10 ve 3.11 Python sürümleri desteklenir.

Python'u yükledikten sonra Firebase CLI'ı yükleyin tercih ettiğiniz yöntemle yapabilirsiniz.

Projenizi ilk kullanıma hazırlayın

Cloud Functions için Firebase SDK'sını başlattığınızda boş bir proje oluşturmuş olursunuz ve minimum düzeyde örnek kod içeren bir sayfa örneğidir. Node.js kullanıyorsanız işlev oluşturmak için TypeScript veya JavaScript'i seçebilirsiniz. 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ın. Bu eğitim için varsayılan ayarı kabul edebilirsiniz değerlerine sahip etiketleri kullanır. Bu projede henüz Cloud Firestore kullanmadıysanız Cloud Firestore'ü kullanmaya başlama bölümünde açıklandığı gibi Firestore için bir başlangıç modu ve konum da seçmeniz gerekir.
  4. firebase init functions çalıştır. CLI, sizden mevcut bir kod tabanı veya ilk kullanıma hazırlayıp yeni bir ad verin. Yeni başladığınızda varsayılan konumda tek bir kod tabanı yeterlidir. Daha sonra uygulamanız genişledikçe işlevleri kod tabanlarında düzenlemek isteyebilirsiniz.
  5. KSA, dil desteği için size şu seçenekleri sunar:

    • JavaScript
    • TypeScript
    • Python

    Bu eğitim için JavaScript veya Python'u seçin. TypeScript'te içerik oluşturma hakkında bilgi edinmek için TypeScript ile işlev yazma başlıklı makaleyi inceleyin.

  6. CLI, bağımlılıkları yükleme seçeneği sunar. Bağımlılıkları başka bir şekilde yönetmek istiyorsanız bu isteği reddedebilirsiniz.

Bu komutlar başarıyla tamamlandıktan sonra projenizin yapısı aşağıdaki gibi görünür:

Node.js

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

Node.js için, başlatma sırasında oluşturulan package.json dosyası önemli bir anahtar içerir: "engines": {"node": "18"}. Bu, fonksiyonları yazma ve dağıtma. Desteklenen diğer sürümleri seçebilirsiniz.

Python

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
      |
      +- main.py      # Main source file for your Cloud Functions code
      |
      +- requirements.txt  #  List of the project's modules and packages 
      |
      +- venv/ # Directory where your dependencies are installed

Gerekli modülleri içe aktarma ve uygulamayı başlatma

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 Cloud Functions ve Yönetici SDK'sı modüllerini etkinleştirin. Çizgi ekleyin örneğin, kaynak dosyanıza ekleyin:

Node.js

// The Cloud Functions for Firebase SDK to create Cloud Functions and triggers.
const {logger} = require("firebase-functions");
const {onRequest} = require("firebase-functions/v2/https");
const {onDocumentCreated} = require("firebase-functions/v2/firestore");

// The Firebase Admin SDK to access Firestore.
const {initializeApp} = require("firebase-admin/app");
const {getFirestore} = require("firebase-admin/firestore");

initializeApp();

Python

# The Cloud Functions for Firebase SDK to create Cloud Functions and set up triggers.
from firebase_functions import firestore_fn, https_fn

# The Firebase Admin SDK to access Cloud Firestore.
from firebase_admin import initialize_app, firestore
import google.cloud.firestore

app = initialize_app()

Bu satırlar, gerekli modülleri 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 modül için Firebase Admin SDK'sını ve Firebase SDK'sını yükler akılda kalıcı bir yolunu sunar. Projenize üçüncü taraf kitaplıkları ekleme hakkında daha fazla bilgi için Bağımlılıklarla başa çıkma başlıklı makaleyi inceleyin.

"Mesaj ekle"yi ekleyin işlev

"Mesaj ekleyin" seçeneği için fonksiyonunu kullanmak için aşağıdaki satırları kaynak dosyanıza ekleyin:

Node.js

// Take the text parameter passed to this HTTP endpoint and insert it into
// Firestore under the path /messages/:documentId/original
exports.addmessage = 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 getFirestore()
      .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.`});
});

Python

@https_fn.on_request()
def addmessage(req: https_fn.Request) -> https_fn.Response:
    """Take the text parameter passed to this HTTP endpoint and insert it into
    a new document in the messages collection."""
    # Grab the text parameter.
    original = req.args.get("text")
    if original is None:
        return https_fn.Response("No text parameter provided", status=400)

    firestore_client: google.cloud.firestore.Client = firestore.client()

    # Push the new message into Cloud Firestore using the Firebase Admin SDK.
    _, doc_ref = firestore_client.collection("messages").add({"original": original})

    # Send back a message that we've successfully written the message
    return https_fn.Response(f"Message with ID {doc_ref.id} added.")

"Mesaj ekleyin" fonksiyonu bir HTTP uç noktasıdır. Uç noktaya yapılan tüm istekler Bu sonuç, platformunuzun istek işleyicisi (onRequest() veya on_request).

HTTP işlevleri eşzamanlıdır ( çağrılanabilir işlevler) içermesi gerekir. Bu nedenle, ve Cloud Firestore kullanarak çalışmayı erteleyin. "Mesaj ekleyin" HTTP işlevi, HTTP uç noktasına bir metin değeri iletir ve bunu /messages/:documentId/original yolunu izleyin.

"Büyük harf yap" işlevini ekleyin

"Büyük harf yap" işlevi için kaynak dosyanıza şu satırları ekleyin:

Node.js

// Listens for new messages added to /messages/:documentId/original
// and saves an uppercased version of the message
// to /messages/:documentId/uppercase
exports.makeuppercase = onDocumentCreated("/messages/{documentId}", (event) => {
  // Grab the current value of what was written to Firestore.
  const original = event.data.data().original;

  // Access the parameter `{documentId}` with `event.params`
  logger.log("Uppercasing", event.params.documentId, original);

  const uppercase = original.toUpperCase();

  // You must return a Promise when performing
  // asynchronous tasks inside a function
  // such as writing to Firestore.
  // Setting an 'uppercase' field in Firestore document returns a Promise.
  return event.data.ref.set({uppercase}, {merge: true});
});

Python

@firestore_fn.on_document_created(document="messages/{pushId}")
def makeuppercase(event: firestore_fn.Event[firestore_fn.DocumentSnapshot | None]) -> None:
    """Listens for new documents to be added to /messages. If the document has
    an "original" field, creates an "uppercase" field containg the contents of
    "original" in upper case."""

    # Get the value of "original" if it exists.
    if event.data is None:
        return
    try:
        original = event.data.get("original")
    except KeyError:
        # No "original" field, so do nothing.
        return

    # Set the "uppercase" field.
    print(f"Uppercasing {event.params['pushId']}: {original}")
    upper = original.upper()
    event.data.reference.update({"uppercase": upper})

"Büyük harf yap" işlevi, Cloud Firestore yazıldığında yürütülür ve dinlenecek belgeyi tanımlar. Performans nedeniyle mümkün olduğunca ayrıntılı bilgi vermeniz gerekir.

"Parametreler" ve "parametreler" etrafında şekillenen parantezler (örneğin, {documentId}) joker karakterler geri aramada, eşleştirilen verilerini gösteren Cloud Firestore, geri çağırmasına olanak tanır.

Node.js'de, Cloud Firestore etkinlikleri gibi etkinliğe dayalı işlevler eşzamansız. Geri çağırma işlevi bir null, nesne veya Promise döndürmelidir. Hiçbir şey döndürmezseniz işlev zaman aşımına uğrar, hata sinyali verir ve yeniden denenir. Senkronizasyon, Eşzamansız ve Vaatler başlıklı bölüme bakın.

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

Firebase Local Emulator Suite, Firebase projesine dağıtmak yerine yerel makinenizde uygulama oluşturmanıza ve test etmenize olanak tanır. 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 komutunu çalıştırın ve URL'nin çıkışını kontrol edin Emulator Suite UI. Varsayılan olarak localhost:4000 ancak farklı bir yerde barındırılıyor olabilir bağlantı noktası ekleyin. Emulator Suite UI

  2. HTTP işlevinin URL'si için firebase emulators:startkomutunun çıktısını kontrol edin. http://localhost:5001/MY_PROJECT/us-central1/addMessage ile benzerdir ancak aşağıdakiler farklıdır:

    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. Emulator Suite UI'teki işlevlerin etkilerini görüntüleyin:

    1. Günlükler sekmesinde, verilerinizin günlük olarak kaydedildiğini HTTP işlevleriniz başarıyla ç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 istendiği gibi çalıştıktan sonra bunları üretim ortamında dağıtmaya, test etmeye ve çalıştırmaya devam edebilirsiniz. Üretimde dağıtmak için projenizin Blaze fiyatlandırma planında olması gerektiğini unutmayın. Cloud Functions fiyatlandırmasına bakın.

Eğiticiyi tamamlamak için işlevlerinizi dağıtıp yürütün oluşturabilirsiniz.

  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. CLI'nin 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 yazma etkinliği, dizenin büyük harfli bir sürümünü yazan "make uppercase" işlevini tetikler.

İşlevleri dağıtıp yürüttükten sonra şunları yapabilirsiniz: günlükleri Google Cloud konsolunda görüntüleyebilirsiniz. İşlevleri silmeniz gerekiyorsa Firebase KSA'yı 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.

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: