شراء حساب Google Cloud: استخدم Cloud Scheduler وتبديل VMVirtual Machine تلقائيًا مع وظيفة السحابة

سحابة 2026-05-30 阅读 9
1

في التشغيل والصيانة السحابية اليومية ، ستواجه العديد من الفرق "ثقب أسود في الميزانية" مؤلم:

الخادم خاملاً.

على سبيل المثال ، يتم استخدام بيئة تطوير الشركة أو بيئة الاختبار أو نظام الإبلاغ الداخلي فقط في غضون 8 إلى 10 ساعات من ساعات العمل أثناء النهار. ولكن نظرًا لأن التشغيل والصيانة كسالى جدًا للقذف ، أو غالبًا ما تنسى إيقاف التشغيل بعد العمل ، غالبًا ما تعمل هذه الخوادم بشكل محموم في الخلفية لمدة 24 ساعة و 365 يومًا.

في وضع الفوترة في Google Cloud (GCP) ، يقوم الجهاز الظاهري بحساب الأموال بالثواني ومواصفات المثيل. هذا يعني،

إذا لم تغلق بعد العمل ، فقد تمثل رسوم الخادم المهدرة طوال الليل أكثر من 60 ٪ من فاتورتك الشهرية

.

الطريقة التقليدية هي كتابة نص Shell معقد ، مع مخطط محلي

Cron

مهمة توقيت. ولكن بمجرد قطع الجهاز المحلي عن الشبكة أو انقطاع التيار الكهربائي ، سيفقد البرنامج النصي.

في البيئة الحديثة لـ Google Cloud ، هناك مزيج ذهبي أنيق بدون خادم:

الاستفادة من Cloud Scheduler (مهمة تخطيط السحابة) مع Cloud Functions (ميزة السحابة)

. إنه مثل "خزانة التبديل السحابية" التلقائية بالكامل. تحتاج فقط إلى استخدام فمك لكتابة بضعة أسطر من الجدول الزمني. ستساعدك Google على إنهاء توقيت الخادم دون شغل أي خادم في الخلفية.

اليوم ، نرفض أي تعاليم رسمية ، ونبدأ مباشرة من القتال الفعلي الخالص ، وسوف تأخذك المقبض إلى هذا الخط الدفاعي المنتظم لتوفير المال على مستوى المصنع الكبير.

المرحلة الأولى: التفكيك العميق ، "نموذج العالم ثلاثي الأبعاد" لمفاتيح التوقيت السحابي

قبل كتابة التعليمات البرمجية ، يجب عليك إنشاء هذا النموذج المادي للتشغيل الآلي والصيانة في عقلك. يتكون خط التجميع بأكمله من مزيج سلس من ثلاثة مكونات أساسية:

Cloud Scheduler: جهاز توقيت مستضاف بالكامل (ما يعادل السحابة crontab). أخبرتها باستخدام قواعد Linux Cron القياسية: "اتصل بي في الساعة 9 صباحًا كل يوم ، واتصل بي في الساعة 8 مساءً كل ليلة". سيرسل إشارة عند النقطة في الوقت المحدد.

Secret Messenger (Pub/Sub Messenger): محطة راديو داخلية آمنة. بعد أن يرن المنبه ، سيتم حزم تعليمات بسيطة (مثل start أو stop) وتسليمها إلى قناة معينة بالراديو.

Cloud Functions: وظيفة Google خفيفة الوزن بدون خادم. عادة ما تكون نائمة تماما (تكلفة 0). بمجرد سماع التعليمات المقابلة في الراديو ، فإنه "يرتفع" على الفور في الخلفية لمدة 0.5 ثانية ، ويتصل بواجهة برمجة تطبيقات Google Cloud لبدء أو إيقاف تشغيل الجهاز الظاهري المستهدف بنقرة واحدة ، ثم يستمر في التدمير المادي في الموقع.

المرحلة الثانية: عشية القتال الفعلي-فتح هوية قانونية (IAM) للروبوتات

في جعل Cloud Functi

قبل نقل الخادم ، يجب أن ننفذ بحزم "مبدأ الحد الأدنى من السلطة" ونقدم له تصريح عمل قانوني بامتياز لمنعه من الإضرار بالأصول الأساسية الأخرى عن طريق الخطأ.

