1. ภาพรวม
ห้องทดลองนี้แสดงให้เห็นถึงฟีเจอร์และความสามารถที่ออกแบบมาเพื่อปรับปรุงเวิร์กโฟลว์การพัฒนาสำหรับวิศวกรซอฟต์แวร์ที่ได้รับมอบหมายให้พัฒนาแอปพลิเคชัน NodeJS ในสภาพแวดล้อมที่มีคอนเทนเนอร์ การพัฒนาคอนเทนเนอร์ทั่วไปกำหนดให้ผู้ใช้ทำความเข้าใจรายละเอียดของคอนเทนเนอร์และกระบวนการสร้างคอนเทนเนอร์ นอกจากนี้ นักพัฒนาซอฟต์แวร์มักต้องแยกขั้นตอนของตนเองโดยย้ายออกจาก IDE เพื่อทดสอบและแก้ไขข้อบกพร่องแอปพลิเคชันในสภาพแวดล้อมระยะไกล ด้วยเครื่องมือและเทคโนโลยีที่กล่าวถึงในบทแนะนำนี้ นักพัฒนาซอฟต์แวร์สามารถทำงานได้อย่างมีประสิทธิภาพกับแอปพลิเคชันที่สร้างโดยใช้คอนเทนเนอร์โดยไม่ต้องออกจาก IDE
สิ่งที่คุณจะได้เรียนรู้
ในห้องทดลองนี้ คุณจะได้เรียนรู้วิธีการพัฒนาด้วยคอนเทนเนอร์ใน GCP ดังต่อไปนี้
- การสร้างแอปพลิเคชัน Nodejs เริ่มต้น
- การกำหนดค่าแอปพลิเคชัน Nodejs สำหรับการพัฒนาคอนเทนเนอร์
- การเขียนโค้ดบริการ CRUD REST แบบง่ายๆ
- การทำให้ใช้งานได้กับ GKE
- การแก้ไขข้อบกพร่องสถานะข้อผิดพลาด
- การใช้เบรกพอยท์ / บันทึก
- การเปลี่ยนแปลงการทำให้ใช้งานได้อย่างรวดเร็วกลับไปที่ GKE
- ไม่บังคับ: การผสานรวม CloudSQL เพื่อความต่อเนื่องของแบ็กเอนด์
2. การตั้งค่าและข้อกำหนด
การตั้งค่าสภาพแวดล้อมตามเวลาที่สะดวก
- ลงชื่อเข้าใช้ Google Cloud Console และสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ หากยังไม่มีบัญชี Gmail หรือ Google Workspace คุณต้องสร้างบัญชี
- ชื่อโครงการคือชื่อที่แสดงของผู้เข้าร่วมโปรเจ็กต์นี้ เป็นสตริงอักขระที่ Google APIs ไม่ได้ใช้และคุณอัปเดตได้ทุกเมื่อ
- รหัสโปรเจ็กต์ต้องไม่ซ้ำกันในโปรเจ็กต์ Google Cloud ทั้งหมดและจะเปลี่ยนแปลงไม่ได้ (เปลี่ยนแปลงไม่ได้หลังจากตั้งค่าแล้ว) Cloud Console จะสร้างสตริงที่ไม่ซ้ำกันโดยอัตโนมัติ ปกติแล้วคุณไม่สนว่าอะไรเป็นอะไร ใน Codelab ส่วนใหญ่ คุณจะต้องอ้างอิงรหัสโปรเจ็กต์ (ซึ่งปกติระบุไว้ว่าเป็น
PROJECT_ID
) ดังนั้นหากไม่ชอบ ให้สร้างรหัสแบบสุ่มขึ้นมาอีกรหัสหนึ่ง หรือคุณจะลองใช้รหัสโปรเจ็กต์ของคุณเองแล้วดูว่ารหัสโปรเจ็กต์พร้อมใช้งานหรือไม่ แล้วก็ "แช่แข็ง" หลังจากสร้างโปรเจ็กต์แล้ว - มีค่าที่ 3 คือหมายเลขโปรเจ็กต์ที่ API บางตัวใช้ ดูข้อมูลเพิ่มเติมเกี่ยวกับค่าทั้ง 3 ค่าได้ในเอกสารประกอบ
- ถัดไป คุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร/API ของระบบคลาวด์ การใช้งาน Codelab นี้น่าจะไม่มีค่าใช้จ่ายใดๆ หากมี หากต้องการปิดทรัพยากรเพื่อไม่ให้มีการเรียกเก็บเงินนอกเหนือจากบทแนะนำนี้ ให้ทำตาม "การล้าง" ดูได้ที่ตอนท้ายของ Codelab ผู้ใช้ใหม่ของ Google Cloud จะมีสิทธิ์เข้าร่วมโปรแกรมทดลองใช้ฟรี$300 USD
เริ่มผู้แก้ไข Cloudshell
ห้องทดลองนี้ออกแบบและทดสอบเพื่อใช้กับ Google Cloud Shell Editor วิธีเข้าถึงเครื่องมือแก้ไข
- เข้าถึงโปรเจ็กต์ Google ที่ https://console.cloud.google.com
- คลิกไอคอนตัวแก้ไข Cloud Shell ที่มุมขวาบน
- บานหน้าต่างใหม่จะเปิดขึ้นที่ด้านล่างของหน้าต่าง
- คลิกปุ่ม "เปิดเครื่องมือแก้ไข"
- ตัวแก้ไขจะเปิดขึ้นโดยมีนักสำรวจอยู่ด้านขวา และเอดิเตอร์จะเปิดขึ้นตรงกลาง
- ควรจะมีแผงเทอร์มินัลที่ด้านล่างของหน้าจอด้วย
- หากเทอร์มินัลไม่ได้เปิด ให้ใช้คีย์ผสม "ctrl+`" เพื่อเปิดหน้าต่างเทอร์มินัลใหม่
ตั้งค่า gcloud
ตั้งค่ารหัสโปรเจ็กต์และภูมิภาคที่ต้องการทำให้แอปพลิเคชันใช้งานได้ใน Cloud Shell บันทึกเป็นตัวแปร PROJECT_ID
และ REGION
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')
ตั้งค่าฐานข้อมูลและคลัสเตอร์ GKE
- ดาวน์โหลดสคริปต์การตั้งค่าและทำให้ไฟล์ปฏิบัติการได้
wget https://raw.githubusercontent.com/GoogleCloudPlatform/container-developer-workshop/main/labs/nodejs/setup.sh
chmod +x setup.sh
จัดสรรโครงสร้างพื้นฐานที่ใช้ในห้องทดลองนี้
ในห้องทดลองนี้ คุณจะทำให้โค้ดใช้งานได้กับ GKE และเข้าถึงข้อมูลที่เก็บไว้ในฐานข้อมูล Spanner สคริปต์การตั้งค่าด้านล่างจะเตรียมโครงสร้างพื้นฐานนี้ให้คุณ
- เปิดไฟล์
setup.sh
และแก้ไขค่าของรหัสผ่านที่ตั้งไว้เป็น CHANGEME - เรียกใช้สคริปต์การตั้งค่าเพื่อสร้างคลัสเตอร์ GKE และฐานข้อมูล CloudSQL ที่จะใช้ในห้องทดลองนี้
./setup.sh
- สร้างไดเรกทอรีใหม่ด้วยชื่อ
mynodejsapp
ใน Cloud Shell
mkdir mynodejsapp
- เปลี่ยนเป็นไดเรกทอรีนี้แล้วเปิดเป็นพื้นที่ทำงาน การดำเนินการนี้จะโหลดเครื่องมือแก้ไขซ้ำโดยสร้างการกำหนดค่าพื้นที่ทำงานในโฟลเดอร์ที่สร้างขึ้นใหม่
cd mynodejsapp && cloudshell workspace .
- ติดตั้งโหนดและ NPM โดยใช้ NVM
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/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
3. สร้างแอปพลิเคชันเริ่มต้นใหม่
- เริ่มต้นแอปพลิเคชัน
กำลังสร้างไฟล์ package.json
โดยเรียกใช้คำสั่งต่อไปนี้
npm init
Choose the entry point: (index.js) src/index.js and default values for the rest of the parameters. This will create the 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" }
- เพิ่มจุดแรกเข้า
แก้ไขไฟล์นี้เพื่อใส่คำสั่งเริ่มต้นในสคริปต์ "start": "node src/index.js",
หลังจากเปลี่ยนแปลง สคริปต์ควรมีลักษณะเหมือนข้อมูลโค้ดด้านล่าง
"scripts": {
"start": "node src/index.js",
"test": "echo \"Error: no test specified\" && exit 1"
},
- เพิ่มการอ้างอิงด่วน
รหัสที่เราจะเพิ่มจะใช้ express
ด้วยเช่นกัน ดังนั้นให้เราเพิ่มการอ้างอิงนั้นลงในไฟล์ package.json
นี้ ดังนั้นหลังจากที่ทำการเปลี่ยนแปลงทั้งหมดแล้ว ไฟล์ package.json
จึงควรจะเป็นดังที่แสดงด้านล่าง
{ "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": "Your Name", "license": "ISC", "dependencies": { "express": "^4.16.4" } }
- สร้างไฟล์ index.js
สร้างไดเรกทอรีแหล่งที่มาชื่อ src
สร้าง src/index.js ด้วยโค้ดต่อไปนี้
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 ตั้งค่าไว้เป็น 8080
สร้างไฟล์ Manifest
Skaffold มีเครื่องมือที่ผสานรวมเพื่อช่วยให้การพัฒนาคอนเทนเนอร์เป็นไปได้ง่ายดายยิ่งขึ้น ในขั้นตอนนี้ คุณจะต้องเริ่มต้น Skaffold ซึ่งจะสร้างไฟล์ YAML พื้นฐานโดยอัตโนมัติ เรียกใช้คำสั่งด้านล่างเพื่อเริ่มกระบวนการ
เรียกใช้คำสั่งต่อไปนี้ในเทอร์มินัล
skaffold init --generate-manifests
เมื่อระบบแจ้ง ให้ทำดังนี้
- ป้อน 8080 ของพอร์ต
- ป้อน y เพื่อบันทึกการกำหนดค่า
มีการเพิ่มไฟล์ 2 รายการไปยังการแสดงภาพพื้นที่ทำงาน skaffold.yaml
และ deployment.yaml
อัปเดตชื่อแอป
ค่าเริ่มต้นที่รวมอยู่ในการกำหนดค่าไม่ตรงกับชื่อแอปพลิเคชันของคุณในขณะนี้ อัปเดตไฟล์ให้อ้างอิงถึงชื่อแอปพลิเคชันของคุณแทนค่าเริ่มต้น
- เปลี่ยนรายการในการกำหนดค่า Skaffold
- เปิด
skaffold.yaml
- เลือกชื่อรูปภาพที่ตั้งค่าเป็น
package-json-image
ในปัจจุบัน - คลิกขวาและเลือกเปลี่ยนรายการทั้งหมด
- พิมพ์ชื่อใหม่เป็น
mynodejsapp
- เปลี่ยนรายการในการกำหนดค่า Kubernetes
- เปิดไฟล์
deployment.yaml
- เลือกชื่อรูปภาพที่ตั้งเป็น
package-json-image
ในปัจจุบัน - คลิกขวาและเลือกเปลี่ยนรายการทั้งหมด
- พิมพ์ชื่อใหม่เป็น
mynodejsapp
สังเกตว่าในไฟล์ skaffold.yaml
ส่วน build
จะใช้ buildpacks
เพื่อสร้างคอนเทนเนอร์ของแอปพลิเคชัน โค้ดนี้ไม่มี Dockerfile และนักพัฒนาซอฟต์แวร์ไม่จำเป็นต้องมีความรู้ใดๆ เกี่ยวกับ Docker เพื่อสร้างคอนเทนเนอร์ให้กับแอปพลิเคชันนี้
นอกจากนี้ ยังเปิดใช้ Hot Sync โดยอัตโนมัติระหว่างตัวแก้ไขและคอนเทนเนอร์ที่กำลังทำงานด้วยการกำหนดค่า Skaffold นี้ ไม่ต้องกำหนดค่าเพิ่มเติมเพื่อเปิดใช้ Hot Sync
4. แนะนำกระบวนการพัฒนา
ในส่วนนี้ คุณจะอธิบายถึงขั้นตอน 2-3 ขั้นตอนโดยใช้ปลั๊กอิน Cloud Code เพื่อเรียนรู้กระบวนการพื้นฐานและตรวจสอบการกำหนดค่าและการตั้งค่าของแอปพลิเคชันเริ่มต้น
Cloud Code ผสานรวมกับ Skaffold เพื่อช่วยให้ขั้นตอนการพัฒนามีประสิทธิภาพมากขึ้น เมื่อคุณทำให้ GKE ใช้งานได้ในขั้นตอนต่อไปนี้ Cloud Code และ Skaffold จะสร้างอิมเมจคอนเทนเนอร์โดยอัตโนมัติ จากนั้นพุชไปยัง Container Registry จากนั้นทำให้แอปพลิเคชันของคุณใช้งานได้บน GKE กรณีนี้จะเกิดขึ้นในเบื้องหลังโดยดึงรายละเอียดออกจากขั้นตอนของนักพัฒนาซอฟต์แวร์ นอกจากนี้ Cloud Code ยังปรับปรุงกระบวนการพัฒนาโดยมอบความสามารถในการแก้ไขข้อบกพร่องและ Hotsync แบบดั้งเดิมให้แก่การพัฒนาตามคอนเทนเนอร์
ทำให้ใช้งานได้กับ Kubernetes
- ในแผงที่ด้านล่างของ Cloud Shell Editor ให้เลือก Cloud Code
- เลือกเรียกใช้บน Kubernetes ในแผงที่ปรากฏขึ้นด้านบน หากได้รับข้อความแจ้ง ให้เลือกใช่เพื่อใช้บริบท Kubernetes ปัจจุบัน
- ครั้งแรกที่คุณเรียกใช้คำสั่ง ระบบจะแสดงข้อความแจ้งที่ด้านบนของหน้าจอเพื่อถามว่าคุณต้องการบริบท Kubernetes ปัจจุบันหรือไม่ ให้เลือก "ใช่" เพื่อยอมรับและใช้บริบทปัจจุบัน
- ต่อไปจะมีข้อความแจ้งถามว่าจะใช้รีจิสทรีคอนเทนเนอร์ใด กด Enter เพื่อยอมรับค่าเริ่มต้นที่ระบุ
- เลือกแท็บเอาต์พุตในแผงด้านล่างเพื่อดูความคืบหน้าและการแจ้งเตือน
- เลือก "Kubernetes: เรียกใช้/แก้ไขข้อบกพร่อง - แบบละเอียด" ในเมนูแบบเลื่อนลงของช่องทางด้านขวาเพื่อดูรายละเอียดเพิ่มเติม และบันทึกที่สตรีมแบบสดจากคอนเทนเนอร์
- กลับไปที่มุมมองแบบง่ายโดยเลือก "Kubernetes: เรียกใช้/แก้ไขข้อบกพร่อง" จากเมนูแบบเลื่อนลง
- เมื่อบิลด์และทดสอบเสร็จสิ้น แท็บเอาต์พุตจะระบุว่า
Resource deployment/mynodejsapp status completed successfully
และ URL ที่ส่งต่อมาจากแอปเดโมบริการ: http://localhost:8080" - ในเทอร์มินัล Cloud Code ให้วางเมาส์เหนือ URL ในเอาต์พุต (http://localhost:8080) แล้วเลือก "เปิดตัวอย่างเว็บ" ในเคล็ดลับเครื่องมือที่ปรากฏขึ้น
คำตอบจะมีรายละเอียดดังนี้
{"message":"Greetings from Node"}
โหลดซ้ำแบบ Hot
- นำทางไปยัง
src/index.js
แก้ไขโค้ดในข้อความทักทายเป็น'Hello from Node'
โปรดสังเกตได้ทันทีว่าในหน้าต่าง Output
มุมมอง Kubernetes: Run/Debug
ผู้ดูจะซิงค์ไฟล์ที่อัปเดตกับคอนเทนเนอร์ใน Kubernetes
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
- หากเปลี่ยนเป็นมุมมอง
Kubernetes: Run/Debug - Detailed
คุณจะสังเกตเห็นว่ารับรู้การเปลี่ยนแปลงไฟล์และรีสตาร์ทโหนด
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/
- โปรดรีเฟรชเบราว์เซอร์เพื่อดูผลการค้นหาที่อัปเดต
การแก้ไขข้อบกพร่อง
- ไปที่มุมมองการแก้ไขข้อบกพร่องและหยุดชุดข้อความปัจจุบัน
- คลิกที่
Cloud Code
ในเมนูด้านล่างและเลือกDebug on Kubernetes
เพื่อเรียกใช้แอปพลิเคชันในโหมดdebug
- ในมุมมอง
Kubernetes Run/Debug - Detailed
ของหน้าต่างOutput
โปรดสังเกตว่า Skaffold จะทำให้แอปพลิเคชันนี้ใช้งานได้ในโหมดแก้ไขข้อบกพร่อง - ซึ่งจะใช้เวลาสักครู่ในการสร้างแอปพลิเคชันและทำให้ใช้งานได้ คุณจะเห็นโปรแกรมแก้ไขข้อบกพร่องแนบอยู่ในครั้งนี้
Port forwarding pod/mynodejsapp-6bbcf847cd-vqr6v in namespace default, remote port 9229 -> http://127.0.0.1:9229 [mynodejsapp]Debugger attached.
- แถบสถานะด้านล่างจะเปลี่ยนสีจากสีน้ำเงินเป็นสีส้มซึ่งแสดงว่าอยู่ในโหมดแก้ไขข้อบกพร่อง
- ในมุมมอง
Kubernetes Run/Debug
โปรดสังเกตว่าคอนเทนเนอร์ที่แก้ไขข้อบกพร่องได้เริ่มทำงานแล้ว
**************URLs***************** Forwarded URL from service mynodejsapp-service: http://localhost:8080 Debuggable container started pod/mynodejsapp-deployment-6bc7598798-xl9kj:mynodejsapp (default) Update succeeded ***********************************
ใช้เบรกพอยท์
- เปิด
src/index.js
- ค้นหาข้อความที่เขียนว่า
var message="Greetings from Node";
- เพิ่มเบรกพอยท์ในบรรทัดดังกล่าวโดยคลิกที่ช่องว่างทางด้านซ้ายของหมายเลขบรรทัด สัญญาณบอกสถานะสีแดงจะแสดงขึ้นเพื่อระบุว่าตั้งค่าเบรกพอยท์แล้ว
- โหลดเบราว์เซอร์ซ้ำและโปรดทราบว่าโปรแกรมแก้ไขข้อบกพร่องจะหยุดกระบวนการที่เบรกพอยท์และช่วยให้คุณตรวจสอบตัวแปรและสถานะของแอปพลิเคชันที่ทำงานจากระยะไกลใน GKE ได้
- คลิกไปที่ส่วนตัวแปรจนกว่าจะพบตัวแปร
"message"
- เรียกใช้บรรทัดโดยกดขั้นตอนเหนือ
- สังเกตค่าปัจจุบันของการเปลี่ยนแปลงตัวแปร
"message"
เป็น"Greetings from Node"
- ดับเบิลคลิกชื่อตัวแปร "target" และเปลี่ยนค่าเป็นอย่างอื่น เช่น
"Hello from Node"
ในป๊อปอัป - คลิกปุ่ม ดำเนินการต่อ ในแผงควบคุมการแก้ไขข้อบกพร่อง
- ตรวจสอบคำตอบในเบราว์เซอร์ ซึ่งตอนนี้จะแสดงค่าที่อัปเดตที่คุณเพิ่งป้อน
- หยุด "แก้ไขข้อบกพร่อง" โดยกดปุ่มหยุด
และนำเบรกพอยท์ออกโดยคลิกที่เบรกพอยท์อีกครั้ง
5. การพัฒนาบริการ CRUD REST แบบง่าย
ณ จุดนี้ แอปพลิเคชันของคุณได้รับการกำหนดค่าสำหรับการพัฒนาที่สร้างโดยใช้คอนเทนเนอร์เสร็จสมบูรณ์แล้ว และคุณได้แนะนำเวิร์กโฟลว์การพัฒนาขั้นพื้นฐานด้วย Cloud Code แล้ว ในส่วนต่อไปนี้ คุณจะได้ฝึกฝนสิ่งที่ได้เรียนรู้ด้วยการเพิ่มปลายทางของบริการ REST ที่เชื่อมต่อกับฐานข้อมูลที่มีการจัดการใน Google Cloud
กำหนดค่าการขึ้นต่อกัน
โค้ดของแอปพลิเคชันจะใช้ฐานข้อมูลเพื่อเก็บข้อมูลบริการที่เหลือไว้ ตรวจสอบว่าทรัพยากร Dependency พร้อมใช้งานโดยการเพิ่มรายการต่อไปนี้ในไฟล์ package.json
- เพิ่มทรัพยากร Dependency อีก 2 รายการ
pg
และsequelize
ไปยังไฟล์package.json
เพื่อสร้างแอปพลิเคชัน CRUD Postgres โพสต์การเปลี่ยนแปลงในส่วนทรัพยากร Dependency จะมีลักษณะเช่นนี้
"dependencies": {
"express": "^4.16.4",
"pg": "^8.7.3",
"sequelize": "^6.17.0"
}
เขียนโค้ดบริการ REST
- เพิ่มโค้ดแอปพลิเคชัน CRUD ลงในแอปพลิเคชันนี้
wget -O app.zip https://github.com/GoogleCloudPlatform/container-developer-workshop/raw/main/labs/nodejs/app.zip
unzip app.zip
โค้ดนี้มี
- โฟลเดอร์ models พร้อมโมเดลเอนทิตีสำหรับ
item
- controllers ที่มีโค้ดที่ทำ CRUD
- Routes ที่กำหนดเส้นทางรูปแบบ URL เฉพาะไปยังการเรียกต่างๆ
- config ของโฟลเดอร์ที่มีรายละเอียดการเชื่อมต่อฐานข้อมูล
- โปรดทราบว่าการกำหนดค่าฐานข้อมูลในไฟล์
db.config.js
อ้างอิงตัวแปรสภาพแวดล้อมที่จำเป็นต้องระบุเพื่อเชื่อมต่อกับฐานข้อมูล นอกจากนี้คุณต้องแยกวิเคราะห์คำขอที่เข้ามาสำหรับการเข้ารหัส URL - เพิ่มข้อมูลโค้ดต่อไปนี้ใน
src/index.js
เพื่อให้เชื่อมต่อกับโค้ด CRUD จากไฟล์ JavaScript หลักก่อนส่วนสุดท้ายที่ขึ้นต้นด้วยapp.listen(PORT, () => {
ได้
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);
- แก้ไขการทำให้ใช้งานได้ในไฟล์
deployment.yaml
เพื่อเพิ่มตัวแปรสภาพแวดล้อมที่จะส่งข้อมูลการเชื่อมต่อฐานข้อมูล
อัปเดตรายการข้อมูลจำเพาะที่ท้ายไฟล์ให้ตรงกับคำจำกัดความต่อไปนี้
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
- แทนที่ค่า DB_HOST ด้วยที่อยู่ของฐานข้อมูลของคุณ
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
ทำให้แอปพลิเคชันใช้งานได้และตรวจสอบ
- ในบานหน้าต่างที่ด้านล่างของ Cloud Shell Editor ให้เลือก
Cloud Code
จากนั้นเลือกDebug on Kubernetes
ที่ด้านบนของหน้าจอ - เมื่อบิลด์และทดสอบเสร็จสิ้น แท็บเอาต์พุตจะแสดงข้อความ:
Resource deployment/mynodejsapp status completed successfully
และจะมี URL อยู่ในรายการ "URL ที่ส่งต่อจากบริการ mynodejsapp: http://localhost:8080" - เพิ่มสินค้า 2-3 รายการ
เรียกใช้คำสั่งด้านล่างจากเทอร์มินัล Cloudshell
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"
- ทดสอบ GET โดยเรียกใช้ $URL/items ในเบราว์เซอร์ นอกจากนี้คุณยังเรียกใช้ curl จากบรรทัดคำสั่งได้
curl -X GET $URL/items
- ทดสอบการลบ: ตอนนี้ให้ลองลบรายการโดยการเรียกใช้ เปลี่ยนค่าของรหัสสินค้า หากจำเป็น
curl -X DELETE $URL/items/1
This throws an error message
{"message":"Could not delete Item with id=[object Object]"}
ระบุและแก้ไขปัญหา
- รีสตาร์ทแอปพลิเคชันในโหมดแก้ไขข้อบกพร่องและค้นหาปัญหา มาดูเคล็ดลับบางส่วนกัน
- เราทราบว่ามีบางอย่างผิดพลาดกับ DELETE เนื่องจากไม่มีการแสดงผลลัพธ์ที่ต้องการ ดังนั้นคุณจะต้องตั้งค่าเบรกพอยท์ในเมธอด
itemcontroller.js
->exports.delete
- เรียกใช้การดำเนินการทีละขั้นตอน และดูตัวแปรในแต่ละขั้นตอนเพื่อสังเกตค่าของตัวแปรภายในในหน้าต่างด้านซ้าย
- หากต้องการดูค่าที่เฉพาะเจาะจง เช่น
request.params
ให้เพิ่มตัวแปรนี้ลงในหน้าต่าง "ดู"
- โปรดสังเกตว่าค่าที่กําหนดให้กับ
id
คือundefined
โปรดเปลี่ยนโค้ดเพื่อแก้ไขปัญหา
ข้อมูลโค้ดที่แก้ไขแล้วจะมีลักษณะดังนี้
// Delete a Item with the specified id in the request exports.delete = (req, res) => { const id = req.params.id;
- เมื่อรีสตาร์ทแอปพลิเคชันแล้ว ให้ทดสอบอีกครั้งโดยพยายามลบ
- หยุดเซสชันการแก้ไขข้อบกพร่องโดยคลิกสี่เหลี่ยมจัตุรัสสีแดงในแถบเครื่องมือแก้ไขข้อบกพร่อง
6. ล้างข้อมูล
ยินดีด้วย ในห้องทดลองนี้ คุณได้สร้างแอปพลิเคชัน Nodejs ใหม่ตั้งแต่ต้นและกำหนดค่าให้ทำงานในโหมดการติดตั้งใช้งานแบบ Hot ด้วยคอนเทนเนอร์ จากนั้นคุณได้ทำให้แอปพลิเคชันใช้งานได้และแก้ไขข้อบกพร่องของแอปพลิเคชันไปยังคลัสเตอร์ GKE ระยะไกลตามกระบวนการของนักพัฒนาซอฟต์แวร์เดียวกันที่พบในสแต็กแอปพลิเคชันแบบดั้งเดิมแล้ว
วิธีทำความสะอาดหลังจบห้องทดลอง
- ลบไฟล์ที่ใช้ในห้องทดลอง
cd ~ && rm -rf mynodejsapp && rm -f setup.sh
- ลบโปรเจ็กต์เพื่อนำโครงสร้างพื้นฐานและทรัพยากรที่เกี่ยวข้องทั้งหมดออก