การพัฒนาในเครื่องด้วย Cloud Functions สำหรับ Node.js โดยใช้ Visual Studio Code
เกี่ยวกับ Codelab นี้
1 ภาพรวม
Google Cloud Functions เป็นแพลตฟอร์มการประมวลผลแบบ Serverless ที่ขับเคลื่อนด้วยเหตุการณ์ Cloud Functions ช่วยให้คุณเขียนโค้ดได้โดยไม่ต้องกังวลเกี่ยวกับการเตรียมทรัพยากรหรือการปรับขนาดเพื่อรองรับข้อกำหนดที่เปลี่ยนแปลงไป
Cloud Functions ที่เขียนด้วย JavaScript จะทํางานในสภาพแวดล้อม Node.js บน Google Cloud Platform คุณสามารถเรียกใช้ Cloud Functions ในรันไทม์ Node.js มาตรฐานใดก็ได้เพื่อให้สามารถย้ายข้อมูลและทดสอบในเครื่องได้
บทแนะนำ
ในโค้ดแล็บนี้ คุณจะได้สร้าง Cloud Function สำหรับ Node.js ซึ่งจะรายงานว่าอุณหภูมิที่ระบุนั้นยอมรับได้หรือร้อนเกินไป คุณจะต้องสร้าง ทดสอบ และแก้ไขข้อบกพร่องของ Cloud Function โดยใช้ Visual Studio Code ในเครื่อง สุดท้าย คุณจะนำฟังก์ชันไปใช้งานใน Google Cloud Platform
สิ่งที่จะได้เรียนรู้
- เฟรมเวิร์กฟังก์ชันสําหรับ Node.js
- สร้างและทดสอบ HTTP Cloud Function ในเครื่อง
- แก้ไขข้อบกพร่องของฟังก์ชัน HTTP จากเครื่อง
- ทำให้ฟังก์ชัน HTTP ใช้งานได้จากเครื่อง
2 การตั้งค่าและข้อกําหนด
ข้อกำหนดเบื้องต้น
- Cloud SDK
- โค้ด Visual Studio
- Node.js 8.6.0 ขึ้นไป (หากต้องการติดตั้ง Node.js ให้ใช้ nvm หากต้องการตรวจสอบเวอร์ชัน ให้เรียกใช้ node –version)
- จบหลักสูตรฟังก์ชันแรก: คู่มือ Node.js
ค่าใช้จ่าย
แม้ว่าโค้ดแล็บนี้จะต้องมีการเรียกใช้ Cloud Function ที่ติดตั้งใช้งานเพียง 1 ครั้ง แต่คุณก็ควรดูข้อมูลราคา Cloud Functions API เพื่อให้เข้าใจวิธีเรียกเก็บเงิน
แม้ว่า Google API หลายรายการจะใช้ได้โดยไม่เสียค่าธรรมเนียม แต่การใช้ Google Cloud Platform (เช่น ผลิตภัณฑ์และ API) นั้นจะต้องเสียค่าใช้จ่าย คุณต้องมีบัญชีการเรียกเก็บเงินที่ใช้งานอยู่จึงจะใช้ Cloud Functions ได้ โปรดทราบว่าผลิตภัณฑ์ Google Cloud Platform (GCP) บางรายการมีระดับ"ฟรีตลอด" ซึ่งคุณต้องใช้งานเกินเกณฑ์จึงจะมีการเรียกเก็บเงิน สำหรับการเรียกใช้ Cloud Functions แต่ละครั้งในโค้ดแล็บ ระบบจะนับรวมกับการใช้งานระดับฟรีดังกล่าว ตราบใดที่คุณใช้ไม่เกินขีดจำกัดโดยรวม (ภายในแต่ละเดือน) ก็ไม่ควรจะมีการเรียกเก็บเงิน
3 ติดตั้งเฟรมเวิร์ก Functions สำหรับ Node.js
เฟรมเวิร์ก Functions สำหรับ Node.js เป็นเฟรมเวิร์ก FaaS (Function as a Service) แบบโอเพนซอร์สสําหรับเขียนฟังก์ชัน Node.js ที่นําเสนอโดยทีม Google Cloud Functions
เฟรมเวิร์กฟังก์ชันช่วยให้คุณเขียนฟังก์ชันที่มีน้ำหนักเบาซึ่งทำงานได้ในสภาพแวดล้อมต่างๆ เช่น
- Google Cloud Functions
- เครื่องสำหรับพัฒนาซอฟต์แวร์ของคุณ
- Cloud Run และ Cloud Run บน GKE
- สภาพแวดล้อมที่อิงตาม Knative
สร้างแอป node.js ใหม่
npm init
ขณะยอมรับค่าเริ่มต้น ให้ใช้ index.js
เป็นจุดแรกเข้าของแอป
จากนั้นติดตั้งเฟรมเวิร์ก Functions สำหรับ Node.js
npm install @google-cloud/functions-framework
เปิด package.json ตรวจสอบว่าคุณเห็นเฟรมเวิร์กฟังก์ชันแสดงอยู่ในรายการทรัพยากร ดังที่แสดงในตัวอย่างด้านล่าง
"dependencies": { "@google-cloud/functions-framework": "^1.7.1" }
ติดตั้งเฟรมเวิร์กฟังก์ชันเรียบร้อยแล้ว ตอนนี้คุณก็พร้อมสร้าง Cloud Function แล้ว
4 สร้างและทดสอบ HTTP Cloud Function บนเครื่อง
สร้าง Cloud Function ในเครื่อง
ในส่วนนี้ คุณจะต้องสร้างและทดสอบฟังก์ชัน HTTP ที่ตอบสนองต่อคําขอ HTTP
สร้างไฟล์ใหม่ชื่อ index.js
ในไดเรกทอรีเดียวกับไฟล์ package.json
เพิ่มข้อมูลต่อไปนี้
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); } };
ตอนนี้คุณพร้อมที่จะทดสอบฟังก์ชันแล้ว
ทดสอบฟังก์ชันใน Visual Studio Code
จากนี้ไป Codelab นี้จะใช้ เทอร์มินัลแบบรวมภายใน Visual Studio Code
เปิดหน้าต่างเทอร์มินัลใน Visual Studio Code
เรียกใช้คำสั่งต่อไปนี้
node node_modules/@google-cloud/functions-framework --target=validateTemperature
คำสั่งนี้จะเริ่มต้นเซิร์ฟเวอร์ในเครื่องที่พร้อมเรียกใช้ฟังก์ชัน validateTemperature
เมื่อเซิร์ฟเวอร์ได้รับคำขอ HTTP
คุณควรเห็นเอาต์พุตต่อไปนี้ในหน้าต่างเทอร์มินัล
Serving function... Function: validateTemperature URL: http://localhost:8080/
สร้างหน้าต่างเทอร์มินัลที่ 2 ภายใน VS Code โดยคลิกไอคอนเครื่องหมายบวก New Terminal
ในแผงหน้าต่างเทอร์มินัล คุณจะต้องสลับระหว่างหน้าต่างเทอร์มินัล 2 หน้าต่างนี้ หน้าต่างแรกสำหรับแสดงฟังก์ชัน และหน้าต่างที่ 2 สำหรับการเรียกใช้ฟังก์ชันโดยใช้ curl
คุณสลับระหว่างหน้าต่างเทอร์มินัลได้โดยใช้เมนูแบบเลื่อนลง หากหน้าต่างเทอร์มินัลแสดงฟังก์ชันอยู่ รายการแบบเลื่อนลงจะเรียกหน้าต่างดังกล่าวว่า node
ไม่เช่นนั้น ระบบจะเรียก shell นั้นว่า zsh
(หรือ shell ที่คุณใช้อยู่)
ในหน้าต่างเทอร์มินัลที่ 2 ให้เรียกใช้คําสั่งต่อไปนี้เพื่อส่งเพย์โหลดอุณหภูมิ 50 ไปยังเซิร์ฟเวอร์ภายในที่ใช้ฟังก์ชัน validateTemperature
curl -X POST http://localhost:8080 -H "Content-Type:application/json" -d '{"temp":"50"}'
คุณควรได้รับการตอบกลับต่อไปนี้จากฟังก์ชันระบบคลาวด์
Temperature OK
ในหน้าต่างเทอร์มินัลที่ 2 ให้ทดสอบฟังก์ชันอีกครั้งโดยส่งเพย์โหลดอุณหภูมิ "สูงเกินไป" ดังที่แสดงด้านล่าง
curl -X POST http://localhost:8080 -H "Content-Type:application/json" -d '{"temp":"120"}'
คุณควรได้รับการตอบกลับต่อไปนี้จากฟังก์ชันที่อยู่ในระบบคลาวด์
Too hot
สุดท้าย ให้ทดสอบฟังก์ชันโดยเรียกใช้โดยไม่มีเพย์โหลด
curl -X POST http://localhost:8080
คุณควรได้รับการตอบกลับต่อไปนี้จากฟังก์ชันที่อยู่ในระบบคลาวด์
Too hot
โดยหลักการแล้ว ฟังก์ชันไม่ควรแสดงผลเป็น "ร้อนเกินไป" หากไม่มีการระบุอุณหภูมิ คุณพบข้อบกพร่องในโค้ด
อย่าลืมหยุดฟังก์ชันไม่ให้ทำงานโดยกด Ctrl + C
ในหน้าต่างเทอร์มินัลแรกที่ใช้แสดงฟังก์ชัน
5 แก้ไขข้อบกพร่องของฟังก์ชัน HTTP จากเครื่อง
เปิดพาเล็ตคำสั่งใน Visual Studio Code หากใช้ Mac ให้ใช้ Cmd + Shift + P
หากใช้ Windows ให้ใช้ Ctrl + Shift + P.
พิมพ์ auto attach
ในแผงคำสั่ง แล้วเลือกรายการด้านบนในรายการ
สําหรับโค้ดแล็บนี้ ให้เลือก Only With Flag
ดังที่แสดงในรูปภาพด้านล่าง
ตอนนี้โหลดหน้าต่างเทอร์มินัลที่คุณใช้ใน VS Code อีกครั้งเพื่อแสดงฟังก์ชันโดยวางเมาส์เหนือไอคอนคำเตือนที่ปรากฏขึ้นทางด้านขวาสุด
คลิก Relaunch Terminal
จากหน้าต่างเทอร์มินัลที่โหลดซ้ำ ให้เรียกใช้เฟรมเวิร์กฟังก์ชันอีกครั้งเพื่อแสดงฟังก์ชันโดยใช้คําสั่งต่อไปนี้
node --inspect node_modules/.bin/functions-framework --target=validateTemperature
โดย Flag --inspect
จะบอกให้ Node.js รอรับไคลเอ็นต์การแก้ไขข้อบกพร่อง ดูข้อมูลเพิ่มเติมได้ที่เอกสารประกอบของ Node เกี่ยวกับการแก้ไขข้อบกพร่อง
โปรดทราบว่าคุณใช้ node_modules/.bin/functions-framework แทน node_modules/@google-cloud/functions-framework คุณต้องใช้ไฟล์ปฏิบัติการแบบลิงก์โดยอัตโนมัติใน /node_modules/.bin เพื่อใช้โหมดตรวจสอบ
ตอนนี้คุณควรเห็นแถบสถานะสีส้มใน VS Code ซึ่งระบุว่าได้แนบโปรแกรมแก้ไขข้อบกพร่องแล้ว
ตั้งจุดหยุดพักที่บรรทัด 3 โดยคลิกในขอบด้านซ้ายของหมายเลขบรรทัด
ไอคอนจุดหยุดพักจะสว่างเป็นสีแดงสด ซึ่งบ่งบอกว่าโปรแกรมแก้ไขข้อบกพร่องเข้าถึงโค้ดบรรทัดนี้ได้
ในหน้าต่างเทอร์มินัลที่ 2 ให้กดจุดหยุดพักชั่วคราวโดยเรียกใช้คำสั่ง curl ต่อไปนี้
curl -X POST http://localhost:8080
คุณจะเห็นไฮไลต์สีเหลืองปรากฏเหนือบรรทัดที่ 3 การไฮไลต์นี้บ่งบอกว่าบรรทัดนี้เป็นคำสั่งปัจจุบันที่โปรแกรมแก้ไขข้อบกพร่องกำลังประเมิน
วางเมาส์เหนือตัวแปร temp เพื่อตรวจสอบว่าเนื้อหาคือ undefined
เนื่องจากคำขอไม่ได้ระบุเพย์โหลดอุณหภูมิ
คลิกไอคอนข้ามเพื่อเรียกใช้คำสั่งถัดไป
คุณจะเห็นคำสั่งปัจจุบันข้ามไปยังส่วน else ของคำสั่ง if
ในการสาธิตนี้ คุณสามารถสมมติว่าข้อกำหนดกำหนดให้คำขอทั้งหมดต้องส่งค่าอุณหภูมิที่อ่านได้ ในกรณีที่ไม่ได้ระบุค่าอุณหภูมิ ฟังก์ชันควรแสดงข้อยกเว้น
คลิกปุ่ม "ยกเลิกการเชื่อมต่อ" เพื่อยกเลิกการเชื่อมต่อโปรแกรมแก้ไขข้อบกพร่อง
ในหน้าต่างเทอร์มินัลแรก ให้หยุดการเรียกใช้ฟังก์ชันโดยกด Ctrl + C
อัปเดตฟังก์ชันเพื่อเพิ่มคำสั่ง if เพื่อแสดงข้อยกเว้นหากอุณหภูมิไม่มีค่า ดังที่แสดงด้านล่าง
exports.validateTemperature = async (req, res) => { try { // add this if statement below line #2 if (!req.body.temp) { throw "Temperature is undefined"; } ...
ในหน้าต่างเทอร์มินัลแรก ให้เริ่มเรียกใช้ฟังก์ชัน Cloud อีกครั้งโดยเรียกใช้คำสั่งต่อไปนี้โดยไม่ใช้ Flag –inspect เพื่อหลีกเลี่ยงการแนบโปรแกรมแก้ไขข้อบกพร่อง
node node_modules/@google-cloud/functions-framework --target=validateTemperature
ยืนยันว่าระบบแสดงข้อยกเว้นโดยเรียกใช้คำสั่งต่อไปนี้ในหน้าต่างเทอร์มินัลที่ 2
curl -X POST http://localhost:8080
คุณควรเห็นเอาต์พุตต่อไปนี้แสดงผลจากคำขอ
Temperature is undefined
ในหน้าต่างเทอร์มินัลแรก คุณจะเห็นข้อผิดพลาดที่บันทึกโดยฟังก์ชันด้วย
Serving function... Function: validateTemperature URL: http://localhost:8080/ got error: Temperature is undefined
ตอนนี้คุณหยุดการทำงานของฟังก์ชันได้โดยกด Ctrl + C ในหน้าต่างเทอร์มินัลแรก
6 ติดตั้งใช้งานฟังก์ชัน HTTP จากเครื่องภายในไปยัง Google Cloud
เมื่อสร้าง ทดสอบ และแก้ไขข้อบกพร่อง Cloud Function ในเครื่องแล้ว คุณก็พร้อมที่จะทำให้ใช้งานได้ใน Google Cloud
ยืนยันว่าคุณใช้โปรเจ็กต์ที่สร้างในขั้นตอนที่ 2 บนเครื่องโดยเรียกใช้คําสั่งต่อไปนี้
gcloud config get-value project
หากโปรเจ็กต์ที่คุณระบุไว้ในขั้นตอนที่ 2 ไม่ใช่การกำหนดค่าที่ใช้งานอยู่ ให้เรียกใช้คําสั่งต่อไปนี้
gcloud config set project <project-name-created-step-2>
ในหน้าต่างเทอร์มินัลใดก็ได้ ให้เรียกใช้คำสั่งต่อไปนี้
gcloud functions deploy validateTemperature --trigger-http --runtime nodejs12 --allow-unauthenticated
โดยคําอธิบายพารามิเตอร์มีดังนี้
deploy validateTemperature
- คำสั่งย่อย gcloud สำหรับทำให้ Cloud Function ที่มีชื่อvalidateTemperature
พร้อมใช้งานโดยมี Entry Point ชื่อvalidateTemperature
--trigger-http
- ประเภทเหตุการณ์ที่ทริกเกอร์--runtime nodejs12
- รันไทม์เป้าหมายของฟังก์ชันนี้--allow-unauthenticated
- อนุญาตให้การเข้าถึงแบบสาธารณะเรียกใช้ฟังก์ชัน
ระบบจะแจ้งให้คุณเปิดใช้ Cloud Functions API พิมพ์ y
เพื่อเปิดใช้ API
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
เมื่อการทำให้ใช้งานได้เสร็จสมบูรณ์แล้ว คุณจะเห็นข้อมูลต่อไปนี้ในเอาต์พุต
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 ...
ในหน้าต่างเทอร์มินัล ให้ใช้ curl เพื่อเรียกใช้ปลายทางสาธารณะนี้
curl -X POST https://<your-region-and-project>.cloudfunctions.net/validateTemperature -H "Content-Type:application/json" -d '{"temp":"50"}'
และยืนยันว่าได้ติดตั้งใช้งานฟังก์ชันการทำงานบนระบบคลาวด์เรียบร้อยแล้วโดยยืนยันการตอบกลับที่เหมาะสม
Temperature OK
7 ล้างข้อมูล
หากต้องการหลีกเลี่ยงการเรียกเก็บเงินโดยไม่ตั้งใจ เช่น Cloud Function นี้มีการเรียกใช้โดยไม่ตั้งใจมากกว่าการจัดสรรการเรียกใช้ Cloud Function รายเดือนในแพ็กเกจฟรี คุณสามารถลบ Cloud Function หรือลบโปรเจ็กต์ที่สร้างไว้ในขั้นตอนที่ 2
หากต้องการลบ Cloud Function ให้ไปที่คอนโซล Cloud Function ที่ https://console.cloud.google.com/functions/ ตรวจสอบว่าโปรเจ็กต์ที่คุณสร้างในขั้นตอนที่ 2 เป็นโปรเจ็กต์ที่เลือกอยู่ในปัจจุบัน
เลือกฟังก์ชัน validateTemperature ที่คุณติดตั้งใช้งานในขั้นตอนที่ 6 จากนั้นกด Delete
หากเลือกลบทั้งโปรเจ็กต์ ให้ไปที่ https://console.cloud.google.com/cloud-resource-manager เลือกโปรเจ็กต์ที่สร้างในขั้นตอนที่ 2 แล้วเลือก "ลบ" หากลบโปรเจ็กต์ คุณจะต้องเปลี่ยนโปรเจ็กต์ใน Cloud SDK คุณดูรายการโปรเจ็กต์ทั้งหมดที่ใช้ได้โดยการเรียกใช้ gcloud projects list
8 ยินดีด้วย
ขอแสดงความยินดีที่ทํา Codelab จนเสร็จสมบูรณ์ ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีที่ Cloud Functions รองรับรันไทม์ Node.js และวิธีแก้ไขข้อบกพร่องในเครื่องกับ Cloud Functions
สิ่งที่เราได้พูดถึง
- เฟรมเวิร์กฟังก์ชันสําหรับ Node.js
- สร้างและทดสอบ HTTP Cloud Function ในเครื่อง
- แก้ไขข้อบกพร่องของฟังก์ชัน HTTP จากเครื่อง
- ทำให้ฟังก์ชัน HTTP ใช้งานได้จากเครื่อง