قم بتسجيل الدخول إلى وحدة تحكم GCP وانتقل إلى "IAM and Management"-> "حسابات الخدمة".

انقر على "إنشاء حساب خدمة" واسمه vm-timer-executor.

الضخ الدقيق لأصغر دور: ابحث عن "Compute Instance Admin (v1)" (مدير مثيل الجهاز الظاهري) في صفحة منح الدور. ملاحظة: إذا كان من أجل أمان أكثر صرامة ، يمكنك تخصيص شخصية مخصصة تحتوي فقط على compute.instances.start و compute.instances.stop.

انقر على إنهاء.

المرحلة الثالثة: التمرين القتالي الفعلي 1-كتابة رمز التبديل الأساسي Cloud Functions

نأتي إلى ساحة معركة الحوسبة الأساسية. نريد كتابة رمز Node.js بسيط حتى يتمكن من تلقي الرموز وإعطاء التعليمات إلى الخادم.

ابحث عن صفحة Cloud Functions (الميزات السحابية) وانقر على "إنشاء وظائف".

الإعدادات الأساسية: اسم الوظيفة: vm-auto-switcher. المنطقة: اختر المنطقة الأقرب إلى جهازك الافتراضي (مثل asia-east1 تايوان). نوع المشغلات (Trigger): اختر "Cloud Pub/Sub" من القائمة المنسدلة. انقر على إنشاء موضوع جديد باسم vm-timer-topic.

ضبط معلمة وقت التشغيل: توسيع "وقت التشغيل ، والبناء ، والاتصال ، وإعدادات الأمان" أدناه. في عمود حساب الخدمة ، يجب قطع الحساب الافتراضي ، ويجب تحديد vm-timer-executor الذي قمنا بإنشائه في المرحلة الثانية بدقة.

انقر على التالي للدخول إلى محرر التعليمات البرمجية. اختيار بيئة التشغيل

Node.js 20

(أو أي لغة تعرفها).

ضع

Index. js

يتم إفراغ جميع الرموز الموجودة فيها ، ويتم لصقها على رموز التحكم الصعبة التالية لمعايير بيئة الإنتاج للمصنع الكبير:

جافاسكريبت

