1. Genel Bakış
Google Cloud Functions, etkinlik odaklı bir sunucusuz işlem platformudur. Cloud Functions, kaynak sağlama veya değişen gereksinimleri karşılamak için ölçeklendirme hakkında endişelenmeden kod yazmanıza olanak tanır.
Javascript'te yazılan Cloud Functions işlevleri, Google Cloud Platform'daki Node.js ortamında yürütülür. Taşınabilirliği ve yerel testleri etkinleştirmek için Cloud Functions işlevinizi herhangi bir standart Node.js çalışma zamanında çalıştırabilirsiniz.
Adım adım açıklamalı kılavuz
Bu kod laboratuvarında, belirtilen bir sıcaklığın kabul edilebilir olup olmadığını veya çok sıcak olduğunu bildiren bir Node.js Cloud Functions işlevi oluşturacaksınız. Cloud Functions işlevinizi yerel makinenizde Visual Studio Code'u kullanarak oluşturur, test eder ve hata ayıklayacaksınız. Son olarak işlevinizi Google Cloud Platform'a dağıtırsınız.
Neler öğreneceksiniz?
- Node.js için Functions Framework.
- Yerel olarak bir HTTP Cloud Functions işlevi oluşturun ve test edin.
- Yerel makinenizden bir HTTP işlevinde hata ayıklama
- Yerel makinenizden bir HTTP işlevi dağıtın.
2. Kurulum ve Gereksinimler
Ön koşullar
- Google Cloud SDK
- Visual Studio Code
- Node.js 8.6.0 veya sonraki bir sürüm (Node.js'yi yüklemek için nvm'yi kullanın, sürümünüzü kontrol etmek için node –version komutunu çalıştırın)
- İlk İşlevim: Node.js kılavuzunu tamamlama
Maliyetler
Bu kod laboratuvarının dağıtılmış bir Cloud Functions işlevinin yalnızca 1 kez çağrılmasını gerektirmesine rağmen, faturalandırmanın işleyiş şeklini anlamak için Cloud Functions API fiyatlandırma bilgilerine göz atmanız gerekir.
Birçok Google API'si ücretsiz olarak kullanılabilir ancak Google Cloud Platform'un (ör. ürünleri ve API'leri) kullanımı ücretsiz değildir. Cloud Functions'ı kullanmak için etkin bir faturalandırma hesabınız olmalıdır. Belirli Google Cloud Platform (GCP) ürünlerinde, faturalandırmanın geçerli olması için aşmanız gereken bir "Daima Ücretsiz" katmanı bulunduğunu unutmayın. Kod laboratuvarının amacı doğrultusunda, her Cloud Functions çağrısı bu ücretsiz katmana dahil edilir. Toplamda sınırlar içinde kaldığınız sürece (her ay içinde) sizden herhangi bir ücret alınmaz.
3. Node.js için Functions Framework'u yükleme
Node.js için İşlev Çerçevesi, Google Cloud Functions ekibi tarafından sunulan ve taşınabilir Node.js işlevleri yazmak için kullanılan açık kaynak bir FaaS (Hizmet Olarak İşlev) çerçevesidir.
Functions Framework, aşağıdakiler dahil olmak üzere birçok farklı ortamda çalışan basit işlevler yazmanıza olanak tanır:
- Google Cloud Functions
- Yerel geliştirme makineniz
- Cloud Run ve GKE'de Cloud Run
- Knative tabanlı ortamlar
Yeni bir node.js uygulaması oluşturun.
npm init
Varsayılanları kabul ederken uygulamanızın giriş noktası olarak index.js
kullandığınızdan emin olun.
Ardından Node.js için Functions Framework'i yükleyin.
npm install @google-cloud/functions-framework
package.json dosyanızı açın. Aşağıdaki örnekte gösterildiği gibi, işlev çerçevesinin bağımlılık olarak listelendiğini doğrulayın.
"dependencies": { "@google-cloud/functions-framework": "^1.7.1" }
İşlev Çerçevesi başarıyla yüklendi. Artık Cloud Functions işlevinizi oluşturmaya hazırsınız.
4. Yerel olarak HTTP Cloud Functions işlevi oluşturma ve test etme
Yerel bir Cloud Functions işlevi oluşturma
Bu bölümde, HTTP isteklerine yanıt veren bir HTTP işlevi oluşturup test edeceksiniz.
package.json dosyanızla aynı dizinde index.js
adlı yeni bir dosya oluşturun.
Aşağıdakileri ekleyin:
exports.validateTemperature = async (req, res) => { try { if (req.body.temp < 100) { res.status(200).send("Temperature OK"); } else { res.status(200).send("Too hot"); } } catch (error) { //return an error console.log("got error: ", error); res.status(500).send(error); } };
Artık işlevi test etmeye hazırsınız.
Visual Studio Code'ta işlevi test etme
Bu noktadan itibaren bu codelab'de Visual Studio Code'daki entegre terminal kullanılmaktadır.
Visual Studio Code'da bir terminal penceresi açın.
Aşağıdaki komutu çalıştırın:
node node_modules/@google-cloud/functions-framework --target=validateTemperature
Bu komut, sunucu bir HTTP isteği aldığında validateTemperature
işlevini çağırmaya hazır olan yerel bir sunucu başlatır.
Terminal pencerenizde aşağıdaki çıkışı görürsünüz:
Serving function... Function: validateTemperature URL: http://localhost:8080/
Terminal penceresi bölmesinde New Terminal
artı simgesini tıklayarak VS Code'da ikinci bir terminal penceresi oluşturun. Bu iki terminal penceresi arasında geçiş yapacaksınız: Birincisi işlevi sunmak için, ikincisi ise curl'i kullanarak işlevi çağırmak için.
Açılır menüyü kullanarak terminal pencereleri arasında geçiş yapabilirsiniz. Bir terminal penceresi şu anda bir işlev sunuyorsa açılır listede bu pencere node
olarak gösterilir. Aksi takdirde zsh
(veya kullandığınız kabuk) olarak adlandırılır.
İkinci terminal penceresinde, validateTemperature
işlevini sunan yerel sunucuya 50 derecelik bir sıcaklık yükü göndermek için aşağıdaki komutu çalıştırın.
curl -X POST http://localhost:8080 -H "Content-Type:application/json" -d '{"temp":"50"}'
Cloud işlevinden aşağıdaki yanıtı alırsınız:
Temperature OK
İkinci terminal penceresinde, aşağıdaki gibi "çok yüksek" bir sıcaklık yükü göndererek işlevi tekrar test edin:
curl -X POST http://localhost:8080 -H "Content-Type:application/json" -d '{"temp":"120"}'
Cloud işlevinden aşağıdaki yanıtı alırsınız:
Too hot
Son olarak, işlevi eksik bir yük vererek çağırarak test edin.
curl -X POST http://localhost:8080
Cloud işlevinden aşağıdaki yanıtı alırsınız:
Too hot
İdeal olarak, sıcaklık sağlanmazsa işlev "çok sıcak" değerini döndürmemelidir. Kodda bir hata keşfettiniz.
İşlevinizi sunan ilk terminal penceresinde Ctrl + C
tuşuna basarak işlevinizin çalışmasını durdurduğunuzdan emin olun.
5. Yerel makinenizden bir HTTP işlevinde hata ayıklama
Visual Studio Code'ta Komut Paletini açın. Mac kullanıyorsanız Cmd + Shift + P
simgesini kullanın. Windows kullanıyorsanız Ctrl + Shift + P.
Komut Paleti'ne auto attach
yazın ve listedeki en üstteki öğeyi seçin.
Bu kod laboratuvarının altındaki resimde gösterildiği gibi Only With Flag
seçeneğini belirleyin:
Ardından, sağ tarafta görünen uyarı simgesinin üzerine gelerek işlevinizi yayınlamak için VS Code'da kullandığınız terminal penceresini yeniden yükleyin.
Relaunch Terminal
simgesini tıklayın.
Yeniden yüklenen terminal penceresinden, işlevinizi yayınlamak için aşağıdaki komutu kullanarak işlev çerçevesini yeniden çalıştırın:
node --inspect node_modules/.bin/functions-framework --target=validateTemperature
--inspect
işareti, Node.js'e hata ayıklama istemcisini dinlemesini söyler. Daha fazla bilgi için lütfen Node'da hata ayıklamayla ilgili dokümanlara bakın.
node_modules/@google-cloud/functions-framework yerine node_modules/.bin/functions-framework kullandığınızdan emin olun. İnceleme modunu kullanmak için /node_modules/.bin konumundaki otomatik olarak simge bağlantısı verilen yürütülebilir dosyayı kullanmanız gerekir.
Bu kez VS Code'da, hata ayıklayıcının bağlı olduğunu belirten turuncu bir durum çubuğu görürsünüz.
Satır numarasının solundaki kenar boşluğunu tıklayarak 3. satırda bir kesme noktası ayarlayın.
Kesme noktası simgesi parlak kırmızı renkte yanar. Bu, hata ayıklayıcının bu kod satırına erişebileceğini gösterir.
İkinci terminal penceresinde, aşağıdaki curl komutunu çalıştırarak kesme noktasına gidin.
curl -X POST http://localhost:8080
3. satırın üzerinde sarı bir vurgu görürsünüz. Bu vurgu, bu satırın hata ayıklayıcı tarafından değerlendirilmekte olan mevcut ifade olduğunu gösterir.
İstek sıcaklık yükü sağlamadığından, içeriğinin undefined
olduğunu doğrulamak için fareyle temp değişkeninin üzerine gelin.
Bir sonraki ifadeyi yürütmek için atlama simgesini tıklayın.
Mevcut ifadenin, if ifadesinin else bölümüne atladığını görürsünüz.
Bu demo için spesifikasyonun, tüm isteklerin sıcaklık ölçümü göndermesini gerektirdiğini varsayabilirsiniz. Sıcaklık ölçümü sağlanmaması ihtimaline karşı işlev bir istisna oluşturmalıdır.
Hata ayıklayıcının bağlantısını kesmek için Bağlantıyı kes düğmesini tıklayın.
İlk terminal pencerenizde, Ctrl + C
tuşuna basarak işlevinizin çalışmasını durdurun.
İşlevinizi, sıcaklık tanımlı değilse aşağıdaki gibi bir istisna atanacak bir if ifadesi eklemek için güncelleyin:
exports.validateTemperature = async (req, res) => { try { // add this if statement below line #2 if (!req.body.temp) { throw "Temperature is undefined"; } ...
İlk terminal pencerenizde, hata ayıklayıcıyı eklememek için aşağıdaki komutu –inspect işareti olmadan çalıştırarak bulut işlevinizi tekrar çalıştırın.
node node_modules/@google-cloud/functions-framework --target=validateTemperature
İkinci terminal pencerenizde aşağıdaki komutu çalıştırarak bir istisna atıldığını doğrulayın:
curl -X POST http://localhost:8080
İsteğiniz sonucunda aşağıdaki çıkışı görürsünüz:
Temperature is undefined
İlk terminal pencerenizde, işleviniz tarafından kaydedilen hatayı da görürsünüz.
Serving function... Function: validateTemperature URL: http://localhost:8080/ got error: Temperature is undefined
Artık ilk terminal pencerenizde Ctrl + C tuşlarına basarak işlevinizin çalışmasını durdurabilirsiniz.
6. Yerel makinenizden Google Cloud'a HTTP işlevi dağıtma
Yerel makinenizde bir Cloud Functions işlevi oluşturdunuz, test ettiniz ve hata ayıkladınız. Artık bu işlevi Google Cloud'a dağıtmaya hazırsınız.
Aşağıdaki komutu çalıştırarak 2. adımda oluşturduğunuz projeyi yerel olarak kullandığınızı doğrulayın:
gcloud config get-value project
2. adımda belirttiğiniz proje etkin yapılandırma değilse aşağıdaki komutu çalıştırın:
gcloud config set project <project-name-created-step-2>
Herhangi bir terminal penceresinde aşağıdaki komutu çalıştırın:
gcloud functions deploy validateTemperature --trigger-http --runtime nodejs12 --allow-unauthenticated
Parametreler aşağıdaki şekilde açıklanır:
deploy validateTemperature
:validateTemperature
adlı bir giriş noktasıylavalidateTemperature
adlı bir Cloud Functions dağıtmak için gcloud alt komutu--trigger-http
: Tetikleyici etkinlik türü--runtime nodejs12
: Bu işlevin hedeflenen çalışma zamanı--allow-unauthenticated
: Herkese açık erişimin işlevi çağırmasına izin verir.
Cloud Functions API'lerini etkinleştirmeniz istenir. API'leri etkinleştirmek için y
yazın.
API [cloudfunctions.googleapis.com] not enabled on project [1057316433766]. Would you like to enable and retry (this will take a few minutes)? (y/N)? y
Dağıtım tamamlandığında çıkışta şunları görürsünüz:
Deploying function (may take a while - up to 2 minutes)...done. availableMemoryMb: 256 buildId: <your-build-id> entryPoint: validateTemperature httpsTrigger: url: https://<your-region-and-project>.cloudfunctions.net/validateTemperature ...
Terminal pencerenizde, bu herkese açık uç noktasını çağırmak için curl'i kullanın.
curl -X POST https://<your-region-and-project>.cloudfunctions.net/validateTemperature -H "Content-Type:application/json" -d '{"temp":"50"}'
ve uygun yanıtı doğrulayarak bulut işlevinizin başarıyla dağıtıldığını onaylayın.
Temperature OK
7. Temizleme
Yanlışlıkla yapılan ödemeleri (ör.bu Cloud Function'ın ücretsiz katmandaki aylık Cloud Function çağrısı kotanızdan daha fazla kez yanlışlıkla çağrılması) önlemek için Cloud Function'ı veya 2. adımda oluşturduğunuz projeyi silebilirsiniz.
Cloud işlevini silmek için https://console.cloud.google.com/functions/ adresindeki Cloud işlevi Cloud Console'a gidin. 2. adımda oluşturduğunuz projenin şu anda seçili olduğundan emin olun.
6. adımda dağıttığınız validateTemperature işlevini seçin. Ardından Sil'e basın.
Projenin tamamını silmeyi seçerseniz https://console.cloud.google.com/cloud-resource-manager adresine gidip 2. adımda oluşturduğunuz projeyi seçin ve Sil'i tıklayın. Projeyi silerseniz Cloud SDK'nızdaki projeleri değiştirmeniz gerekir. gcloud projects list komutunu çalıştırarak mevcut tüm projelerin listesini görüntüleyebilirsiniz.
8. Tebrikler!
Codelab'i tamamladığınız için tebrikler. Cloud Functions'ın Node.js çalışma zamanını nasıl desteklediği ve yerel hata ayıklamanın Cloud Functions ile nasıl çalıştığı hakkında daha fazla bilgi edinebilirsiniz.
Ele aldığımız konular
- Node.js için Functions Framework.
- Yerel olarak bir HTTP Cloud Functions işlevi oluşturun ve test edin.
- Yerel makinenizden bir HTTP işlevinde hata ayıklama
- Yerel makinenizden bir HTTP işlevi dağıtın.