NodeJS ile Cloud Workstations kullanarak InnerLoop Geliştirme

1. Genel Bakış

Bu laboratuvar, container mimarisine alınmış bir ortamda NodeJS uygulamaları geliştirmekten sorumlu yazılım mühendislerinin geliştirme iş akışını kolaylaştırmak için tasarlanmış özellikleri ve olanakları gösterir. Tipik container geliştirme yöntemleri, kullanıcının container ayrıntılarını ve container derleme sürecini anlamasını gerektirir. Buna ek olarak, geliştiricilerin uzak ortamlarda uygulamalarını test etmek ve hata ayıklamak için genellikle akışlarını kesmeleri, IDE'lerinden çıkmaları gerekir. Geliştiriciler, bu eğitimde bahsedilen araçlar ve teknolojiler sayesinde, IDE'lerinden ayrılmadan container mimarisine alınmış uygulamalarla verimli bir şekilde çalışabilirler.

Öğrenecekleriniz

Bu laboratuvarda, Google Cloud'da container'larla geliştirme yapmayla ilgili şu yöntemleri öğreneceksiniz:

  • Başlangıç Nodejs uygulaması oluşturma
  • Container geliştirme için Nodejs uygulamasını yapılandırma
  • Basit bir CRUD Dinlenme Hizmeti'ni kodlama
  • GKE'ye dağıtma
  • Hata durumunda hata ayıklama
  • Kesme noktası / günlük kayıtlarını kullanma
  • Değişiklikleri GKE'ye doğrudan dağıtım
  • İsteğe bağlı: Arka uç kalıcılığı için CloudSQL entegrasyonu

58a4cdd3ed7a123a.png

2. Kurulum ve Gereksinimler

Kendi hızınızda ortam kurulumu

  1. Google Cloud Console'da oturum açıp yeni bir proje oluşturun veya mevcut bir projeyi yeniden kullanın. Gmail veya Google Workspace hesabınız yoksa hesap oluşturmanız gerekir.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • Proje adı, bu projenin katılımcıları için görünen addır. Google API'leri tarafından kullanılmayan bir karakter dizesidir. İstediğiniz zaman güncelleyebilirsiniz.
  • Proje Kimliği, tüm Google Cloud projelerinde benzersizdir ve değiştirilemez (belirlendikten sonra değiştirilemez). Cloud Console, otomatik olarak benzersiz bir dize oluşturur. bunun ne olduğunu umursamıyorsunuz. Çoğu codelab'de proje kimliğini (genellikle PROJECT_ID olarak tanımlanır) referans almanız gerekir. Oluşturulan kimliği beğenmezseniz rastgele bir kimlik daha oluşturabilirsiniz. Alternatif olarak, kendi ölçümünüzü deneyip mevcut olup olmadığına bakabilirsiniz. Bu adımdan sonra değiştirilemez ve proje süresince kalır.
  • Bilginiz için bazı API'lerin kullandığı üçüncü bir değer, yani Proje Numarası daha vardır. Bu değerlerin üçü hakkında daha fazla bilgiyi belgelerde bulabilirsiniz.
  1. Sonraki adımda, Cloud kaynaklarını/API'lerini kullanmak için Cloud Console'da faturalandırmayı etkinleştirmeniz gerekir. Bu codelab'i çalıştırmanın maliyeti, yüksek değildir. Bu eğitim dışında faturalandırma yapılmaması için kaynakları kapatmak isterseniz oluşturduğunuz kaynakları silebilir veya projenin tamamını silebilirsiniz. Yeni Google Cloud kullanıcıları, 300 ABD doları değerindeki ücretsiz denemeden yararlanabilir.

Cloudshell Düzenleyiciyi Başlat

Bu laboratuvar, Google Cloud Shell Düzenleyici ile birlikte kullanılmak üzere tasarlanmış ve test edilmiştir. Düzenleyiciye erişmek için

  1. https://console.cloud.google.com adresinden Google projenize erişin.
  2. Sağ üst köşedeki Cloud Shell düzenleyici simgesini tıklayın.

8560cc8d45e8c112.png

  1. Pencerenizin alt kısmında yeni bir bölme açılır
  2. Düzenleyiciyi Aç düğmesini tıklayın.

