1. ภาพรวม
Google Cloud Functions คือแพลตฟอร์มการประมวลผลแบบ Serverless ที่ขับเคลื่อนด้วยเหตุการณ์ Cloud Functions ช่วยให้คุณเขียนโค้ดได้โดยไม่ต้องกังวลเรื่องการจัดสรรทรัพยากรหรือการปรับขนาดเพื่อรองรับข้อกำหนดที่เปลี่ยนแปลงไป
Cloud Functions ที่เขียนด้วย JavaScript จะทำงานในสภาพแวดล้อม Node.js บน Google Cloud Platform คุณเรียกใช้ Cloud Function ในรันไทม์ Node.js มาตรฐานใดก็ได้เพื่อเปิดใช้การพกพาและการทดสอบในเครื่อง
คำแนะนำแบบทีละขั้นตอน
ใน Codelab นี้ คุณจะได้สร้าง Cloud Function สำหรับ Node.js ที่รายงานว่าอุณหภูมิที่ระบุอยู่ในระดับที่ยอมรับได้หรือร้อนเกินไป คุณจะสร้าง ทดสอบ และแก้ไขข้อบกพร่องของ Cloud Function โดยใช้ Visual Studio Code ในเครื่อง สุดท้าย คุณจะติดตั้งใช้งานฟังก์ชันไปยัง Google Cloud Platform
สิ่งที่คุณจะได้เรียนรู้
- Functions Framework สำหรับ Node.js
- สร้างและทดสอบ HTTP Cloud Function ในเครื่อง
- แก้ไขข้อบกพร่องของฟังก์ชัน HTTP จากเครื่องของคุณ
- ทำให้ฟังก์ชัน HTTP ใช้งานได้จากเครื่องของคุณ
2. การตั้งค่าและข้อกำหนด
ข้อกำหนดเบื้องต้น
- Cloud SDK
- โค้ด Visual Studio
- Node.js 8.6.0 ขึ้นไป (หากต้องการติดตั้ง Node.js ให้ใช้ nvm หากต้องการตรวจสอบเวอร์ชัน ให้เรียกใช้ node –version)
- ทำตามฟังก์ชันแรกของฉัน: คำแนะนำ Node.js ให้เสร็จสมบูรณ์
ค่าใช้จ่าย
แม้ว่า Codelab นี้จะกำหนดให้เรียกใช้ Cloud Function ที่ติดตั้งใช้งานเพียง 1 ครั้ง แต่คุณก็ยังควรอ้างอิงข้อมูลราคาของ Cloud Functions API เพื่อทำความเข้าใจวิธีการเรียกเก็บเงิน
แม้ว่า Google API หลายรายการจะใช้งานได้โดยไม่มีค่าธรรมเนียม แต่การใช้ Google Cloud Platform (เช่น ผลิตภัณฑ์และ API ของ Google Cloud Platform) จะไม่ฟรี คุณต้องมีบัญชีสำหรับการเรียกเก็บเงินที่ใช้งานอยู่จึงจะใช้ Cloud Functions ได้ โปรดทราบว่าผลิตภัณฑ์ Google Cloud Platform (GCP) บางอย่างมีระดับ"ใช้งานได้ฟรีเสมอ" ซึ่งคุณต้องใช้เกินจึงจะมีการเรียกเก็บเงิน เพื่อวัตถุประสงค์ของ Codelab การเรียกใช้ Cloud Functions แต่ละครั้งจะนับรวมในรุ่นฟรีนั้น ตราบใดที่คุณยังคงใช้งานภายในขีดจำกัดโดยรวม (ภายในแต่ละเดือน) คุณก็จะไม่ถูกเรียกเก็บเงิน
3. ติดตั้ง Functions Framework สำหรับ Node.js
Functions Framework สำหรับ Node.js เป็นเฟรมเวิร์ก FaaS (ฟังก์ชันเป็นบริการ) แบบโอเพนซอร์สสำหรับเขียนฟังก์ชัน Node.js แบบพกพาที่ทีม Google Cloud Functions นำมาให้คุณ
Functions Framework ช่วยให้คุณเขียนฟังก์ชันที่มีน้ำหนักเบาซึ่งทำงานในสภาพแวดล้อมที่แตกต่างกันได้มากมาย ซึ่งรวมถึง
- Google Cloud Functions
- คอมพิวเตอร์สำหรับการพัฒนาซอฟต์แวร์ในพื้นที่
- Cloud Run และ Cloud Run บน GKE
- สภาพแวดล้อมที่ใช้ Knative
สร้างแอป Node.js ใหม่
npm init
ขณะยอมรับค่าเริ่มต้น โปรดใช้ index.js เป็นจุดแรกเข้าสำหรับแอป
ตอนนี้ให้ติดตั้ง Functions Framework สำหรับ Node.js
npm install @google-cloud/functions-framework
เปิด package.json ตรวจสอบว่าคุณเห็นเฟรมเวิร์กฟังก์ชันแสดงเป็นทรัพยากร Dependency ดังที่แสดงในตัวอย่างด้านล่าง
"dependencies": {
"@google-cloud/functions-framework": "^1.7.1"
}
ตอนนี้คุณติดตั้ง Functions Framework เรียบร้อยแล้ว ตอนนี้คุณพร้อมที่จะสร้าง 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 ไม่เช่นนั้นจะอ้างอิงถึง zsh (หรือเชลล์ที่คุณใช้)
ในหน้าต่างเทอร์มินัลที่ 2 ให้เรียกใช้คำสั่งต่อไปนี้เพื่อส่งเพย์โหลดอุณหภูมิ 50 ไปยังเซิร์ฟเวอร์ภายในที่ให้บริการฟังก์ชัน validateTemperature
curl -X POST http://localhost:8080 -H "Content-Type:application/json" -d '{"temp":"50"}'
คุณควรได้รับการตอบกลับต่อไปนี้จาก Cloud Function
Temperature OK
ในหน้าต่างเทอร์มินัลที่ 2 ให้ทดสอบฟังก์ชันอีกครั้งโดยส่งเพย์โหลดอุณหภูมิ "สูงเกินไป" ดังที่แสดงด้านล่าง
curl -X POST http://localhost:8080 -H "Content-Type:application/json" -d '{"temp":"120"}'
คุณควรได้รับการตอบกลับต่อไปนี้จาก Cloud Function
Too hot
สุดท้าย ให้ทดสอบฟังก์ชันโดยเรียกใช้ฟังก์ชันดังกล่าวด้วยเพย์โหลดที่ขาดหายไป
curl -X POST http://localhost:8080
คุณควรได้รับการตอบกลับต่อไปนี้จาก Cloud Function
Too hot
ในกรณีที่ไม่มีการระบุอุณหภูมิ ฟังก์ชันไม่ควรแสดงผล "ร้อนเกินไป" คุณพบข้อบกพร่องในโค้ด
อย่าลืมหยุดฟังก์ชันไม่ให้ทำงานโดยกด Ctrl + C ในหน้าต่างเทอร์มินัลแรกที่แสดงฟังก์ชัน
5. แก้ไขข้อบกพร่องของฟังก์ชัน HTTP จากเครื่องภายใน
เปิด Command Palette ใน Visual Studio Code หากใช้ Mac ให้ใช้ Cmd + Shift + P หากใช้ Windows ให้ใช้ Ctrl + Shift + P.
พิมพ์ auto attach ในแผงคำสั่ง แล้วเลือกรายการแรกในรายการ

