ซื้อบัญชี Google Cloud: ใช้ Cloud Scheduler เพื่อเปลี่ยนเครื่องเสมือน VM โดยอัตโนมัติเป็นประจำด้วยฟังก์ชันคลาวด์

เมฆ 2026-05-30 阅读 7
cloud

ในการทำงานและการบำรุงรักษาระบบคลาวด์ประจำวันหลายทีมจะพบกับ "หลุมดำด้านงบประมาณ" ที่เจ็บปวด:

เซิร์ฟเวอร์ไม่ทำงาน

ตัวอย่างเช่นสภาพแวดล้อมการพัฒนาของบริษัทสภาพแวดล้อมการทดสอบหรือระบบรายงานภายในมักใช้ภายใน8ถึง10ชั่วโมงของชั่วโมงการทำงานในระหว่างวันเท่านั้นแต่เนื่องจากการดำเนินการและการบำรุงรักษาขี้เกียจเกินไปที่จะโยนหรือมักจะลืมปิดเครื่องหลังเลิกงานเซิร์ฟเวอร์เหล่านี้มักจะเปิดอย่างบ้าคลั่งในพื้นหลังตลอด24ชั่วโมง365วัน

ในโหมดการเรียกเก็บเงินของ Google Cloud (GCP) เครื่องเสมือน (Compute Engine) จะคำนวณเงินตามวินาทีและข้อกำหนดอินสแตนซ์ซึ่งหมายความว่า

หากคุณไม่ปิดเครื่องหลังเลิกงานค่าใช้จ่ายเซิร์ฟเวอร์ที่สูญเปล่าตลอดทั้งคืนอาจคิดเป็นมากกว่า60% ของบิลรายเดือนของคุณโดยตรง

วิธีการดั้งเดิมคือการเขียนสคริปต์เชลล์ที่ซับซ้อนพร้อมกับท้องถิ่น

Cron

กำหนดเวลางานแต่เมื่อเครื่องภายในถูกตัดการเชื่อมต่อหรือตัดไฟสคริปต์จะพลาด

ในระบบนิเวศสมัยใหม่ของ Google Cloud มีการผสมผสานสีทองแบบไม่ใช้เซิร์ฟเวอร์ที่หรูหรา:

ใช้ Cloud Scheduler (Cloud Scheduler) เพื่อทำงานร่วมกับ Cloud Functions (Cloud Functions)

。เปรียบเสมือน "ตู้สวิตช์ระบบคลาวด์" อัตโนมัติเต็มรูปแบบคุณจะต้องเขียนตารางเวลาเพียงไม่กี่บรรทัดจากนั้น Google จะช่วยให้คุณเปิดและปิดเซิร์ฟเวอร์ในไม่กี่วินาทีโดยไม่ต้องใช้เซิร์ฟเวอร์ใดๆในพื้นหลัง

วันนี้เราปฏิเสธสูตรการเทศนาอย่างเป็นทางการโดยเริ่มจากการต่อสู้จริงโดยตรงและนำคุณไปสู่แนวป้องกันประหยัดเงินระดับโรงงานขนาดใหญ่

ขั้นตอนแรก: การรื้อลึก "แบบจำลองโลกสามมิติ" ของสวิตช์จับเวลาบนคลาวด์

ก่อนที่จะเขียนโค้ดด้วยมือคุณต้องสร้างแบบจำลองทางกายภาพนี้สำหรับการทำงานและการบำรุงรักษาอัตโนมัติในใจของคุณทั้งชุดของสายการประกอบประกอบด้วยสามองค์ประกอบหลัก:

Cloud Scheduler: ตัวจับเวลาที่มีการจัดการอย่างสมบูรณ์ (เทียบเท่ากับ crontab บนคลาวด์) คุณใช้ไวยากรณ์ Linux Cron มาตรฐานเพื่อบอกว่า: "โทรหาฉันตอน9โมงเช้าและโทรหาฉันตอน8โมงเย็น" มันจะส่งสัญญาณออกตรงเวลาและคลิก

