1. ภาพรวม
แล็บนี้จะสาธิตฟีเจอร์และความสามารถที่ออกแบบมาเพื่อเพิ่มประสิทธิภาพเวิร์กโฟลว์การพัฒนาสำหรับวิศวกรซอฟต์แวร์ที่ได้รับมอบหมายให้พัฒนาแอปพลิเคชัน NodeJS ในสภาพแวดล้อมที่มีคอนเทนเนอร์ การพัฒนาคอนเทนเนอร์โดยทั่วไปกำหนดให้ผู้ใช้ต้องเข้าใจรายละเอียดของคอนเทนเนอร์และกระบวนการบิลด์คอนเทนเนอร์ นอกจากนี้ โดยปกติแล้ว นักพัฒนาซอฟต์แวร์จะต้องหยุดโฟลว์การทำงาน ย้ายออกจาก IDE เพื่อทดสอบและแก้ไขข้อบกพร่องของแอปพลิเคชันในสภาพแวดล้อมระยะไกล เครื่องมือและเทคโนโลยีที่กล่าวถึงในบทแนะนำนี้ช่วยให้นักพัฒนาแอปทำงานกับแอปพลิเคชันที่อยู่ในคอนเทนเนอร์ได้อย่างมีประสิทธิภาพโดยไม่ต้องออกจาก IDE
สิ่งที่คุณจะได้เรียนรู้
ในแล็บนี้ คุณจะได้เรียนรู้วิธีการพัฒนาด้วยคอนเทนเนอร์ใน GCP ซึ่งรวมถึง
- การสร้างแอปพลิเคชัน Nodejs เริ่มต้น
- การกำหนดค่าแอปพลิเคชัน Nodejs สำหรับการพัฒนาคอนเทนเนอร์
- การเขียนโค้ดบริการ REST แบบ CRUD อย่างง่าย
- การทำให้ใช้งานได้ใน 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 ของ Cloud การทำตาม Codelab นี้ไม่ควรมีค่าใช้จ่ายมากนัก หรืออาจไม่มีเลย หากต้องการปิดแหล่งข้อมูลเพื่อไม่ให้มีการเรียกเก็บเงินนอกเหนือจากบทแนะนำนี้ ให้ทำตามวิธีการ "ล้างข้อมูล" ที่ตอนท้ายของ Codelab ผู้ใช้ Google Cloud รายใหม่มีสิทธิ์เข้าร่วมโปรแกรมช่วงทดลองใช้ฟรีมูลค่า$300 USD
เริ่มโปรแกรมแก้ไข Cloud Shell
Lab นี้ออกแบบและทดสอบเพื่อใช้กับ Google Cloud Shell Editor วิธีเข้าถึงเครื่องมือแก้ไข
- เข้าถึงโปรเจ็กต์ Google ที่ https://console.cloud.google.com
- คลิกไอคอนโปรแกรมแก้ไข Cloud Shell ที่มุมขวาบน

- แผงใหม่จะเปิดขึ้นที่ด้านล่างของหน้าต่าง
- คลิกปุ่ม "เปิดเครื่องมือแก้ไข"

