Cloud Functions özelliğini kullanmaya başlamak için bu eğitimdeki adımları uygulayın. Eğitim, gerekli kurulum görevleriyle başlar ve iki ilgili işlevin oluşturulması, test edilmesi ve dağıtılmasıyla devam eder:
- Metin değerini kabul eden ve Cloud Firestore değerine yazan bir URL'yi gösteren "mesaj ekle" işlevi.
- Cloud Firestore yazma işleminde tetiklenen ve metni büyük harfe dönüştüren bir "büyük harfe dönüştürme" işlevi.
Bu örnek için Cloud Firestore ve HTTP ile tetiklenen JavaScript işlevlerini seçmemizin nedenlerinden biri, bu arka plan tetikleyicilerinin Firebase Local Emulator Suite aracılığıyla kapsamlı bir şekilde test edilebilmesidir. Bu araç seti Realtime Database, PubSub, Auth ve HTTP çağrılabilir tetikleyicilerini de destekler. Remote Config, TestLab ve Analytics tetikleyicileri gibi diğer arka plan tetikleyicileri, bu sayfada açıklanmayan araç setleri kullanılarak etkileşimli olarak test edilebilir.
Bu eğitimde, örneği derlemek, test etmek ve dağıtmak için gereken adımlar ayrıntılı olarak açıklanmaktadır. Yalnızca kodu çalıştırmak ve incelemek istiyorsanız Örnek kodun tamamını inceleme bölümüne gidin.
Firebase veya Cloud'da yeni misiniz?
Firebase veya Google Cloud'i kullanmaya yeni başladıysanız aşağıdaki adımları uygulayın.
Tamamen yeni bir Firebase projesi (ve temelindeki Google Cloud projesi) oluşturmak istiyorsanız da bu adımları uygulayabilirsiniz.
- Firebase konsolunda oturum açın.
- Yeni bir Firebase projesi oluşturmak için düğmeyi tıklayın.
-
Metin alanına bir proje adı girin.
Bir Google Cloud kuruluşunun üyesiyseniz projenizi oluşturacağınız klasörü seçebilirsiniz.
- İstenirse Firebase şartlarını inceleyip kabul edin, ardından Devam'ı tıklayın.
- (İsteğe bağlı) Firebase konsolunda Yapay Zeka Desteği'ni ("Firebase'de Gemini" olarak adlandırılır) etkinleştirin. Bu özellik, başlangıç yapmanıza ve geliştirme sürecinizi kolaylaştırmanıza yardımcı olabilir.
-
(İsteğe bağlı) Projeniz için Google Analytics özelliğini ayarlayın. Bu özellik, şu Firebase ürünlerini kullanırken optimum deneyim sağlar: Firebase A/B Testing, Cloud Messaging, Crashlytics, In-App Messaging ve Remote Config (Kişiselleştirme dahil).
Mevcut bir Google Analytics hesabı seçin 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.
- Proje oluştur'u tıklayın.
Firebase projenizi oluşturur, bazı ilk kaynakları sağlar ve önemli API'leri etkinleştirir. İşlem tamamlandığında Firebase konsolunda Firebase projenizin genel bakış sayfasına yönlendirilirsiniz.
Mevcut Cloud projesi
Firebase'i mevcut bir Google Cloud projesiyle kullanmaya başlamak istiyorsanız aşağıdaki adımları uygulayın. Mevcut bir Google Cloud projesine"Firebase ekleme" hakkında daha fazla bilgi edinin ve sorunları giderin.
- Mevcut Google Cloud projesine erişmenizi sağlayan hesapla Firebase konsolunda oturum açın.
- Yeni bir Firebase projesi oluşturmak için düğmeyi tıklayın.
- Sayfanın alt kısmında Firebase'i Google Cloud projesine ekle'yi tıklayın.
- Metin alanına mevcut projenin proje adını girmeye başlayın ve ardından görüntülenen listeden projeyi seçin.
- Projeyi aç'ı tıklayın.
- İstenirse Firebase şartlarını inceleyip kabul edin, ardından Devam'ı tıklayın.
- (İsteğe bağlı) Firebase konsolunda Yapay Zeka Desteği'ni ("Firebase'de Gemini" olarak adlandırılır) etkinleştirin. Bu özellik, başlangıç yapmanıza ve geliştirme sürecinizi kolaylaştırmanıza yardımcı olabilir.
-
(İsteğe bağlı) Projeniz için Google Analytics özelliğini ayarlayın. Bu özellik, şu Firebase ürünlerini kullanırken optimum deneyim sağlar: Firebase A/B Testing, Cloud Messaging, Crashlytics, In-App Messaging ve Remote Config (Kişiselleştirme dahil).
Mevcut bir Google Analytics hesabı seçin 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.
- Firebase ekle'yi tıklayın.
Firebase, mevcut projenize Firebase'i ekler. İşlem tamamlandığında Firebase konsolunda Firebase projenizin genel bakış sayfasına yönlendirilirsiniz.
İşlev yazmak için Node.js ortamına, işlevleri Cloud Functions çalışma zamanına dağıtmak için ise Firebase KSA'ya ihtiyacınız vardır. Node.js ve npm'yi yüklemek için Node Version Manager önerilir.
Node.js ve npm'yi yükledikten sonra tercih ettiğiniz yöntemle Firebase CLI'yı yükleyin. CLI'yı npm aracılığıyla yüklemek için şunu kullanın:
npm install -g firebase-tools
Bu işlem, genel olarak kullanılabilen firebase komutunu yükler. Komut başarısız olursa npm izinlerini değiştirmeniz gerekebilir.
firebase-tools aracını en yeni sürüme güncellemek için aynı komutu tekrar çalıştırın.
Cloud Functions için Firebase SDK'sını 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ğitim için Cloud Firestore aracını da başlatmanız gerekir.
Projenizi başlatmak için:
Tarayıcı üzerinden giriş yapmak ve Firebase KSA'nın kimliğini doğrulamak için
firebase loginkomutunu çalıştırın.Firebase proje dizininize gidin.
firebase init firestorekomutunu çalıştırın. Bu eğitimde, Firestore kuralları ve dizin dosyaları istendiğinde varsayılan değerleri kabul edebilirsiniz. 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 seçmeniz gerekir.firebase init functionskomutunu çalıştırın. CLI, mevcut bir kod tabanını seçmenizi veya yeni bir kod tabanı başlatıp adlandırmanızı ister. Başlangıçta varsayılan konumda tek bir kod tabanı yeterlidir. Daha sonra, uygulamanız genişledikçe işlevleri kod tabanlarında düzenlemek isteyebilirsiniz.CLI, dil desteği için aşağıdaki seçenekleri sunar:
- JavaScript
- Python
- TypeScript Daha fazla bilgi için TypeScript ile işlev yazma başlıklı makaleyi inceleyin.
Bu eğitim için JavaScript'i seçin.
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 reddetmenizde sakınca yoktur. Ancak reddederseniz işlevlerinizi emüle etmeden veya dağıtmadan önce
npm installkomutunu çalıştırmanız gerekir.
Bu komutlar başarıyla tamamlandıktan sonra proje yapınız 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 içerir: "engines": {"node": "16"}. 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.
Kurulum görevlerini tamamladıktan sonra kaynak dizini açabilir ve aşağıdaki bölümlerde açıklandığı şekilde kod eklemeye başlayabilirsiniz. Bu örnekte projenizin, Node require ifadelerini kullanarak Cloud Functions ve Admin SDK modüllerini içe aktarması gerekir. index.js dosyanıza aşağıdakine benzer 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 { initializeApp } = require("firebase-admin/app"); const { getFirestore } = require("firebase-admin/firestore"); 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ır.
Admin SDK desteği, FCM, Authentication ve Firebase Realtime Database için olduğu gibi, sunulduğu her yerde Cloud Functions kullanarak Firebase'i entegre etmenin güçlü bir yolunu sunar.
Firebase CLI, projenizi başlattığınızda Cloud Functions Node modülleri için Firebase ve Firebase SDK'sını otomatik olarak yükler. Projenize üçüncü taraf kitaplıkları eklemek için package.json dosyasını değiştirip npm install komutunu çalıştırabilirsiniz.
Daha fazla bilgi için Bağımlılıkları İşleme başlıklı makaleyi inceleyin.
addMessage() işlevini ekleme
addMessage() işlevi için index.js dosyasına şu satırları 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 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.` }); });
addMessage() işlevi bir HTTP uç noktasıdır. Uç noktaya gönderilen tüm istekler, ExpressJS tarzı Request ve Response nesnelerinin onRequest() geri çağırma işlevine iletilmesiyle sonuçlanır.
HTTP işlevleri eşzamanlıdır (çağrılabilir işlevlere benzer). Bu nedenle, mümkün olan en kısa sürede yanıt göndermeniz ve Cloud Firestore kullanarak çalışmayı ertelemeniz gerekir. addMessage() HTTP işlevi, HTTP uç noktasına bir metin değeri iletir ve bu değeri /messages/:documentId/original yolunun altındaki veritabanına ekler.
makeUppercase() işlevini ekleme
makeUppercase() işlevi için index.js dosyasına şu satırları 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 öğesine yazıldığında yürütülür. ref.set işlevi, dinlenecek dokümanı tanımlar. Performans açısından, mümkün olduğunca spesifik olmanız gerekir.
Süslü parantezler (ör. {documentId}), geri çağırmada eşleşen verilerini gösteren "parametreleri" (joker karakterler) çevreler.
Cloud Firestore, yeni mesajlar eklendiğinde onCreate() geri çağırma işlevini tetikler.
Cloud Firestore etkinlikleri gibi etkinliğe dayalı işlevler eşzamansızdır. Geri çağırma işlevi null, bir nesne veya Promise döndürmelidir.
Herhangi bir şey döndürmezseniz işlev zaman aşımına uğrar, hata bildirir ve yeniden denenir. Senkron, Eş Zamansız ve Promise'ler bölümüne bakın.
Firebase Local Emulator Suite, uygulamaları bir Firebase projesine dağıtmak yerine yerel makinenizde derlemenize 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ı (ör. sonsuz döngü) riskini azaltmasıdır.
İşlevlerinizi emüle etmek için:
firebase emulators:startkomutunu çalıştırın ve Emulator Suite UI URL'si için çıkışı kontrol edin. Varsayılan olarak localhost:4000'dir ancak makinenizdeki farklı bir bağlantı noktasında barındırılabilir. Emulator Suite UI sayfasını açmak için bu URL'yi tarayıcınıza girin.firebase emulators:startkomutunun çıkışında HTTP işlevinin (addMessage()) URL'sini kontrol edin. Aşağıdaki farklar dışındahttp://localhost:5001/MY_PROJECT/us-central1/addMessageile benzer görünür:MY_PROJECT, proje kimliğinizle değiştirilir.- Yerel makinenizde bağlantı noktası farklı olabilir.
İşlev URL'sinin sonuna
?text=uppercasemesorgu dizesini ekleyin. Bu, şuna benzer şekilde görünmelidir:http://localhost:5001/MY_PROJECT/us-central1/addMessage?text=uppercaseme. İsterseniz "uppercaseme" mesajını özel bir mesajla değiştirebilirsiniz.URL'yi tarayıcınızda yeni bir sekmede açarak yeni bir mesaj oluşturun.
Emulator Suite UI işlevlerinin etkilerini görüntüleyin:
Logs (Günlükler) sekmesinde,
addMessage()vemakeUppercase()işlevlerinin çalıştığını gösteren yeni günlükler görürsünüz:i functions: Beginning execution of "addMessage"i functions: Beginning execution of "makeUppercase"Firestore sekmesinde, orijinal mesajınızı ve mesajınızın büyük harfli sürümünü içeren bir doküman görürsünüz (Orijinal mesaj "uppercaseme" ise "UPPERCASEME" ifadesini görürsünüz).
İşlevleriniz emülatörde istediğiniz gibi çalıştıktan sonra bunları üretim ortamında dağıtma, test etme ve çalıştırma aşamasına geçebilirsiniz. Node.js 14 çalışma zamanı ortamına dağıtım yapmak için projenizin Blaze fiyatlandırma planında olması gerektiğini unutmayın. Cloud Functions fiyatlandırmasını inceleyin.
Eğitimi tamamlamak için işlevlerinizi dağıtın ve ardından makeUppercase() işlevini tetiklemek için addMessage() komutunu çalıştırın.
İş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/addMessageURL, proje kimliğinizin yanı sıra HTTP işlevi için bir bölge içerir. Şu anda endişelenmenize gerek olmasa da bazı üretim HTTP işlevleri, ağ gecikmesini en aza indirmek için bir konum belirtmelidir.
"Projeye erişim yetkilendirilemiyor" gibi erişim hatalarıyla karşılaşırsanız proje takma adınızı kontrol edin.
CLI tarafından oluşturulan
addMessage()URL'sini kullanarak bir metin sorgusu parametresi ekleyin ve URL'yi tarayıcıda açın:https://us-central1-MY_PROJECT.cloudfunctions.net/addMessage?text=uppercasemetooİşlev yürütülür ve tarayıcıyı, metin dizesinin depolandığı veritabanı konumundaki Firebase konsoluna yönlendirir. Bu yazma etkinliği, dizeyi büyük harfle yazan
makeUppercase()işlevini tetikler.
İşlevleri dağıtıp yürüttükten sonra günlükleri Google Cloud konsolunda görüntüleyebilirsiniz. Geliştirme veya üretim aşamasında işlevleri silmeniz gerekiyorsa Firebase CLI'yı kullanın.
Üretim ortamında, ç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 Ölçeklendirme davranışını kontrol etme başlıklı makaleyi inceleyin.
Örnek kodun tamamını inceleme
addMessage() ve makeUppercase() işlevlerini içeren tamamlanmış functions/index.js burada verilmiştir. Bu işlevler, Cloud Firestore'e değer yazan bir HTTP uç noktasına parametre iletmenize ve ardından dizedeki tüm karakterleri büyük harfe dönüştürmenize olanak tanı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 { 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 = 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 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 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ümanda, Cloud Functions için işlevleri yönetme ve Cloud Functions tarafından desteklenen tüm etkinlik türlerini işleme hakkında daha fazla bilgi edinebilirsiniz.
Cloud Functions hakkında daha fazla bilgi edinmek için şunları da yapabilirsiniz:
- Cloud Functions için kullanım alanları hakkında bilgi edinin.
- Cloud Functions codelab'ini deneyin.
- GitHub'daki kod örneklerini inceleyip çalıştırın.