Visual Studio Code'u 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 konusunda endişelenmeden kodunuzu 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 test için Cloud Functions işlevinizi herhangi bir standart Node.js çalışma zamanı ortamında çalıştırabilirsiniz.

Adım adım açıklamalı kılavuz

Bu codelab'de, belirtilen bir sıcaklığın kabul edilebilir olup olmadığını veya çok sıcak olup olmadığını bildiren bir Node.js Cloud Function oluşturacaksınız. Cloud Functions işlevinizi yerel makinenizde Visual Studio Code kullanarak oluşturacak, test edecek ve hatalarını ayıklayacaksınız. Son olarak, işlevinizi Google Cloud Platform'a dağıtacaksı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

Maliyet

Bu codelab'de dağıtılan bir Cloud Functions işlevinin yalnızca 1 kez çağrılması gerekse de faturalandırmanın nasıl çalıştığını anlamak için Cloud Functions API fiyatlandırma bilgilerine başvurmanız gerekir.

Birçok Google API'si ücretsiz olarak kullanılabilirken Google Cloud Platform'un (ürünleri ve API'leri) kullanımı ücretsiz değildir. Cloud Functions'ı kullanmak için etkin bir faturalandırma hesabınızın olması gerekir. Belirli Google Cloud Platform (GCP) ürünlerinde, faturalandırma için aşmanız gereken bir "Daima Ücretsiz" katmanı bulunduğunu unutmayın. Bu codelab'de, her Cloud Functions çağrısı ücretsiz katman kapsamında sayılır. Toplamda (her ay içinde) sınırları aşmadığınız sürece herhangi bir ücret alınmaz.

3. Node.js için Functions Framework'ü yükleyin

Node.js için Functions Framework, Google Cloud Functions ekibi tarafından sunulan, taşınabilir Node.js işlevleri yazmaya yönelik açık kaynaklı bir FaaS (hizmet olarak işlev) çerçevesidir.

Functions Framework, aşağıdakiler de 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.

Şimdi Node.js için Functions Framework'ü yükleyin.

npm install @google-cloud/functions-framework

package.json dosyanızı açın. Aşağıdaki örnekte gösterildiği gibi, işlevler çerçevesinin bağımlılık olarak listelendiğini doğrulayın.

"dependencies": {
   "@google-cloud/functions-framework": "^1.7.1"
 }

Functions Framework başarıyla yüklendi. Artık Cloud Functions işlevinizi oluşturmaya hazırsınız.

4. HTTP Cloud Functions işlevini yerel olarak 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'da test işlevi

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, ikincisi ise işlevi curl kullanarak çağırmak için.

bceb65f366d837ae.png

Açılır menüyü kullanarak terminal pencereleri arasında geçiş yapabilirsiniz. Bir terminal penceresi şu anda bir işleve hizmet veriyorsa açılır liste bunu node olarak adlandırır. Aksi takdirde zsh (veya kullandığınız kabuk) olarak adlandırılır.

İkinci terminal penceresinde, validateTemperature işlevine hizmet veren 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"}'

Bulut işlevinden aşağıdaki yanıtı alırsınız:

Temperature OK

İkinci terminal penceresinde, aşağıdaki örnekte gösterildiği 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"}'

Bulut işlevinden aşağıdaki yanıtı alırsınız:

Too hot

Son olarak, işlevi eksik bir yükle çağırarak test edin.

curl -X POST http://localhost:8080

Bulut işlevinden aşağıdaki yanıtı alırsınız:

Too hot

İdeal olarak, sıcaklık sağlanmamışsa işlev "çok sıcak" değerini döndürmemelidir. Kodda bir hata keşfettiyseniz.

İşlevinize hizmet veren 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'da komut paletini açın. Mac kullanıyorsanız Cmd + Shift + P tuşunu kullanın. Windows kullanıyorsanız Ctrl + Shift + P. tuşunu kullanın.

Komut paletine 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 seçeneğini belirleyin:

b9e6b762d150e62b.png

Şimdi, en sağ tarafta görünen uyarı simgesinin üzerine gelerek VS Code'da işlevinizi sunmak için kullandığınız terminal penceresini yeniden yükleyin.

Relaunch Terminal simgesini tıklayın.

37b61e3fb546fc76.png

Yeniden yüklenen terminal penceresinde, aşağıdaki komutu kullanarak işlevinizi sunmak için Functions çerçevesini yeniden çalıştırın:

node --inspect node_modules/.bin/functions-framework --target=validateTemperature

Burada --inspect işareti, Node.js'e bir hata ayıklama istemcisini dinlemesini söyler. Daha fazla bilgi için lütfen Node'da hata ayıklama ile ilgili dokümanlara bakın.

node_modules/@google-cloud/functions-framework yerine node_modules/.bin/functions-framework kullandığınızı unutmayın. İnceleme modunu kullanmak için /node_modules/.bin dizininde otomatik olarak sembolik bağlantılı yürütülebilir dosyayı kullanmanız gerekir.

Bu kez VS Code'da hata ayıklayıcının eklendiğini belirten turuncu bir durum çubuğu görmeniz gerekir.

Satır numarasının solundaki kenar boşluğunun içine tıklayarak 3. satırda bir kesme noktası ayarlayın.

2fbb4d5916e1dbfa.png

Kesme noktası simgesi parlak kırmızı renkte yanmalıdır. Bu, kod satırına hata ayıklayıcı tarafından erişilebildiğini gösterir.

846e6c5993cc87f9.png

İkinci terminal penceresinde aşağıdaki curl komutunu çalıştırarak kesme noktasına ulaşın.

curl -X POST http://localhost:8080 

3. satırın üzerinde sarı bir vurgu görünür. Bu vurgu, bu satırın hata ayıklayıcı tarafından değerlendirilen mevcut ifade olduğunu gösterir.

206c7ed1eb189e90.png

İstek sıcaklık yükü sağlamadığından, içeriğinin undefined olduğunu doğrulamak için geçici değişkenin üzerine gelin.

97979025f4bf2842.png

Bir sonraki ifadeyi yürütmek için adım atlama simgesini tıklayın.

Mevcut ifadenin, if ifadesinin else kısmına atladığını görürsünüz.

cf0e8ce7e0388f98.png

Bu demo için spesifikasyonun, tüm isteklerin sıcaklık okuması göndermesini gerektirdiğini varsayabilirsiniz. Sıcaklık ölçümünün sağlanmadığı nadir durumlarda 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.

1070d059775ad769.png

İlk terminal pencerenizde Ctrl + C tuşuna basarak işlevinizin çalışmasını durdurun.

Aşağıda gösterildiği gibi, sıcaklık tanımlanmamışsa hata vermek için işlevinizi güncelleyerek bir if ifadesi ekleyin:

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 bulut 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 istisna oluşturulduğunu doğrulayın:

curl -X POST http://localhost:8080 

İsteğinizden aşağıdaki çıkış döndürülür:

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şlevinizi çalıştırmayı durdurabilirsiniz.

6. Yerel makinenizden Google Cloud'a HTTP işlevi dağıtma

Yerel makinenizde bir Cloud Functions işlevi oluşturup test ettikten ve hatalarını ayıkladıktan sonra 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 Cloud Function'ı validateTemperature adlı bir giriş noktasıyla dağıtmak için kullanılan gcloud alt komutu
  • --trigger-http: Tetikleyici etkinlik türü
  • --runtime nodejs12: Bu işlevin hedeflenen çalışma zamanı
  • --allow-unauthenticated: İşlevin herkese açık erişimle çağrılması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 aşağıdakileri 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ç noktayı çağırmak için curl'ü 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 Cloud Functions işlevinizin başarıyla dağıtıldığını onaylayın.

Temperature OK

7. Temizleme

Yanlışlıkla ücretlendirilmemek için (ör.bu Cloud Functions işlevi, ücretsiz katmandaki aylık Cloud Functions işlevi çağırma tahsisinizden daha fazla sayıda yanlışlıkla çağrılırsa) Cloud Functions işlevini veya 2. adımda oluşturduğunuz projeyi silebilirsiniz.

Cloud Functions işlevini silmek için https://console.cloud.google.com/functions/ adresinden Cloud Functions Cloud Console'a gidin. 2. adımda oluşturduğunuz projenin şu anda seçili proje olduğundan emin olun.

6. adımda dağıttığınız validateTemperature işlevini seçin. Ardından Sil'e basın.

4dada486485a935a.png

Projenin tamamını silmeyi tercih ederseniz https://console.cloud.google.com/cloud-resource-manager adresine gidebilir, 2. adımda oluşturduğunuz projeyi seçip Sil'i tıklayabilirsiniz. Projeyi silerseniz Cloud SDK'nızda 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 tebrik ederiz. Cloud Functions'ın Node.js çalışma zamanını nasıl desteklediği ve Cloud Functions ile yerel hata ayıklamanın nasıl çalıştığı hakkında daha fazla bilgi edinebilirsiniz.

İşlediğimiz 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.