Visual Studio Code kullanarak Node.js için Cloud Functions ile Yerel Geliştirme

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

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.

bceb65f366d837ae.png

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.

601e542b4ec9f6f9.png

Bu codelab için aşağıdaki resimde gösterildiği gibi Only With Flag öğesini seçin:

b9e6b762d150e62b.png

Ş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.

37b61e3fb546fc76.png

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.

2fbb4d5916e1dbfa.png

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.

846e6c5993cc87f9.png

İ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.

206c7ed1eb189e90.png

İ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.

97979025f4bf2842.png

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.

cf0e8ce7e0388f98.png

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.

1070d059775ad769.png

İ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ı ve validateTemperature 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.

4dada486485a935a.png

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.