Dinamik içeriğinizi oluşturmak ve sunmak veya REST API'lerini mikro hizmetler olarak oluşturmak için Bulut İşlevlerini Firebase Barındırma ile eşleştirin.
Cloud Functions for Firebase, HTTPS isteklerine yanıt olarak arka uç kodunu otomatik olarak çalıştırmanıza olanak tanır. Kodunuz Google'ın bulutunda saklanır ve yönetilen bir ortamda çalışır. Kendi sunucularınızı yönetmenize ve ölçeklendirmenize gerek yoktur.
Örneğin, Firebase Barındırma ile entegre Bulut İşlevleri için kullanım durumları ve örnekleri için sunucusuz genel bakış sayfamızı ziyaret edin.
Cloud Functions'ı Firebase Barındırmaya Bağlayın
Bu bölüm, Firebase Barındırma'ya bir işlev bağlamak için bir gözden geçirme örneği sağlar.
Dinamik içerik sunma performansını artırmak için isteğe bağlı olarak önbellek ayarlarınızı yapabileceğinizi unutmayın.
1. Adım: Cloud Functions'ı kurun
Firebase CLI'nin en son sürümüne sahip olduğunuzdan ve Firebase Hosting'i başlattığınızdan emin olun.
CLI'yi yükleme ve Barındırmayı başlatma hakkında ayrıntılı talimatlar için, Barındırma için Başlarken kılavuzuna bakın.
Cloud Functions'ı kurduğunuzdan emin olun:
Cloud Functions'ı zaten kurduysanız 2. Adım: HTTPS işlevi oluşturma ve test etme adımına ilerleyebilirsiniz.
Cloud Functions'ı kurmadıysanız :
Proje dizininizin kökünden aşağıdaki komutu çalıştırarak Cloud Functions'ı başlatın:
firebase init functions
İstendiğinde, JavaScript'i seçin (bu gözden geçirme örneği JS kullanır).
Yerel proje dizininizde (az önce çalıştırdığınız Firebase komutu tarafından oluşturulmuş) bir
functions
dizininin olup olmadığını kontrol edin. Bufunctions
dizini, Cloud Functions kodunun yaşadığı yerdir.
2. Adım: Barındırma siteniz için bir HTTPS işlevi oluşturun ve test edin
Favori düzenleyicinizde
/functions/index.js
dosyasını açın.Dosyanın içeriğini aşağıdaki kodla değiştirin.
Bu kod, tıpkı bir saat gibi HTTPS isteklerine günün her saati için bir
BONG
ile yanıt veren bir HTTPS işlevi (bigben
adlı) oluşturur.const functions = require('firebase-functions'); exports.bigben = functions.https.onRequest((req, res) => { const hours = (new Date().getHours() % 12) + 1 // London is UTC + 1hr; res.status(200).send(`<!doctype html> <head> <title>Time</title> </head> <body> ${'BONG '.repeat(hours)} </body> </html>`); });
Firebase Local Emulator Suite'i kullanarak işlevlerinizi yerel olarak test edin.
Yerel proje dizininizin kökünden aşağıdaki komutu çalıştırın:
firebase emulators:start
CLI tarafından döndürülen yerel URL aracılığıyla işleve erişin, örneğin:
.http://localhost:5001/ PROJECT_ID /us-central1/bigben
HTTPS istekleri hakkında daha fazla bilgi edinmek için Bulut İşlevleri belgelerini ziyaret edin.
Bir sonraki adım, Firebase tarafından barındırılan siteniz için dinamik içerik oluşturabilmesi için bir Firebase Barındırma URL'sinden bu HTTPS işlevine nasıl erişeceğiniz konusunda size yol gösterir.
3. Adım: HTTPS isteklerini işlevinize yönlendirin
Yeniden yazma kuralları ile belirli kalıplarla eşleşen istekleri tek bir hedefe yönlendirebilirsiniz. Aşağıdaki adımlar, Hosting sitenizdeki ../bigben
yolundaki tüm istekleri bigben
işlevini yürütmek için nasıl yönlendireceğinizi gösterir.
firebase.json
dosyanızı açın.hosting
bölümünün altına aşağıdakirewrite
yapılandırmasını ekleyin:"hosting": { // ... // Add the "rewrites" attribute within "hosting" "rewrites": [ { "source": "/bigben", "function": "bigben", "region": "us-central1" // optional (see note below) "pinTag": true // optional (see note below) } ] }
Firebase öykünücüleriyle yeniden test ederek yönlendirmenizin beklendiği gibi çalıştığını onaylayın.
Yerel proje dizininizin kökünden aşağıdaki komutu çalıştırın:
firebase emulators:start
Siteniz için CLI tarafından döndürülen yerel olarak barındırılan URL'yi ziyaret edin (genellikle
localhost:5000
), ancak URL'yibigben
ile ekleyin, şöyle:http://localhost:5000/bigben
Siteniz için işlevinizi ve işlevselliğini yineleyin. Bu yinelemeleri test etmek için Firebase emülatörlerini kullanın.
region
,hosting.rewrites
yapılandırmasının birfunction
bloğundan çıkarılırsa Firebase CLI, belirtilmemişse varsayılan olarakus-central1
olarak ayarlanan işlevin kaynak kodundan bölgeyi otomatik olarak algılamaya çalışır. İşlevin kaynak kodu yoksa CLI, konuşlandırılan işlevden bölgeyi algılamaya çalışır. İşlev birden fazla bölgedeyse CLI,region
hosting.rewrites
yapılandırmasında belirtilmesini gerektirir.
pinTag
özelliği yalnızca Cloud Functions for Firebase'de (2. nesil) mevcuttur. Bu özellikle, sitenizin dinamik içeriğini oluşturan her bir işlevin, statik Barındırma kaynaklarınız ve Barındırma yapılandırmanızla senkronize tutulmasını sağlayabilirsiniz. Ayrıca bu özellik, Hosting önizleme kanallarındaki işlevlere yeniden yazma işlemlerinizin önizlemesini yapmanızı sağlar.
hosting.rewrites
yapılandırmasının birfunction
bloğuna"pinTag": true
eklerseniz, "sabitlenmiş" işlevçalıştırırken bile statik Barındırma kaynaklarınız ve yapılandırmanızla birlikte dağıtılır. Sitenizin bir sürümünü geri alırsanız, "sabitlenmiş" işlevi de geri alınır.
firebase deploy --only hosting Bu özellik, hizmet başına 1000 etiket ve bölge başına 2000 etiket sınırına sahip Cloud Run etiketlerine dayanır. Bu, yüzlerce dağıtımdan sonra bir sitenin en eski sürümlerinin çalışmayı durdurabileceği anlamına gelir.
Yeniden yazma kuralları hakkında daha fazla ayrıntı için Barındırma yapılandırma sayfasını ziyaret edin. Çeşitli Barındırma yapılandırmaları için yanıtların öncelik sırasını da öğrenebilirsiniz.
Dinamik içerik sunma performansını artırmak için isteğe bağlı olarak önbellek ayarlarınızı yapabileceğinizi unutmayın.
4. Adım: İşlevinizi dağıtın
İşleviniz öykünücüde istediğiniz gibi çalıştığında, onu gerçek proje kaynaklarıyla dağıtmaya, test etmeye ve çalıştırmaya devam edebilirsiniz. Bu, üretimde çalışan işlevler için ölçekleme davranışını kontrol etmek üzere çalışma zamanı seçeneklerini ayarlamayı düşünmek için iyi bir zamandır.
Yerel proje dizininizin kökünden aşağıdaki komutu çalıştırarak işlevinizi, Barındırma içeriğinizi ve yapılandırmanızı sitenize dağıtın:
firebase deploy --only functions,hosting
Canlı sitenize ve işlevinize aşağıdaki URL'lerden erişin:
Firebase alt alan adlarınız:
PROJECT_ID .web.app/bigben
vePROJECT_ID .firebaseapp.com/bigben
Tüm bağlı özel alanlar :
CUSTOM_DOMAIN /bigben
Bir web çerçevesi kullanın
Uygulamanızın dinamik içeriğini sunmak ve karmaşık web uygulamalarını daha kolay yazmak için Cloud Functions'ta Express.js gibi web çerçevelerini kullanabilirsiniz.
Aşağıdaki bölüm, Express.js'yi Firebase Barındırma ve Bulut İşlevleri ile kullanmaya yönelik bir örnek sunmaktadır.
functions
dizininizden aşağıdaki komutu çalıştırarak Express.js'yi yerel projenize kurun:npm install express --save
/functions/index.js
dosyanızı açın, ardından Express.js'yi içe aktarın ve başlatın:const functions = require('firebase-functions'); const express = require('express'); const app = express();
Aşağıdaki iki uç noktayı ekleyin:
/
adresinde web sitemizin dizinine hizmet verecek ilk uç noktayı ekleyin.app.get('/', (req, res) => { const date = new Date(); const hours = (date.getHours() % 12) + 1; // London is UTC + 1hr; res.send(` <!doctype html> <head> <title>Time</title> <link rel="stylesheet" href="/style.css"> <script src="/script.js"></script> </head> <body> <p>In London, the clock strikes: <span id="bongs">${'BONG '.repeat(hours)}</span></p> <button onClick="refresh(this)">Refresh</button> </body> </html>`); });
Ve
BONG
sayısını bir API olarak JSON biçiminde,/api
altında döndürmek için başka bir uç nokta:app.get('/api', (req, res) => { const date = new Date(); const hours = (date.getHours() % 12) + 1; // London is UTC + 1hr; res.json({bongs: 'BONG '.repeat(hours)}); });
Express.js uygulamasını bir HTTPS işlevi olarak dışa aktarın:
exports.app = functions.https.onRequest(app);
firebase.json
dosyanızda, tüm istekleriapp
işlevine yönlendirin. Bu yeniden yazma, Express.js'nin yapılandırdığımız farklı alt yola (bu örnekte/
ve/api
) hizmet vermesine izin verir.{ "hosting": { // ... // Add the "rewrites" attribute within "hosting" "rewrites": [ { "source": "**", "function": "app" } ] } }
Ara yazılım ekle
Örneğimize devam ederek, artık Express.js kullandığınıza göre, Express.js ara katman yazılımını normal şekilde ekleyebilirsiniz. Örneğin, uç noktalarımızda CORS isteklerini etkinleştirebilirsiniz.
Aşağıdaki komutu çalıştırarak
cors
ara katman yazılımını kurun:npm install --save cors
/functions/index.js
dosyanızı açın, ardından Express.js uygulamanıza şu şekildecors
ekleyin:const cors = require('cors')({origin: true}); app.use(cors);
Firebase'i Express uygulamaları ve ara yazılım modülleri ile kullanma hakkında daha fazla bilgi edinmek için Bulut İşlevleri belgelerini ziyaret edin.
Sonraki adımlar
Küresel bir CDN'de dinamik içeriğiniz için önbelleğe almayı ayarlayın .
Firebase Admin SDK'yı kullanarak diğer Firebase hizmetleriyle etkileşime geçin.
Cloud Functions için fiyatlandırmayı , kotaları ve sınırları inceleyin.