1. ภาพรวม
Google Cloud Functions เป็นแพลตฟอร์มการประมวลผลแบบ Serverless ที่ขับเคลื่อนด้วยเหตุการณ์ Cloud Functions ช่วยให้คุณเขียนโค้ดได้โดยไม่ต้องกังวลเกี่ยวกับการจัดสรรทรัพยากรหรือการปรับขนาดเพื่อจัดการกับข้อกำหนดที่เปลี่ยนแปลง
Cloud Functions ที่เขียนด้วย JavaScript จะทํางานในสภาพแวดล้อม Node.js บน Google Cloud Platform คุณเรียกใช้ Cloud Function ในรันไทม์ Node.js มาตรฐานใดก็ได้เพื่อเปิดใช้การย้ายข้อมูลและการทดสอบในเครื่อง
คำแนะนำแบบทีละขั้น
ในโค้ดแล็บนี้ คุณจะได้สร้าง Cloud Function สำหรับ Node.js ซึ่งจะรายงานว่าอุณหภูมิที่ระบุนั้นยอมรับได้หรือร้อนเกินไป คุณจะสร้าง ทดสอบ และแก้ไขข้อบกพร่องของ Cloud Function ได้โดยใช้โค้ดของ Visual Studio ในเครื่องของคุณ สุดท้าย คุณจะนำฟังก์ชันไปใช้งานใน Google Cloud Platform
สิ่งที่คุณจะได้เรียนรู้
- เฟรมเวิร์กฟังก์ชันสำหรับ Node.js
- สร้างและทดสอบ HTTP Cloud Function ในเครื่อง
- แก้ไขข้อบกพร่องของฟังก์ชัน HTTP จากเครื่อง
- ทำให้ฟังก์ชัน HTTP ใช้งานได้จากเครื่อง
2. การตั้งค่าและข้อกําหนด
ข้อกำหนดเบื้องต้น
- Cloud SDK
- โค้ด Visual Studio
- Node.js 8.6.0 ขึ้นไป (หากต้องการติดตั้ง Node.js ให้ใช้ nvm เพื่อตรวจสอบเวอร์ชัน เรียกใช้โหนด – เวอร์ชัน)
- อ่านคู่มือ My First Function: Node.js จนจบ
ค่าใช้จ่าย
แม้ว่า Codelab นี้จะกำหนดให้มีการเรียกใช้ Cloud Function ที่ทำให้ใช้งานได้เพียง 1 ครั้ง แต่คุณก็ยังควรอ้างอิงข้อมูลราคาของ Cloud Functions API เพื่อทำความเข้าใจวิธีการเรียกเก็บเงิน
แม้ว่า Google API หลายรายการจะใช้ได้โดยไม่เสียค่าธรรมเนียม แต่การใช้ Google Cloud Platform (เช่น ผลิตภัณฑ์และ API) นั้นจะต้องเสียค่าใช้จ่าย คุณต้องมีบัญชีการเรียกเก็บเงินที่ใช้งานอยู่จึงจะใช้ Cloud Functions ได้ โปรดทราบว่าผลิตภัณฑ์ Google Cloud Platform (GCP) บางรายการมีระดับ "ไม่มีค่าใช้จ่ายเสมอ" ซึ่งคุณต้องใช้งานเกินเกณฑ์จึงจะมีการเรียกเก็บเงิน ตามวัตถุประสงค์ของ Codelab นั้น การเรียกใช้ Cloud Functions แต่ละรายการจะนับรวมอยู่ในรุ่นฟรีดังกล่าว คุณไม่ควรเสียค่าใช้จ่ายใดๆ ตราบใดที่คุณยังอยู่ในวงเงินรวม (ภายในแต่ละเดือน)
3. ติดตั้งเฟรมเวิร์ก Functions สำหรับ Node.js
เฟรมเวิร์กฟังก์ชันสำหรับ 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
เป็นจุดเริ่มต้นสำหรับแอปของคุณ
จากนั้นติดตั้งเฟรมเวิร์กฟังก์ชันสำหรับ 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
เปิดหน้าต่างเทอร์มินัลในโค้ด Visual Studio
เรียกใช้คำสั่งต่อไปนี้
node node_modules/@google-cloud/functions-framework --target=validateTemperature
คำสั่งนี้จะเริ่มต้นเซิร์ฟเวอร์ภายในที่พร้อมเรียกฟังก์ชัน validateTemperature
เมื่อเซิร์ฟเวอร์ได้รับคำขอ HTTP
คุณควรเห็นเอาต์พุตต่อไปนี้ในหน้าต่างเทอร์มินัล
Serving function... Function: validateTemperature URL: http://localhost:8080/
สร้างหน้าต่างเทอร์มินัลที่ 2 ภายใน VS Code โดยคลิกไอคอนเครื่องหมายบวก New Terminal
ในแผงหน้าต่างเทอร์มินัล คุณจะสลับระหว่างหน้าต่างเทอร์มินัลสองหน้าต่างนี้ หน้าต่างแรกสำหรับแสดงฟังก์ชัน และหน้าต่างที่สองสำหรับเรียกใช้ฟังก์ชันโดยใช้ curl
คุณสามารถสลับระหว่างหน้าต่างเทอร์มินัลได้โดยใช้เมนูแบบเลื่อนลง หากหน้าต่างเทอร์มินัลแสดงฟังก์ชันอยู่ รายการแบบเลื่อนลงจะเรียกหน้าต่างนั้นว่า node
มิฉะนั้นจะเรียกว่า 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
ตำแหน่งที่แฟล็ก --inspect
จะบอกให้ Node.js ฟังไคลเอ็นต์การแก้ไขข้อบกพร่อง โปรดดูข้อมูลเพิ่มเติมในเอกสารประกอบของโหนดเกี่ยวกับการแก้ไขข้อบกพร่อง
โปรดทราบว่าคุณกำลังใช้ 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 ไฮไลต์นี้บ่งบอกว่าบรรทัดนี้เป็นข้อความปัจจุบันที่โปรแกรมแก้ไขข้อบกพร่องประเมิน
วางเมาส์เหนือตัวแปรอุณหภูมิเพื่อยืนยันว่าเนื้อหาของตัวแปรคือ 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
ตรวจสอบว่ามีข้อยกเว้นโดยเรียกใช้คำสั่งต่อไปนี้ในหน้าต่างเทอร์มินัลที่สองของคุณ:
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 ใน Cloud Console ที่ https://console.cloud.google.com/functions/ ตรวจสอบว่าโปรเจ็กต์ที่คุณสร้างในขั้นตอนที่ 2 เป็นโปรเจ็กต์ที่เลือกไว้ในปัจจุบัน
เลือกฟังก์ชัน ValidTemperature ที่คุณทำให้ใช้งานได้ในขั้นตอนที่ 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 ใช้งานได้จากเครื่องภายในของคุณ