Compute = require ("@ google-cloud/compute') ؛

Compute = 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 | |! Action) {

Console. error ("[الإبلاغ عن خطأ في الكارثة] السيرة الذاتية مفقودة! يجب أن تحتوي على zone و instanceName و action! ') ؛

إرجاع؛

}

Const zoneObj = compute.zone(zone) ؛

Const vm = zoneObj.vm(instanceName) ؛

Console. log('[تنشيط التشغيل التلقائي والصيانة] يحاول تنفيذ عملية [${action}] على الجهاز الظاهري [${instanceName}] الموجود في ${zone}...') ؛

جرّب {

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

تعديل لتضمين مسؤول جوجل

الاعتماد على مكتبة Compute:

جسون

{

"Dependencies": {

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

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

}

}

قم بتعديل "وظيفة التنفيذ" في الزاوية اليمنى العليا إلى:

ManageVmStatus

. انقر

”نشر (Deploy)“

.

المرحلة الرابعة: التمرين القتالي الفعلي 2-تكوين Cloud Scheduler لحام مسدس البداية

بعد نشر الوظيفة ، يبدو وكأنه عميل ينتظر بهدوء كلمة السر. الآن ، سنقوم ببناء منبهين سحابي ، أحدهما مسؤول عن الاتصال به في الصباح ، أحدهما مسؤول عن حثه على النوم في الليل.

البحث عن الدخول

Cloud Scheduler (مهمة تخطيط السحابة)

الصفحة.

1. المنبه 1: التكوين من الاثنين إلى الجمعة في الساعة 8:30 صباحًا

انقر

"إنشاء وظيفة (Create job)"

:

الاسم: cron-start-dev-vm.

التردد (Frequency): أدخل تعبير Linux Cron القياسي: 30 8*1-5. (الترجمة: يتم تشغيل الساعة 8:30 صباحًا من الاثنين إلى الجمعة).

المنطقة الزمنية: اختر منطقتك الزمنية المحلية الرئيسية (مثل توقيت شنغهاي ، الصين).

نوع الهدف: اختر Pub/Sub.

الموضوع (Topic): اختيار 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 "}

انقر على إنشاء. حتى الآن ، تم إغلاق الأسلاك الشائكة المغلقة بالكامل بالكامل.

المرحلة الخامسة: مشهد يشهد المعجزة-تمرين اختبار يدوي "ضغط الجسد"

انتهى التكوين ، هل يجب أن ننتظر حتى الساعة 8:30 مساءً لنرى أنه لا يعمل ؟ لا يقامر Dachang Yunwei أبدًا بالحظ ، فنحن نجري مباشرة "اختبار التحفيز الاصطناعي" على الفور.

تأكد من أن جهازك الظاهري المسمى 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 في لحظة انقطاع التيار الكهربائي. يمكن فقط الاحتفاظ ببيانات القرص الثابت القياسي بعد إيقاف التشغيل.

مواصفات تجنب الحفرة للمهندس المعماري: بالنسبة لجميع الخوادم التي ترغب في إضافة قائمة انتظار تشغيل وإيقاف تشغيل منتظمة ، يُمنع منعًا باتًا تخزين أي Loc التي لم تقم بعمل نسخة احتياطية متعددة الوظائف

Al SSD البيانات الأساسية المؤقتة. تأكد من أخذ أصول Persistent Disk بالكامل.

2. احذر من نحيب "كلب العمل الإضافي في وقت متأخر من الليل" (آلية الانصهار الإنسانية)

الأتمتة صعبة للغاية ، وفي بعض الأحيان ردود فعل سلبية. على سبيل المثال ، في الساعة 8:30 مساءً يوم الجمعة ، قامت مجموعة التطوير بأكملها بتغيير الأخطاء بشكل محموم في الخادم من أجل اللحاق بمشروع الطوارئ. ونتيجة لذلك ، وصلت الساعة 8:30. كان Cloud Scheduler مكرسًا للغاية وقاسمًا بمفتاح واحد لإيقاف تشغيل الخادم. ونتيجة لذلك ، تم قطع نصف الكود المكتوب في التطوير مباشرة وفقد الحزمة ، وانهارت عقلية المجموعة بأكملها بشكل مباشر.

تعديل سهل الاستخدام: لا تصدر بشكل أعمى vm.stop() في الكود.

الحل المتقدم: قبل تنفيذ رمز إيقاف التشغيل ، دع الوظيفة تقوم بالكشف الداخلي خطوة واحدة (مثل التحقق من استخدام وحدة المعالجة المركزية للخادم الحالي أو عدد اتصالات الشبكة الداخلية من خلال SSH أو مؤشر المراقبة).

إذا تبين أن معدل إشغال وحدة المعالجة المركزية لا يزال أكبر من 20 ٪ (مما يشير إلى أن شخصًا ما يقوم بإجراء اختبار الضغط أو العمل الإضافي) ، فإن الوظيفة ترسل تلقائيًا رسالة طيران/إشعار مسمار: "بعد مراقبة علامات العمل الإضافي ، سيتم تخطي الإغلاق في وقت متأخر من الليل تلقائيًا ، وسيتم التحقق من التأخير بعد ساعة واحدة". يحتوي الرمز على خط من الدفء ، وهو أعلى إنجاز لمهندسي التشغيل والصيانة الناضجين.

الخلاصة

باستخدام GCP Cloud Scheduler مع Cloud Functions للعب وتبديل الأجهزة الافتراضية تلقائيًا ، يكمن جوهر المستوى الصناعي الأساسي في الواقع في ستة عشر كلمة:

أوامر منتظمة ، التسليم اللاسلكي ، أوامر الوظيفة ، الدفء

.

لقد ودعت تمامًا الحالة الأصلية المتمثلة في التحديق الجسدي ، وبعد الخروج من العمل ، يجب أن تكون قلقًا بشأن استخدام هاتفك المحمول للاتصال بشبكة VPN لإغلاق الخادم يدويًا. استخدم قوة حساب Serverless المجانية تمامًا لإيقاف كل عملة سحابية لا ينبغي إهدارها. دع الآلات تدير الآلات ، هذا هو الموقف الأكثر أصالة وأنيقة لتوفير المال في العصر السحابي الحديث.

1
← 返回新闻中心