ผู้ส่งสารลับ (คิวข้อความ Pub/Sub): สถานีวิทยุอินทราเน็ตที่ปลอดภัยหลังจากนาฬิกาปลุกดังขึ้นคำสั่งง่ายๆ (เช่นสตาร์ทหรือสตาร์ท) จะถูกบรรจุและส่งไปยังสถานีวิทยุบางช่อง

หุ่นยนต์ไฟฟ้า (Cloud Functions): ฟังก์ชันที่ไม่มีเซิร์ฟเวอร์ที่มีน้ำหนักเบาของ Google โดยปกติจะอยู่เฉยๆ (ต้นทุน0) เมื่อได้ยินคำสั่งที่เกี่ยวข้องในสถานีวิทยุระบบจะ "เก็บศพ" ในพื้นหลังทันทีเป็นเวลา0.5วินาทีเรียกใช้ Google Cloud API เพื่อเปิดหรือปิดเครื่องเสมือนเป้าหมายด้วยคลิกเดียวจากนั้นทำลายทางกายภาพต่อไป

ขั้นตอนที่สอง: วันก่อนการต่อสู้จริง-เปิดตัวตนทางกฎหมายสำหรับหุ่นยนต์ (IAM)

ทำให้ Cloud Functi

ก่อนที่จะย้ายเซิร์ฟเวอร์เราต้องใช้ "หลักการอำนาจขั้นต่ำ" อย่างเฉียบขาดและให้ใบอนุญาตทำงานตามกฎหมายเพื่อป้องกันไม่ให้มีอำนาจมากเกินไปและทำร้ายทรัพย์สินหลักอื่นๆโดยไม่ได้ตั้งใจ

เข้าสู่คอนโซล GCP และไปที่ "IAM และการจัดการ"-> "บัญชีบริการ (บัญชีบริการ)"

คลิก "สร้างบัญชีบริการ" และตั้งชื่อว่า vm-timer-executor

บทบาทขั้นต่ำที่แม่นยำ: ในหน้าการกำหนดบทบาทให้ค้นหาและเลือก "Compute Instance Admin (v1)" (ผู้ดูแลระบบอินสแตนซ์เครื่องเสมือน) หมายเหตุ: สำหรับการรักษาความปลอดภัยที่เข้มงวดมากขึ้นคุณสามารถปรับแต่งบทบาทที่กำหนดเองซึ่งมีเพียง compute.instances.start และ compute.instances.stop

คลิกเสร็จสิ้น.

ขั้นตอนที่สาม: แบบฝึกหัดการต่อสู้จริง1-เขียนรหัสสวิตช์หลักของ Cloud Functions

เรามาถึงสนามรบคอมพิวเตอร์หลักเราต้องการเขียนโค้ด Node.js แบบเรียบง่ายเพื่อให้สามารถรับรหัสลับและให้คำแนะนำแก่เซิร์ฟเวอร์ได้

ค้นหาและเข้าสู่หน้า Cloud Functions (Cloud Functions) แล้วคลิก "สร้างฟังก์ชัน"

การตั้งค่าพื้นฐาน: ชื่อฟังก์ชัน: vm-auto-switcher 。ภูมิภาค: เลือกภูมิภาคที่ใกล้กับเครื่องเสมือนของคุณมากที่สุด (เช่น asia-east1ไต้หวัน) ประเภททริกเกอร์ (Trigger): เลือก "Cloud Pub/Sub" จากเมนูแบบเลื่อนลงคลิกเพื่อสร้างธีมใหม่ชื่อ vm-timer-topic 。

การปรับพารามิเตอร์รันไทม์: ขยาย "รันไทม์สร้างการเชื่อมต่อและการตั้งค่าความปลอดภัย" ด้านล่างในคอลัมน์บัญชีบริการบัญชีเริ่มต้นจะต้องถูกตัดออกและเราจะต้องเลือกขั้นตอนที่สองของ vm-timer-executor อย่างถูกต้อง