สำหรับ Codelab นี้ ให้เลือก Only With Flag ตามที่แสดงในรูปภาพด้านล่าง

ตอนนี้ให้โหลดหน้าต่างเทอร์มินัลที่คุณใช้ใน VS Code เพื่อแสดงฟังก์ชันอีกครั้งโดยวางเมาส์เหนือไอคอนคำเตือนที่ปรากฏทางด้านขวาสุด
คลิก Relaunch Terminal

จากหน้าต่างเทอร์มินัลที่โหลดซ้ำ ให้เรียกใช้เฟรมเวิร์กฟังก์ชันอีกครั้งเพื่อแสดงฟังก์ชันโดยใช้คำสั่งต่อไปนี้
node --inspect node_modules/.bin/functions-framework --target=validateTemperature
โดยที่แฟล็ก --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 การไฮไลต์นี้บ่งบอกว่าบรรทัดนี้คือคำสั่งปัจจุบันที่ดีบักเกอร์กำลังประเมิน

วางเมาส์เหนือตัวแปรชั่วคราวเพื่อยืนยันว่าเนื้อหาเป็น 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 Function อีกครั้งโดยเรียกใช้คำสั่งต่อไปนี้โดยไม่มีแฟล็ก –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โดยมีจุดแรกเข้าชื่อ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"}'
และยืนยันว่าฟังก์ชัน Cloud ได้รับการติดตั้งใช้งานเรียบร้อยแล้วโดยการยืนยันการตอบกลับที่เหมาะสม
Temperature OK
7. ล้างข้อมูล
หากต้องการหลีกเลี่ยงการเรียกเก็บเงินโดยไม่ตั้งใจ เช่น Cloud Function นี้ถูกเรียกใช้โดยไม่ตั้งใจมากกว่าการจัดสรรการเรียกใช้ Cloud Function รายเดือนในระดับฟรี คุณสามารถลบ Cloud Function หรือลบโปรเจ็กต์ที่สร้างในขั้นตอนที่ 2 ก็ได้
หากต้องการลบ Cloud Function ให้ไปที่ Cloud Console ของ Cloud Function ที่ https://console.cloud.google.com/functions/ ตรวจสอบว่าโปรเจ็กต์ที่คุณสร้างในขั้นตอนที่ 2 เป็นโปรเจ็กต์ที่เลือกอยู่ในขณะนี้
เลือกฟังก์ชัน validateTemperature ที่คุณติดตั้งใช้งานในขั้นตอนที่ 6 จากนั้นกดลบ
หากเลือกที่จะลบทั้งโปรเจ็กต์ ให้ไปที่ https://console.cloud.google.com/cloud-resource-manager เลือกโปรเจ็กต์ที่สร้างในขั้นตอนที่ 2 แล้วเลือก "ลบ" หากลบโปรเจ็กต์ คุณจะต้องเปลี่ยนโปรเจ็กต์ใน Cloud SDK คุณดูรายการโปรเจ็กต์ทั้งหมดที่มีได้โดยเรียกใช้ gcloud projects list
8. ยินดีด้วย
ขอแสดงความยินดีที่ทำ Codelab เสร็จ ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีที่ Cloud Functions รองรับรันไทม์ Node.js และวิธีการดีบักในเครื่องด้วย Cloud Functions
สิ่งที่เราได้พูดถึง
- Functions Framework สำหรับ Node.js
- สร้างและทดสอบ HTTP Cloud Function ในเครื่อง
- แก้ไขข้อบกพร่องของฟังก์ชัน HTTP จากเครื่องของคุณ
- ทำให้ฟังก์ชัน HTTP ใช้งานได้จากเครื่องของคุณ