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şınabilirlik ve yerel testi 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 İşlevler Çerçevesi.
- Yerel olarak HTTP Cloud Functions işlevi oluşturup test edin.
- Yerel makinenizden bir HTTP işlevinde hata ayıklama
- Yerel makinenizden bir HTTP İş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 kullanın, sürümünüzü kontrol edin, düğüm sürümünü çalıştırın)
- İlk İşlevim: Node.js kılavuzunu tamamlama
Maliyet
Bu codelab, dağıtılmış bir Cloud Functions işlevi için yalnızca 1 çağrı yapılmasını gerektirse de 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 ücret ödemeden 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ünlerinin, faturalandırmaya tabi olmak için aşmanız gereken bir "Daima Ücretsiz" katmanına sahip olduğunu unutmayın. Codelab'de uygun şekilde, her Cloud Functions çağrısı, bu ücretsiz katmana dahil edilir. Toplam olarak (her bir ay içinde) bu sınırların içinde kaldığınız sürece herhangi bir ücret ödemezsiniz.
3. Node.js için İşlevler Çerçevesi'ni yükleme
Node.js için İşlevler Çerçevesi, Google Cloud Functions ekibinin sunduğu, taşınabilir Node.js işlevlerini yazmak için kullanılan açık kaynaklı bir FaaS (Hizmet Olarak İşlev) çerçevesidir.
İşlevler Çerçevesi, 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 Cloud Functions işlevi oluşturma
Bu bölümde, HTTP isteklerine yanıt veren bir HTTP işlevi oluşturup test edeceksiniz.
Bundle.json dosyanızla aynı dizinde, index.js
adında 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'da işlevi test etme
Bu noktadan itibaren bu codelab'de, Visual Studio Code içindeki entegre terminal kullanılacaktı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 bir yerel sunucuyu başlatır.
Terminal pencerenizde aşağıdaki çıkışı görürsünüz:
Serving function... Function: validateTemperature URL: http://localhost:8080/
Terminal pencere bölmesindeki New Terminal
artı simgesini tıklayarak VS Code içinde ikinci bir terminal penceresi oluşturun. Şu iki terminal penceresi arasında geçiş yaparsınız: ilki işlevi sunmak için, ikincisi ise işlevi curl kullanarak çağırmak içindir.
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 Functions işlevinden aşağıdaki yanıtı alırsınız:
Too hot
Son olarak, eksik yükle çağırarak işlevi 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şlevin "çok sıcak" döndürmemesi gerekir. 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 codelab için aşağıdaki resimde gösterildiği gibi Only With Flag
öğesini seçin:
Şimdi, VS Code'da kullandığınız terminal penceresini yeniden yükleyerek işlevinizi sunmak için en sağ tarafta görünen uyarı simgesinin üzerine fareyle gelin.
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
Burada --inspect
işareti Node.js'ye hata ayıklama istemcisini dinlemesini söyler. Daha fazla bilgi için lütfen Hata ayıklamayla ilgili düğüm dokümanlarına 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ılı 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ğunun içini tıklayarak 3. satırda bir ayrılma noktası belirleyin.
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 ayrılma 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ğerlendirilen geçerli ifade olduğunu gösterir.
İstek bir sıcaklık yükü sağlamadığından içeriğini undefined
olarak doğrulamak için fareyle geçici değişkenin üzerine gelin.
Sonraki ifadeyi yürütmek için üzerine git simgesini tıklayın.
Mevcut ifadenin, if ifadesinin diğer bölümüne atlandığını görürsünüz.
Bu demo için spesifikasyonun, tüm isteklerin sıcaklık ölçümü göndermesini gerektirdiğini varsayabilirsiniz. Çok düşük bir ihtimal de olsa sıcaklık ölçümü sağlanmazsa işlev bir istisna yapmalı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 atacak 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"; } ...
Hata ayıklayıcıyı eklememek için ilk terminal pencerenizde, aşağıdaki komutu -inspect işareti olmadan çalıştırarak Cloud Functions işlevinizi tekrar çalıştırmaya başlayın.
node node_modules/@google-cloud/functions-framework --target=validateTemperature
İkinci terminal pencerenizde aşağıdaki komutu çalıştırarak bir istisnanın 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 günlüğe 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 bir HTTP İşlevi dağıtın
Yerel makinenizde bir Cloud Functions işlevi oluşturduğunuza, test ettiğinize ve hataları ayıkladığınıza göre 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
burada parametrelerin aşağıdaki şekilde açıklanması gerekir:
deploy validateTemperature
:validateTemperature
adlı bir giriş noktası vevalidateTemperature
adlı bir Cloud Functions işlevi dağıtmak için kullanılan gcloud alt komutu--trigger-http
- tetikleyici etkinlik türü--runtime nodejs12
- bu işlev için hedeflenen çalışma zamanı--allow-unauthenticated
- işlevi çağırmak için herkesin erişimine 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ıktan sonra çıkışta aşağıdakini 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"}'
adresine gidin 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 Functions işlevini silmek için https://console.cloud.google.com/functions/ adresindeki Cloud Functions İşlevi Bulut Konsolu'na gidin. 2. adımda oluşturduğunuz projenin, o anda seçili olan proje olduğundan emin olun.
6. adımda dağıttığınız validateTemperature işlevini seçin. Ardından Sil'i tıklayın.
Projenin tamamını silmeyi tercih ederseniz https://console.cloud.google.com/cloud-resource-manager adresine gidip 2. adımda oluşturduğunuz projeyi, ardından Sil'i seçebilirsiniz. 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.
İşlediklerimiz
- Node.js için İşlevler Çerçevesi.
- Yerel olarak HTTP Cloud Functions işlevi oluşturup test edin.
- Yerel makinenizden bir HTTP işlevinde hata ayıklama
- Yerel makinenizden bir HTTP İşlevi dağıtın.