คลิกถัดไปเพื่อไปที่ตัวแก้ไขโค้ดการเลือกสภาพแวดล้อมการทำงาน

Node.js 20

(หรือภาษาใดๆที่คุณคุ้นเคย)

วางไว้

Index.js

รหัสทั้งหมดในนั้นถูกล้างและรหัสควบคุมฮาร์ดคอร์ของมาตรฐานสภาพแวดล้อมการผลิตของโรงงานขนาดใหญ่ต่อไปนี้วางไว้:

จาวาสคริปต์

Const Compute = require('@google-cloud/compute');

Const compute = new Compute();

Exports.manageVmStatus = async (cloudEvent) => {

// 1.บังคับปลดแพ็คสัญญาณวิทยุเข้ารหัสที่ส่งมาจากสถานี Pub/Sub

Const base64Data = cloudEvent.data.message.data;

Const jsonS

Tring = Buffer.from(base64Data, 'base64').toString();

Const payload = JSON.parse(jsonString);

// 2.ดึงภาพวาดการออกแบบอย่างแม่นยำ: คุณต้องการย้ายเครื่องไหน? คุณต้องการให้มันทำอะไร?

Const {zone, instanceName, action } = payload;

ถ้าไม่ใช่ Zone ||! InstanceName ||! การดำเนินการ) {

Console.error ('[รายงานข้อผิดพลาดจากภัยพิบัติ] การอ้างอิงหายไป! ต้องมี zone, instanceName และ action! ');

กลับ;

}

Const zoneObj = compute.zone(zone);

Const vm = zoneObj.vm(instanceName);

Console.log ('[การเปิดใช้งานการทำงานและการบำรุงรักษาอัตโนมัติ] กำลังพยายามดำเนินการ [${action}]...') บนเครื่องเสมือนที่อยู่ใน ${zone} [${instanceName}];

ลอง {

If (action.toLowerCase() === 'start') {

// ดำเนินการบูตด้วยปุ่มเดียว

Await vm.start();

Console.log ('[ความสำเร็จ] เครื่องเสมือน [${instanceName}] คำสั่งเริ่มต้นสำเร็จแล้วและกำลังตื่นขึ้นด้วยความเร็วเต็มที่! ');

} Else if (action.toLowerCase() === 'stop') {

// ดำเนินการปิดเครื่องอย่างปลอดภัยด้วยปุ่มเดียว

Await vm.stop();

Console.log ('[ความสำเร็จ] เครื่องเสมือน [${instanceName}] คำสั่งปิดเครื่องได้รับการออกเรียบร้อยแล้วและไฟดับก็เริ่มขึ้นอย่างปลอดภัย! ');

} ไม่เช่นนั้น {

Console.warn ('[คำเตือน] คำแนะนำการใช้งานที่ไม่รู้จัก: ${action} ฟังก์ชั่นนี้สนับสนุนเฉพาะ start หรือ stop เท่านั้น ');

}

} รับผิดชอบ (ข้อผิดพลาด) {

Console.error ('[ความล้มเหลวทางกายภาพ] พบข้อผิดพลาดระหว่างการดำเนินการ: ${error.message}');

}

};

วางไว้ข้างๆ

Package.json

แก้ไขเพื่อรวม Google อย่างเป็นทางการ

การพึ่งพาไลบรารี Compute:

จาวสคริปต์อ็อบเจ็กต์เนทเวิร์ก

{

"Dependencies": {

"@Google-cloud/compute": "^ 4.0.0",

"@Google-cloud/cloudevents-conformance": "^ 0.2.2"

}

}

แก้ไข "Entry point" ที่มุมขวาบนเป็น:

ManageVmStatus

。คลิก