9e504cb98a6a8005.png

  1. Düzenleyici, sağ tarafta bir gezgin, orta alanda ise düzenleyici açılır.
  2. Ekranın alt kısmında da bir terminal bölmesi bulunmalıdır
  3. Terminal AÇIK DEĞİLSE yeni bir terminal penceresi açmak için "ctrl+"" tuş kombinasyonunu kullanın.

gcloud'u kurun

Cloud Shell'de proje kimliğinizi ve uygulamanızı dağıtmak istediğiniz bölgeyi ayarlayın. Bunları PROJECT_ID ve REGION değişkenleri olarak kaydedin.

export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')

Bu laboratuvarda kullanılan altyapıyı sağlayın

Bu laboratuvarda GKE'ye kod dağıtacak ve CloudSQL veritabanında depolanan verilere erişeceksiniz. Aşağıdaki kurulum komut dosyası, bu altyapıyı sizin için hazırlar.

  1. Kurulum komut dosyasını indirin ve yürütülebilir hale getirin.
wget https://raw.githubusercontent.com/GoogleCloudPlatform/container-developer-workshop/main/labs/nodejs/setup_with_cw.sh
chmod +x setup_with_cw.sh
  1. setup_with_cw.sh dosyasını açın ve şu anda CHANGEME olarak ayarlanmış şifrelerin değerlerini düzenleyin
  2. Bu laboratuvarda kullanacağınız GKE kümesini ve CloudSQL veritabanını desteklemek için kurulum komut dosyasını çalıştırın
./setup_with_cw.sh &

Cloud Workstations Kümesi

  1. Cloud Console'da Cloud Workstations'ı açın. Kümenin READY durumunda olmasını bekleyin.

305e1a3d63ac7ff6.png

İş İstasyonları Yapılandırması Oluşturma

  1. Cloud Shell oturumunuzun bağlantısı kesildiyse "Yeniden bağlan"ı tıklayın Ardından proje kimliğini ayarlamak için gcloud cli komutunu çalıştırın. Komutu çalıştırmadan önce aşağıdaki örnek proje kimliğini qwiklabs proje kimliğinizle değiştirin.
gcloud config set project qwiklabs-gcp-project-id
  1. Cloud Workstations yapılandırması oluşturmak için aşağıdaki komut dosyasını indirip terminalde çalıştırın.
wget https://raw.githubusercontent.com/GoogleCloudPlatform/container-developer-workshop/main/labs/nodejs/workstation_config_setup.sh
chmod +x workstation_config_setup.sh
./workstation_config_setup.sh
  1. Yapılandırmalar bölümündeki sonuçları doğrulayın. READY durumuna geçiş 2 dakika sürer.

c8f0b8662fdb827e.png

  1. Console'da Cloud Workstations'ı açın ve yeni örnek oluşturun.

a53adeeac81a78c8.png

  1. Adı my-workstation olarak değiştirin ve mevcut yapılandırmayı seçin: codeoss-js.

675d83f30c1319df.png

  1. İş İstasyonları bölümündeki sonuçları doğrulayın.

bf67586e6695852.png

İş İstasyonunu Başlat

  1. İş istasyonunu başlatın ve başlatın. İş istasyonunun başlatılması birkaç dakika sürer.

a9ad54f4b4b668e9.png

  1. Adres çubuğundaki simgeyi tıklayarak 3. taraf çerezlerine izin verin. 1b8923e2943f9bc4.png

fcf9405b6957b7d7.png

  1. "Site çalışmıyor mu?" seçeneğini tıklayın.

36a84c0e2e3b85b.png

  1. "Çerezlere izin ver"i tıklayın.

2259694328628fba.png

  1. İş istasyonu açıldığında Code OSS IDE görünür. "Tamamlandı Olarak İşaretle"yi tıklayın Başlarken sayfasında iş istasyonu IDE'sini

94874fba9b74cc22.png

3. Yeni bir Nodejs başlangıç uygulaması oluşturma

Bu bölümde yeni bir Nodejs uygulaması oluşturacaksınız.

  1. Yeni bir Terminal açın.

c31d48f2e4938c38.png

  1. Cloud Shell'de mynodejsapp adında yeni bir dizin oluşturun
mkdir mynodejsapp

Bu mesajı görürseniz İzin Ver düğmesini tıklayın. Böylece, kopyalayıp iş istasyonuna yapıştırabilirsiniz.