- เครื่องมือแก้ไขจะเปิดขึ้นพร้อมกับ Explorer ทางด้านขวาและเครื่องมือแก้ไขในพื้นที่ส่วนกลาง
- นอกจากนี้ ควรมีแผงเทอร์มินัลที่ด้านล่างของหน้าจอด้วย
- หากเทอร์มินัลไม่ได้เปิดอยู่ ให้ใช้ชุดค่าผสมของปุ่ม `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
จัดสรรโครงสร้างพื้นฐานที่ใช้ใน Lab นี้
ในแล็บนี้ คุณจะได้ติดตั้งใช้งานโค้ดใน GKE และเข้าถึงข้อมูลที่จัดเก็บไว้ในฐานข้อมูล Spanner สคริปต์การตั้งค่าด้านล่างจะเตรียมโครงสร้างพื้นฐานนี้ให้คุณ
- เปิดไฟล์
setup.shแล้วแก้ไขค่าของรหัสผ่านที่ตั้งค่าเป็น CHANGEME ในปัจจุบัน - เรียกใช้สคริปต์การตั้งค่าเพื่อสร้างคลัสเตอร์ GKE และฐานข้อมูล CloudSQL ที่คุณจะใช้ใน Lab นี้
./setup.sh
- ใน Cloud Shell ให้สร้างไดเรกทอรีใหม่ชื่อ
mynodejsapp
mkdir mynodejsapp
- เปลี่ยนไปที่ไดเรกทอรีนี้แล้วเปิดเป็นพื้นที่ทำงาน ซึ่งจะโหลดโปรแกรมแก้ไขอีกครั้งโดยสร้างการกำหนดค่าพื้นที่ทำงานในโฟลเดอร์ที่สร้างขึ้นใหม่
cd mynodejsapp && cloudshell workspace .
- ติดตั้ง Node และ 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"
},
- เพิ่มทรัพยากร Dependency ของ Express
โค้ดที่เราจะเพิ่มยังใช้ express ด้วย ดังนั้นเรามาเพิ่มทรัพยากร Dependency นั้นลงในไฟล์ 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 ของ Kubernetes ฐานโดยอัตโนมัติ เรียกใช้คำสั่งด้านล่างเพื่อเริ่มกระบวนการ
เรียกใช้คำสั่งต่อไปนี้ในเทอร์มินัล
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 เพื่อทำคอนเทนเนอร์แอปพลิเคชันนี้
นอกจากนี้ การกำหนดค่า skaffold นี้ยังเปิดใช้การซิงค์ด่วนโดยอัตโนมัติระหว่างเอดิเตอร์กับคอนเทนเนอร์ที่ทำงานอยู่ด้วย ไม่จำเป็นต้องมีการกำหนดค่าเพิ่มเติมเพื่อเปิดใช้การซิงค์ด่วน
4. การเดินผ่านกระบวนการพัฒนา
ในส่วนนี้ คุณจะได้ทำตามขั้นตอน 2-3 ขั้นตอนโดยใช้ปลั๊กอิน Cloud Code เพื่อเรียนรู้กระบวนการพื้นฐาน รวมถึงตรวจสอบการกำหนดค่าและการตั้งค่าของแอปพลิเคชันเริ่มต้น
Cloud Code ผสานรวมกับ Skaffold เพื่อเพิ่มประสิทธิภาพกระบวนการพัฒนา เมื่อคุณทำให้ใช้งานได้ใน GKE ในขั้นตอนต่อไปนี้ Cloud Code และ Skaffold จะบิลด์อิมเมจคอนเทนเนอร์ พุชไปยัง Container Registry แล้วทำให้ใช้งานได้แอปพลิเคชันใน GKE โดยอัตโนมัติ ซึ่งจะเกิดขึ้นเบื้องหลังโดยซ่อนรายละเอียดจากขั้นตอนการทำงานของนักพัฒนาแอป นอกจากนี้ Cloud Code ยังช่วยเพิ่มประสิทธิภาพกระบวนการพัฒนาด้วยการมอบความสามารถในการแก้ไขข้อบกพร่องและการซิงค์ด่วนแบบเดิมให้กับการพัฒนาที่อิงตามคอนเทนเนอร์
ทําให้ใช้งานได้ใน Kubernetes
- เลือก Cloud Code  ในบานหน้าต่างที่ด้านล่างของ Cloud Shell Editor

- เลือกเรียกใช้ใน Kubernetes ในแผงที่ปรากฏที่ด้านบน หากได้รับข้อความแจ้ง ให้เลือก "ใช่" เพื่อใช้บริบท Kubernetes ปัจจุบัน

- เมื่อเรียกใช้คำสั่งเป็นครั้งแรก ข้อความแจ้งจะปรากฏที่ด้านบนของหน้าจอเพื่อถามว่าคุณต้องการใช้บริบท Kubernetes ปัจจุบันหรือไม่ ให้เลือก "ใช่" เพื่อยอมรับและใช้บริบทปัจจุบัน

- จากนั้นระบบจะแสดงข้อความแจ้งเพื่อถามว่าควรใช้รีจิสทรีคอนเทนเนอร์ใด กด Enter เพื่อยอมรับค่าเริ่มต้นที่ระบุ

- เลือกแท็บเอาต์พุตในบานหน้าต่างด้านล่างเพื่อดูความคืบหน้าและการแจ้งเตือน

- เลือก "Kubernetes: เรียกใช้/แก้ไขข้อบกพร่อง - โดยละเอียด" ในเมนูแบบเลื่อนลงของช่องทางทางด้านขวาเพื่อดูรายละเอียดเพิ่มเติมและบันทึกที่สตรีมแบบสดจากคอนเทนเนอร์

- กลับไปที่มุมมองแบบง่ายโดยเลือก "Kubernetes: เรียกใช้/แก้ไขข้อบกพร่อง" จากเมนูแบบเลื่อนลง
- เมื่อการสร้างและการทดสอบเสร็จสมบูรณ์ แท็บเอาต์พุตจะแสดง
Resource deployment/mynodejsapp status completed successfullyและ URL ที่ระบุคือ "Forwarded URL from service demo-app: http://localhost:8080" - ในเทอร์มินัล Cloud Code ให้วางเมาส์เหนือ URL ในเอาต์พุต (http://localhost:8080) จากนั้นเลือก "เปิดตัวอย่างเว็บ" ในเคล็ดลับเครื่องมือที่ปรากฏขึ้น
การตอบกลับจะเป็นดังนี้
{"message":"Greetings from Node"}
Hot Reload
- นำทางไปยัง
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 จะนำแอปพลิเคชันนี้ไปใช้งานในโหมดแก้ไขข้อบกพร่อง - การสร้างและติดตั้งใช้งานแอปพลิเคชันจะใช้เวลา 2-3 นาที คุณจะเห็นว่ามีการแนบดีบักเกอร์ในครั้งนี้
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" - ดำเนินการบรรทัดโดยกด Step over

- สังเกตการเปลี่ยนแปลงค่าปัจจุบันของตัวแปร
"message"เป็น"Greetings from Node" - ดับเบิลคลิกชื่อตัวแปร "target" และในป๊อปอัป ให้เปลี่ยนค่าเป็นค่าอื่น เช่น
"Hello from Node" - คลิกปุ่ม "ดำเนินการต่อ" ในแผงควบคุมการแก้ไขข้อบกพร่อง
- ตรวจสอบการตอบกลับในเบราว์เซอร์ ซึ่งตอนนี้จะแสดงค่าที่อัปเดตที่คุณเพิ่งป้อน
- หยุดโหมด "แก้ไขข้อบกพร่อง" โดยกดปุ่มหยุด
และนำเบรกพอยท์ออกโดยคลิกเบรกพอยท์อีกครั้ง
5. การพัฒนาบริการ REST แบบ CRUD อย่างง่าย
ตอนนี้แอปพลิเคชันของคุณได้รับการกำหนดค่าอย่างเต็มรูปแบบสำหรับการพัฒนาแบบคอนเทนเนอร์แล้ว และคุณได้ทำตามเวิร์กโฟลว์การพัฒนาพื้นฐานด้วย Cloud Code แล้ว ในส่วนต่อไปนี้ คุณจะได้ฝึกฝนสิ่งที่ได้เรียนรู้โดยการเพิ่มปลายทางของบริการ REST ที่เชื่อมต่อกับฐานข้อมูลที่มีการจัดการใน Google Cloud
กำหนดค่าการอ้างอิง
โค้ดของแอปพลิเคชันใช้ฐานข้อมูลเพื่อจัดเก็บข้อมูลบริการ REST ตรวจสอบว่าทรัพยากร Dependency พร้อมใช้งานโดยเพิ่มรายการต่อไปนี้ในไฟล์ package.json
- เพิ่ม Dependency อีก 2 รายการ
pgและsequelizeลงในไฟล์package.jsonเพื่อสร้างแอปพลิเคชัน CRUD ใน Postgres โพสต์การเปลี่ยนแปลงส่วนการขึ้นต่อกันจะมีลักษณะดังนี้
"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 ที่ระบุว่า "Forwarded URL from service mynodejsapp: http://localhost:8080" - เพิ่มรายการ 2-3 รายการ
จากเทอร์มินัล Cloud Shell ให้เรียกใช้คำสั่งด้านล่าง
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ให้เพิ่มตัวแปรนี้ลงในหน้าต่าง Watch
- โปรดทราบว่าค่าที่กำหนดให้กับ
idคือundefinedเปลี่ยนโค้ดเพื่อแก้ไขปัญหา
ข้อมูลโค้ดที่แก้ไขแล้วจะมีลักษณะดังนี้
// Delete a Item with the specified id in the request
exports.delete = (req, res) => {
const id = req.params.id;
- เมื่อรีสตาร์ทแอปพลิเคชันแล้ว ให้ทดสอบอีกครั้งโดยลองลบ
- หยุดเซสชันการแก้ไขข้อบกพร่องโดยคลิกสี่เหลี่ยมสีแดงในแถบเครื่องมือการแก้ไขข้อบกพร่อง

6. ล้างข้อมูล
ยินดีด้วย ใน Lab นี้ คุณได้สร้างแอปพลิเคชัน Nodejs ใหม่ตั้งแต่ต้นและกำหนดค่าให้ทำงานในโหมดการติดตั้งใช้งานแบบร้อนด้วยคอนเทนเนอร์ จากนั้นคุณได้ทําการทำให้ใช้งานได้และแก้ไขข้อบกพร่องของแอปพลิเคชันไปยังคลัสเตอร์ GKE ระยะไกลตามโฟลว์ของนักพัฒนาซอฟต์แวร์เดียวกันกับที่พบในสแต็กแอปพลิเคชันแบบดั้งเดิม
วิธีล้างข้อมูลหลังจากทำแล็บเสร็จ
- ลบไฟล์ที่ใช้ในห้องทดลอง
cd ~ && rm -rf mynodejsapp && rm -f setup.sh
- ลบโปรเจ็กต์เพื่อนำโครงสร้างพื้นฐานและทรัพยากรที่เกี่ยวข้องทั้งหมดออก