"การปรับใช้ (Deploy)"

ขั้นตอนที่สี่: แบบฝึกหัดการต่อสู้จริง2-การกำหนดค่า Cloud Scheduler เชื่อมปืนเริ่มต้นเวลาตาย

หลังจากปรับใช้ฟังก์ชันแล้วจะเป็นเหมือนตัวแทนที่รอสัญญาณลับอย่างเงียบๆตอนนี้เรากำลังจะสร้างนาฬิกาปลุกบนคลาวด์สองตัวเครื่องหนึ่งรับผิดชอบในการเรียกให้เปิดในตอนเช้าและอีกเครื่องหนึ่งรับผิดชอบในการกระตุ้นให้นอนในเวลากลางคืน

ค้นหารายการ

Cloud Scheduler (คลาวด์กำหนดการงาน)

หน้าเพจ

1.นาฬิกาปลุก1: กำหนดค่าตั้งแต่วันจันทร์ถึงวันศุกร์เวลา08:30น. ในตอนเช้า

คลิก

"สร้างงาน (Create job)"

:

ชื่อ: cron-start-dev-vm 。

ความถี่ (Frequency): อินพุตนิพจน์ Linux Cron มาตรฐาน: 30 8 * * 1-5。 (แปล: ทริกเกอร์ทุกวันจันทร์ถึงวันศุกร์เวลา8:30น.)

โซนเวลา: เลือกโซนเวลาหลักในท้องถิ่นของคุณ (เช่นเวลาเซี่ยงไฮ้ประเทศจีน)

ประเภทเป้าหมาย: เลือก Pub/Sub 。

หัวข้อ: เลือก vm-timer-topic ที่เราเพิ่งสร้าง

ร่างกายข้อความ: นี่คือ Payload หลักของหุ่นยนต์และวางคำสั่ง JSON ต่อไปนี้อย่างถูกต้อง: JSON{ "zone": "asia-east1-a", "instanceName": "my-dev-workstation", "action": "start"}

คลิกสร้าง

2.นาฬิกาปลุก2: กำหนดค่าให้ปิดเครื่องเวลา20:30น. ในตอนเย็นตั้งแต่วันจันทร์ถึงวันศุกร์

คลิกอีกครั้งเพื่อสร้างงาน:

ชื่อ: cron-stop-dev-vm 。

ความถี่ (Frequency): อินพุต30 20 * * 1-5。 (แปล: ทริกเกอร์ทุกวันจันทร์ถึงวันศุกร์เวลา20:30น.)

ประเภทเป้าหมาย: Pub/Sub ธีมยังคงเป็น vm-timer-topic 。