58149777e5cc350a.png

  1. Bu dizine geçin ve çalışma alanı olarak açın. Bu işlem, yeni oluşturulan klasörde bir çalışma alanı yapılandırması oluşturarak düzenleyiciyi yeniden yükler.
cd mynodejsapp && code-oss-cloud-workstations -r --folder-uri="$PWD"
  1. Tekrar yeni bir terminal açın. NVM kullanarak Düğüm ve NPM'yi yükleyin.
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.2/install.sh | bash
        
        # This loads nvm bash_completion
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  

nvm install stable

nvm alias default stable

4. Yeni bir başlangıç uygulaması oluşturun

  1. Uygulamayı başlatma

Aşağıdaki komutu çalıştırarak package.json dosyası oluşturma

npm init
    Choose the `entry point: (index.js) src/index.js` and leave default values for the rest of the parameters. This will create the `package.json` file with following contents
{
  "name": "mynodejsapp",
  "version": "1.0.0",
  "description": "",
  "main": "src/index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC"
}
  1. Giriş Noktası Ekleme

package.json dosyasını IDE'de açıp, başlat komutunu "start": "node src/index.js", komut dosyasına dahil edecek şekilde düzenleyin. Değişiklikten sonra, komut dosyaları aşağıdaki kod snippet'i gibi görünmelidir:

"scripts": {
    "start": "node src/index.js",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  1. Ekspres Bağımlılığı Ekleyin

Ekleyeceğimiz kod express adresini de kullandığından bu bağımlılığı bu package.json dosyasına ekleyelim. Bu nedenle, tüm değişikliklerden sonra package.json dosyası aşağıda gösterildiği gibi olmalıdır.

{
 "name": "mynodejsapp",
 "version": "1.0.0",
 "description": "",
 "main": "src/index.js",
 "scripts": {
   "start": "node src/index.js",
   "test": "echo \"Error: no test specified\" && exit 1"
 },
 "author": "",
 "license": "ISC",
 "dependencies": {
   "express": "^4.17.3"
 }
}
  1. index.js dosyasını oluşturma

Gezgin görünümünde Yeni Klasör’ü seçerek src adında bir kaynak dizin oluşturun.

eb507d48f283ce46.png

src/index.js dosyası oluşturun

3e3e6e6062e501fc.png

aşağıdaki kodla

const express = require('express');
const app = express();
const PORT = 8080;

app.get('/', (req, res) => {
    var message="Greetings from Node";
    res.send({ message: message });
  });

app.listen(PORT, () => {
  console.log(`Server running at: http://localhost:${PORT}/`);

});

PORT değerinin 8080 değerine ayarlandığına dikkat edin

Manifest Oluşturma

Skaffold, container geliştirmeyi basitleştirmek için entegre araçlar sunar. Bu adımda Skaffold'u ilk kullanıma hazırlayarak temel kubernetes YAML dosyalarını otomatik olarak oluşturursunuz. İşlemi başlatmak için aşağıdaki komutu yürütün.

Terminalde aşağıdaki komutu yürütün

skaffold init --generate-manifests

İstendiğinde:

  • Bağlantı noktası için 8080 girin
  • Yapılandırmayı kaydetmek için y yazın

Çalışma alanı görünümüne şu iki dosya eklendi: skaffold.yaml ve deployment.yaml

Uygulama adını güncelleyin

Yapılandırmada yer alan varsayılan değerler şu anda uygulamanızın adıyla eşleşmemektedir. Dosyaları, varsayılan değerler yerine uygulama adınızı referans alacak şekilde güncelleyin.

  1. Skaffold yapılandırmasındaki girişleri değiştir
  • skaffold.yaml uygulamasını aç
  • Şu anda package-json-image olarak ayarlanmış olan resim adını seçin
  • Sağ tıklayın ve Tüm Tekrarları Değiştir'i seçin
  • Yeni adı mynodejsapp olarak yazın
  1. Kubernetes yapılandırmasındaki girişleri değiştir
  • deployment.yaml dosyasını aç
  • Şu anda package-json-image olarak ayarlanmış olan resim adını seçin
  • Sağ tıklayın ve Tüm Tekrarları Değiştir'i seçin
  • Yeni adı mynodejsapp olarak yazın

skaffold.yaml dosyasındaki build bölümünün, uygulamayı container mimarisine almak için buildpacks kullandığına dikkat edin. Bu kodda Dockerfile yoktur ve geliştiricinin bu uygulamayı container mimarisine almak için Docker hakkında bilgi sahibi olması gerekmez.

Ayrıca, çalışır durumda senkronizasyon, bu katman yapılandırması tarafından düzenleyici ile çalışan kapsayıcı arasında otomatik olarak etkinleştirilir. Çalışır durumda senkronizasyonu etkinleştirmek için ek yapılandırma gerekmez.

5. Geliştirme sürecinde rehberlik etme

Bu bölümde, temel işlemleri öğrenmek ve başlangıç uygulamanızın yapılandırmasını ve kurulumunu doğrulamak için Cloud Code eklentisini kullanma konusunda birkaç adım öğreneceksiniz.

Cloud Code, skaffold ile entegre olarak geliştirme sürecinizi kolaylaştırır. Aşağıdaki adımlarda GKE'ye dağıtım yaptığınızda Cloud Code ve Skaffold, container görüntünüzü otomatik olarak derler, Container Registry'ye aktarır ve ardından uygulamanızı GKE'ye dağıtır. Bu, perde arkasında olup ayrıntıları geliştirici akışından uzaklaştırarak gerçekleşir. Cloud Code, container tabanlı geliştirme için geleneksel hata ayıklama ve hotspot özellikleri sağlayarak geliştirme sürecinizi de iyileştirir.

Google Cloud'da oturum açma

  1. Cloud Code simgesini tıklayın ve "Sign in to Google Cloud" (Google Cloud'da oturum aç) seçeneğini belirleyin:

1769afd39be372ff.png

  1. "Oturum açmak için devam et"i tıklayın.

923bb1c8f63160f9.png

  1. Terminal'de çıkışı kontrol edin ve bağlantıyı açın:

517fdd579c34aa21.png

  1. Qwiklabs öğrenci kimlik bilgilerinizle giriş yapın.

db99b345f7a8e72c.png

  1. "İzin Ver"i seçin:

a5376553c430ac84.png

  1. Doğrulama kodunu kopyalayın ve Workstation sekmesine dönün.

6719421277b92eac.png

  1. Doğrulama kodunu yapıştırın ve Enter tuşuna basın.

e9847cfe3fa8a2ce.png

Kubernetes Kümesi Ekle

  1. Küme Ekle

62a3b97bdbb427e5.png

  1. Google Kubernetes Engine'i seçin:

9577de423568bbaa.png

  1. Proje seçin.

c5202fcbeebcd41c.png

  1. "mycluster"ı seçin ilk kurulumda oluşturulan bir feed'dir.

33863e94d1c5045f.png

  1. Bu küme, Cloud Code altındaki Kubernetes kümeleri listesinde gösterilir. Buradan kümeye göz atabilir ve kümeyi keşfedebilirsiniz.

7e5f50662d4eea3c.png

gcloud cli'yi kullanarak geçerli proje kimliğini ayarlayın

  1. Qwiklabs sayfasından bu laboratuvarın proje kimliğini kopyalayın.

fcff2d10007ec5bc.png

  1. Proje kimliğini ayarlamak için terminalden gcloud cli komutunu çalıştırın. Komutu çalıştırmadan önce örnek proje kimliğini değiştirin. Aşağıdaki komutu çalıştırmadan önce proje kimliğini değiştirin.
gcloud config set project qwiklabs-gcp-project-id

Kubernetes'e dağıtma

  1. Cloud Shell Düzenleyici'nin alt kısmındaki bölmeden Cloud Code'u seçin.

c5dd5a749136407b.png

  1. Üst kısımda GELİŞTİRME OTURUMLARI bölümünde gösterilen panelde Kubernetes'te çalıştır'ı seçin. İstenirse geçerli Kubernetes bağlamını kullanmak için Evet'i seçin.

7da53b9480e8eb0d.png

  1. Komutu ilk kez çalıştırdığınızda ekranın üst kısmında geçerli Kubernetes bağlamını kullanmak isteyip istemediğinizi soran bir istem görünür, "Evet"i seçin geçerli bağlamı kabul edip kullanmak.

a6e58a7f0d117391.png

  1. Ardından, hangi container kayıt defterinin kullanılacağını soran bir istem gösterilir. Sağlanan varsayılan değeri kabul etmek için Enter tuşuna basın

13236a26c8dbe84f.png

  1. İlerleme durumunu ve bildirimleri görüntülemek için alt bölmede Çıkış sekmesini ve açılır listeden Kubernetes: Run/Hata Ayıklama'yı seçin

606ff9cdebc03dff.png

  1. "Kubernetes: Çalıştır/Hata Ayıklama - Ayrıntılı" seçeneğini belirleyin "sağdaki kanal açılır menüsünü tıklayıp ek ayrıntıları ve kapsayıcılardan canlı yayınlanan günlükleri görüntüleyin"

ab45d2574f4f2478.png

  1. "Kubernetes: Çalıştır/Hata Ayıklama"yı seçerek basitleştirilmiş görünüme dönün açılır menüden
  2. Derleme ve testler tamamlandığında Çıkış sekmesinde Resource deployment/mynodejsapp status completed successfully görüntülenir ve bir URL listelenir: "Hizmet demo uygulamasından yönlendirilen URL: http://localhost:8080"
  3. Cloud Code terminalinde çıkıştaki URL'nin (http://localhost:8080) üzerine gelin. Ardından, görüntülenen araç ipucunda Bağlantıyı Takip Et'i seçin.

Yanıt şöyle olacaktır:

{"message":"Greetings from Node"}

Sıcak Yeniden Yükle

  1. src/index.js adresine gidiş rotasını izle. 'Hello from Node' için karşılama mesajının kodunu düzenleyin

İzleyicinin, Output penceresinde, Kubernetes: Run/Debug görünümünde, güncellenen dosyaları Kubernetes'teki kapsayıcıyla senkronize ettiğine hemen dikkat edin.

Update initiated
File sync started for 1 files for gcr.io/myproject/mynodejsapp:latest@sha256:f554756b3b4d6c301c4b26ef96102227cfa2833270db56241248ae42baa1971a
File sync succeeded for 1 files for gcr.io/myproject/mynodejsapp:latest@sha256:f554756b3b4d6c301c4b26ef96102227cfa2833270db56241248ae42baa1971a
Update succeeded
  1. Kubernetes: Run/Debug - Detailed görünümüne geçerseniz dosya değişikliklerini algıladığını ve düğümü yeniden başlattığını fark edersiniz
files modified: [src/index.js]
Copying files:map[src/index.js:[/workspace/src/index.js]]togcr.io/myproject/mynodejsapp:latest@sha256:f554756b3b4d6c301c4b26ef96102227cfa2833270db56241248ae42baa1971a
Syncing 1 files for gcr.io/myproject/mynodejsapp:latest@sha256:f554756b3b4d6c301c4b26ef96102227cfa2833270db56241248ae42baa1971a
Watching for changes...
[mynodejsapp]
[mynodejsapp]> mynodejsapp@1.0.0 start /workspace
[mynodejsapp]> node src/index.js
[mynodejsapp]
[mynodejsapp]Server running at: http://localhost:8080/
  1. Güncellenen sonuçları görmek için tarayıcınızı yenileyin.

Hata ayıklama

  1. Hata Ayıklama görünümüne gidin ve mevcut iş parçacığını (647213126d7a4c7b.png) durdurun.
  2. Uygulamayı debug modunda çalıştırmak için alt menüde Cloud Code simgesini tıklayın ve Debug on Kubernetes seçeneğini belirleyin.

dbd0c6cfd9e9d0e9.png

  • Output penceresinin Kubernetes Run/Debug - Detailed görünümünde, skaffold'un bu uygulamayı hata ayıklama modunda dağıttığına dikkat edin.
  • Uygulamanın derlenmesi ve dağıtılması birkaç dakika sürer. Bu sefer eklenmiş bir hata ayıklayıcı görürsünüz.
Port forwarding pod/mynodejsapp-6bbcf847cd-vqr6v in namespace default, remote port 9229 -> http://127.0.0.1:9229
[mynodejsapp]Debugger attached.
  1. Alttaki durum çubuğunun rengi maviden turuncuya dönüşür ve bu da Hata Ayıklama modunda olduğunu gösterir.

d1224f12cd659995.png

  1. Kubernetes Run/Debug görünümünde, Hata Ayıklanabilir bir container'ın başlatıldığına dikkat edin
**************URLs*****************
Forwarded URL from service mynodejsapp-service: http://localhost:8080
Debuggable container started pod/mynodejsapp-deployment-6bc7598798-xl9kj:mynodejsapp (default)
Update succeeded
***********************************

Kesme noktalarından yararlanma

  1. src/index.js uygulamasını açın
  2. var message="Hello from Node"; yazan ifadeyi bulun
  3. Satır numarasının solundaki boş alanı tıklayarak bu satıra bir ayrılma noktası ekleyin. Kesme noktasının ayarlandığını belirten kırmızı bir gösterge görünür.
  4. Tarayıcınızı yeniden yükleyin. Hata ayıklayıcının işlemi kesme noktasında durdurduğunu ve GKE'de uzaktan çalışan uygulamanın değişkenlerini ve durumunu incelemenize olanak tanıdığını unutmayın
  5. "message" değişkenini bulana kadar değişkenler bölümünü tıklayın.
  6. 7cfdee4fd6ef5c3a.png Üzerine git'e basarak satırı yürütün
  7. "message" değişkeninin mevcut değerinin "Hello from Node" olarak değiştiğini gözlemleyin
  8. "target" değişken adını çift tıklayın pop-up'ta değeri "Hi from Node" gibi farklı bir değerle değiştirin.
  9. Hata ayıklama kontrol panelinde Devam düğmesini tıklayın
  10. Az önce girdiğiniz güncellenmiş değeri gösteren yanıtı tarayıcınızda inceleyin.
  11. "Hata ayıklama"yı durdurma kesme noktasını 647213126d7a4c7b.png tıklayın.

6. Basit bir CRUD Dinlenme Hizmeti geliştirme

Bu noktada uygulamanız, container mimarisine alınmış geliştirme için tamamen yapılandırıldı ve Cloud Code ile temel geliştirme iş akışını öğrendiniz. Aşağıdaki bölümlerde, Google Cloud'da yönetilen bir veritabanına bağlanan REST hizmet uç noktaları ekleyerek öğrendiklerinizi uygulayacaksınız.

Bağımlılıkları Yapılandırma

Uygulama kodu, geri kalan hizmet verilerini saklamak için bir veritabanı kullanır. package.json dosyasına aşağıdakini ekleyerek bağımlılıkların mevcut olduğundan emin olun:

  1. Postgres CRUD uygulaması oluşturmak için package.json dosyasına iki bağımlılık daha pg ve sequelize ekleyin. Değişiklikleri yüklediğinizde bağımlılıklar bölümü aşağıdaki gibi görünür.
    "dependencies": {
    "express": "^4.17.3",
    "pg": "^8.8.0",
    "sequelize": "^6.25.7"
  }

REST hizmetini kodlama

  1. CRUD uygulama kodunu bu uygulamaya ekleyin
wget -O app.zip https://github.com/GoogleCloudPlatform/container-developer-workshop/raw/main/labs/nodejs/app.zip

unzip app.zip

Bu kodda

  • item varlık modeline sahip models klasörü
  • CRUD işlemlerini gerçekleştiren kodu içeren controllers klasörü
  • Belirli URL kalıplarını farklı çağrılara yönlendiren routes klasörü
  • Veritabanı bağlantı ayrıntılarını içeren config klasörü
  1. db.config.js dosyasındaki veritabanı yapılandırmasının, veritabanına bağlanmak için sağlanması gereken ortam değişkenlerini ifade ettiğini unutmayın. Ayrıca gelen isteği URL kodlaması için ayrıştırmanız gerekir.
  2. Ana JavaScript dosyanızdaki CRUD koduna, app.listen(PORT, () => { ile başlayan son bölümden hemen önce bağlanabilmek için aşağıdaki kod snippet'ini src/index.js bölümüne ekleyin.
const bodyParser = require('body-parser')
app.use(bodyParser.json())
app.use(
 bodyParser.urlencoded({
   extended: true,
 })
)
const db = require("../app/models");
db.sequelize.sync();
require("../app/routes/item.routes")(app);
  1. Veritabanı bağlantı bilgilerini sağlamak için ortam değişkenlerini eklemek üzere deployment.yaml dosyasındaki dağıtımı düzenleyin.

Dosyanın sonundaki spesifikasyon girişini aşağıdaki tanımla eşleşecek şekilde güncelleyin

    spec:
      containers:
      - name: mynodejsapp
        image: mynodejsapp
        env:
        - name: DB_HOST
          value: ${DB_INSTANCE_IP}        
        - name: DB_PORT
          value: "5432"  
        - name: DB_USER
          valueFrom:
            secretKeyRef:
              name: gke-cloud-sql-secrets
              key: username
        - name: DB_PASS
          valueFrom:
            secretKeyRef:
              name: gke-cloud-sql-secrets
              key: password
        - name: DB_NAME
          valueFrom:
            secretKeyRef:
              name: gke-cloud-sql-secrets
              key: database
  1. DB_HOST değerini Veritabanınızın adresiyle değiştirin
export DB_INSTANCE_IP=$(gcloud sql instances describe mytest-instance \
    --format=json | jq \
    --raw-output ".ipAddresses[].ipAddress")

envsubst < deployment.yaml > deployment.new && mv deployment.new deployment.yaml

Uygulamayı Dağıtma ve Doğrulama

  1. Cloud Shell Düzenleyici'nin alt kısmındaki bölmede Cloud Code simgesini ve ardından ekranın üst kısmındaki Debug on Kubernetes öğesini seçin.
  2. Derleme ve testler tamamlandığında Çıkış sekmesinde Resource deployment/mynodejsapp status completed successfully görüntülenir ve bir URL listelenir: "mynodejsapp hizmetinden yönlendirilen URL: http://localhost:8080"
  3. Birkaç öğe ekleyin.

Cloudshell Terminal'den aşağıdaki komutları çalıştırın

URL=localhost:8080
curl -X POST $URL/items -d '{"itemName":"Body Spray", "itemPrice":3.2}' -H "Content-Type: application/json"
curl -X POST $URL/items -d '{"itemName":"Nail Cutter", "itemPrice":2.5}' -H "Content-Type: application/json"
  1. Tarayıcıda $URL/items çalıştırarak GET URL'sini test edin. Curl işlemini komut satırından da çalıştırabilirsiniz
curl -X GET $URL/items
  1. Test Silme: Şimdi aşağıdaki komutu çalıştırarak bir öğeyi silmeyi deneyin. Gerekirse item-id değerini değiştirin.
curl -X DELETE $URL/items/1
    This throws an error message
{"message":"Could not delete Item with id=[object Object]"}

Sorunu belirleme ve düzeltme

  1. Uygulama Hata Ayıklama modunda çalışıyor. Bu nedenle, sorunu bulmak için ayrılma noktalarını kullanın. Aşağıda bazı ipuçları verilmiştir:
  • DELETE ile ilgili bir sorun olduğunun farkındayız çünkü bu komut istenen sonucu döndürmüyor. Dolayısıyla, ayrılma noktasını itemcontroller.js->exports.delete yönteminde ayarlarsınız.
  • Yürütmeyi adım adım çalıştırın ve sol penceredeki yerel değişkenlerin değerlerini gözlemlemek için her adımdaki değişkenleri izleyin.
  • request.params gibi belirli değerleri gözlemlemek için bu değişkeni İzleme penceresine ekleyin.
  1. id öğesine atanan değerin undefined olduğuna dikkat edin. Sorunu düzeltmek için kodu değiştirin.

Düzeltilmiş kod snippet'i şöyle görünür.

// Delete a Item with the specified id in the request
exports.delete = (req, res) => {
    const id = req.params.id;
  1. Uygulama yeniden başlatıldıktan sonra, silmeyi deneyerek tekrar test edin.
  2. Hata ayıklama araç çubuğundaki kırmızı kare simgesini tıklayarak hata ayıklama oturumunu durdurun 647213126d7a4c7b.png

7. Temizleme

Tebrikler! Bu laboratuvarda, sıfırdan yeni bir Nodejs uygulaması oluşturdunuz ve bu uygulamayı container'larla etkin dağıtım modunda çalışacak şekilde yapılandırdınız. Ardından geleneksel uygulama yığınlarında bulunan geliştirici akışını izleyerek uygulamanızı uzak bir GKE kümesine dağıttınız ve hatalarını ayıkladınız.

Laboratuvarı tamamladıktan sonra yer açmak için:

  1. Laboratuvarda kullanılan dosyaları silme
cd ~ && rm -rf mynodejsapp && rm -f setup.sh
  1. İlgili tüm altyapı ve kaynakları kaldırmak için projeyi silin