ร่างกายข้อความ: เปลี่ยนการดำเนินการเป็นคำสั่งปิดระบบ: JSON{ "zone": "asia-east1-a", "instanceName": "my-dev-workst

Ation ", "action ":" stop "}

คลิกสร้างจนถึงขณะนี้ลวดหนามวงปิดที่เปิดและปิดโดยอัตโนมัติได้ถูกล็อคอย่างสมบูรณ์

ขั้นตอนที่5: ฉากที่เป็นพยานถึงปาฏิหาริย์-แบบฝึกหัดทดสอบด้วยตนเอง "การกดเนื้อ"

การกำหนดค่าสิ้นสุดลงเราต้องรออย่างโง่เขลาจนถึง8:30น. ในตอนเย็นเพื่อดูว่ามันไม่ได้ผลหรือไม่? การดำเนินงานและการบำรุงรักษาของ Dachang ไม่เคยเล่นการพนันด้วยโชคและเราได้ทำการ "ทดสอบการเร่งปฏิกิริยาเทียม" ในสถานที่โดยตรง

ตรวจสอบให้แน่ใจว่าเครื่องเสมือนของคุณชื่อ my-dev-workstation อยู่ในสถานะการทำงานสีเขียว

มาที่หน้ารายการ Cloud Scheduler 。

ค้นหางาน cron-stop-dev-vm ที่รับผิดชอบในการปิดเครื่องคลิกสามจุดทางด้านขวาและเลือก "Force run" โดยไม่ลังเล

ในขณะที่คลิก Cloud Scheduler จะบังคับให้ข้ามขีดจำกัดเวลาและส่งสัญญาณปิดเครื่องไปยัง Pub/Sub

ในเวลานี้คุณตัดกลับทันที

รายการเครื่องเสมือน Compute Engine

。คุณจะพบอย่างน่าอัศจรรย์ว่าไอคอนสถานะของเซิร์ฟเวอร์ที่เปิดไฟสีเขียวจะกลายเป็นสีเหลืองทันทีโดยไม่มีการแทรกแซงด้วยตนเอง

Stopping

หลังจากนั้นไม่กี่วินาทีมันจะกลายเป็นสีเทาอย่างสมบูรณ์

Terminated

(ปิด) สถานะไฮเบอร์เนต

ไปที่ฟังก์ชัน

Logs (บันทึก)

เมื่อมองไปที่หน้าจอขนาดใหญ่มีร่องรอยของโค้ดที่เราเพิ่งเขียนไว้อย่างชัดเจน:

[ความสำเร็จ] เครื่องเสมือน [my-dev-workstation] ออกคำสั่งปิดเครื่องสำเร็จและไฟดับก็เริ่มขึ้นอย่างปลอดภัย!

สำเร็จลุล่วงแล้ว! จากนั้นเครื่องนี้จะเหมือนกับคนงานที่ทำงานเป็นประจำเช็คอินและเปิดเครื่องและบังคับให้นอนหลับ

ขั้นตอนที่หก: ประวัติการหลีกเลี่ยงเลือดและน้ำตาของการทำงานและการบำรุงรักษาอัตโนมัติเชิงพาณิชย์

สถาปัตยกรรมแบบไม่ใช้เซิร์ฟเวอร์นี้ใช้งานได้ง่ายมากและผลการประหยัดเงินจะเกิดขึ้นทันทีแต่เพื่อที่จะอยู่รอดอย่างมั่นคงในสภาพแวดล้อมของตลาดระดับองค์กรที่แท้จริงในฐานะหัวหน้าสถาปนิกคุณต้องเสริมสร้างขอบเขตของแผนทันทีเพื่อป้องกันหลุมที่มองไม่เห็นสองหลุมต่อไปนี้:

1.อันตรายที่ซ่อนอยู่ของ "ข้อมูลดิสก์ท้องถิ่น" (หลุมเฉพาะของ GCP)

เมื่อมือใหม่หลายคนเปิดเครื่องเสมือนพวกเขาต้องการความเร็วในการอ่านและเขียนและจะติดตั้งในเครื่อง

SSD ท้องถิ่น (Local SSD)

หรือกำหนดค่าระบบเป็นดิสก์ที่ไม่ยั่งยืน

ภัยพิบัติ: ในตรรกะพื้นฐานของ GCP หากคุณเรียก vm.stop() เพื่อทำการปิดเครื่องทางกายภาพข้อมูลทั้งหมดใน Local SSD ที่ติดตั้งบนเครื่องนี้จะถูกลบออกจากฮาร์ดแวร์ทางกายภาพโดย Google ในขณะที่ไฟฟ้าดับลบออกเฉพาะข้อมูลที่ติดตั้ง Persistent Disk เท่านั้นที่สามารถเก็บไว้ได้หลังจากปิดเครื่อง

ข้อกำหนดการหลีกเลี่ยงหลุมของสถาปนิก: สำหรับเซิร์ฟเวอร์ใดๆที่ต้องการเข้าร่วมคิวสวิตช์ตามกำหนดเวลาห้ามจัดเก็บข้อมูลสำรองเพิ่มเติมโดยเด็ดขาด

Al SSD ข้อมูลหลักชั่วคราวตรวจสอบให้แน่ใจว่าคุณไปที่สินทรัพย์ Persistent Disk ทั้งหมด

2.ระวังการร่ำไห้ของ "สุนัขทำงานล่วงเวลาตอนดึก" (กลไกฟิวส์แบบมนุษย์)

ระบบอัตโนมัติเป็นแบบฮาร์ดคอร์เกินไปและบางครั้งก็นำมาซึ่งข้อเสนอแนะเชิงลบตัวอย่างเช่นในคืนวันศุกร์เวลา08:30น. นักพัฒนาทั้งกลุ่มกำลังเปลี่ยนข้อบกพร่องในเซิร์ฟเวอร์อย่างเมามันเพื่อให้ทันโครงการฉุกเฉินด้วยเหตุนี้ Cloud Scheduler จึงทุ่มเทอย่างมากและปิดเซิร์ฟเวอร์ด้วยคลิกเดียวเป็นผลให้ครึ่งหนึ่งของรหัสที่เขียนโดยนักพัฒนาถูกตัดการเชื่อมต่อโดยตรงและสูญเสียแพ็กเก็ตและทั้งกลุ่มก็พังทลายลงโดยตรง

การปรับแต่งแบบ humanized แบบฮาร์ดคอร์: อย่าปล่อย vm.stop() ในโค้ดแบบสุ่มสี่สุ่มห้า

วิธีแก้ปัญหาขั้นสูง: ก่อนที่รหัสปิดเครื่องจะถูกเรียกใช้ให้ฟังก์ชันทำการตรวจจับภายในขั้นตอนเดียว (เช่นการตรวจสอบการใช้งาน CPU ของเซิร์ฟเวอร์ปัจจุบันหรือจำนวนการเชื่อมต่ออินทราเน็ตผ่าน SSH หรือตัวบ่งชี้การตรวจสอบ)

หากพบว่าอัตราการเข้าพักของ CPU ยังคงมากกว่า20% (หมายความว่ามีคนทำการทดสอบความเครียดหรือทำงานล่วงเวลา) ฟังก์ชันจะส่งการแจ้งเตือนการบิน/Dingding โดยอัตโนมัติ: "หากมีการตรวจสอบสัญญาณของการทำงานล่วงเวลาการปิดเครื่องในช่วงดึกจะข้ามไปโดยอัตโนมัติและความล่าช้าจะเกิดขึ้นหลังจากผ่านไปหนึ่งชั่วโมงตรวจสอบ". รหัสทิ้งความอบอุ่นไว้ซึ่งเป็นการปลูกฝังสูงสุดของสถาปนิกการดำเนินงานและการบำรุงรักษาที่เป็นผู้ใหญ่

สรุป

การใช้ GCP Cloud Scheduler เพื่อร่วมมือกับ Cloud Functions เพื่อเล่นเครื่องเสมือนอัตโนมัติในเวลาปกติสาระสำคัญระดับอุตสาหกรรมหลักคือ16คำ:

คำสั่งเวลาการจัดส่งแบบไร้สายคำสั่งฟังก์ชันฟิวส์ที่อบอุ่น

คุณได้อำลาสถานะเดิมของการทำเครื่องหมายทางกายภาพในอดีตโดยสิ้นเชิงและคุณต้องใช้โทรศัพท์มือถือของคุณเพื่อเชื่อมต่อ VPN เพื่อปิดเซิร์ฟเวอร์ด้วยตนเองหลังเลิกงานใช้พลังการประมวลผล Serverless ฟรีเพื่อยึดเหรียญคลาวด์ทุกเหรียญที่ไม่ควรสูญเปล่าปล่อยให้เครื่องจักรจัดการเครื่องจักรนี่คือท่าทางการประหยัดเงินที่แท้จริงและสง่างามที่สุดในยุคคลาวด์สมัยใหม่

1
← 返回新闻中心