Googleクラウドアカウントの購入: Cloud Schedulerを利用して、クラウド機能とタイミングを合わせて自動的にvmvm仮想マシンを切り替えます。
日常的なクラウド輸送では、多くのチームが「予算ブラックホール」に遭遇しています
サーバーがアイドルです。
例えば、会社の開発環境、テスト環境、あるいは内部のレポートシステムは、通常、昼間の勤務時間の8時間から10時間以内にしか使用されていない。しかし、運送次元は苦労したり、仕事が終わったりしてシャットダウンを忘れたりしているため、これらのサーバは24時間、365日、絶えずバックグラウンドで狂ったように起動していることが多い。
Google Cloud (GCP) の課金モードでは、仮想マシン (Compute Engine) は秒とインスタンス仕様で計算されます。これは、
仕事が終わってもシャットダウンしないと、一晩中無駄にしていたサーバー料金は、毎月の請求書の60% 以上を占めているかもしれません
。
従来のアプローチでは、複雑なシェルスクリプトを作成し、ローカルの
Cron
定時タスク。しかし、地元の機械がネットを切ったり、電源を切ったりすると、スクリプトが抜けてしまう。
Googleクラウドの現代化の生態の中で、優雅な無サーバー (Serverless)黄金の組み合わせがあります。
Cloud schedオイラー (クラウド計画タスク) を利用してCloud title (クラウド機能) と連携します。
。これは全自動の「クラウドスイッチ盤」のようなもので、口を動かして何行かのスケジュールを書くだけで、グーグルはバックグラウンドでサーバーを占有しないという前提で秒レベルでサーバの定時切断を完了します。
今日、私たちは公式な説教を拒否して、純粋な実戦から出発して、手を持ってこの大手工場級の定時的な節約防御線を溶接します。
第一段階: 深さ分解、クラウドタイミングスイッチの「三次元世界モデル」
コードを書く前に、この自動輸送輸送の物理モデルを頭の中に構築しなければならない。パイプライン全体は、次の3つのコアコンポーネントによってシームレスに組み合わせられます
クラウド目覚まし時計: 完全にホストされたタイマー (クラウドcrontabに相当)。標準的なLinux Cron文法で「毎朝9時に呼んで、毎晩8時に呼んでください」と教えてください。時間どおりにクリックすると信号が発信されます。
秘密メッセンジャー (Pub/Subメッセージキュー): 安全なイントラネット無線局。目覚まし時計が鳴ったら、スタートやストップなどの簡単な命令をラジオのあるチャンネルに梱包して配達します。
電気ロボット (Cloud machine): googleの軽量級サーバーレス関数。それは通常完全な休眠状態にあります (0コスト)。ラジオで対応する命令を聞くと、それは瞬時にバックグラウンドで「死体を起こす」0.5秒、googleクラウドのAPIを呼び出してターゲット仮想マシンをワンクリックで起動またはシャットダウンし、その場で物理的に破棄し続ける。
第二段階: 実戦前夜 ― ロボットのために合法的な身分 (IAM) を開く
Cloud Functiを
Onsがサーバーを動かす前に、私達は断固として「最小権限の原則」を貫き、合法的な特権作業証を提出して、その権限が大きすぎて他の核心資産を傷つけないようにしなければなりません。
GCPコンソールにログインし、「IAMと管理」-> 「サービスアカウント」に移動します。
「サービスアカウントを作成」をクリックし、vm-timer-executorと名付けます。
最小ロールを正確に注入する: ロール付与ページで、「Compute Instance Admin (v1) 」 (仮想マシンインスタンス管理者) を検索して選択します。注意: より厳しいセキュリティのために、compute.instances.startとcompute.instances.stopのみを含むカスタムロールをカスタマイズできます。
完了をクリックします。
第三段階: 実戦演習一 -- Cloud machineコアスイッチコードを作成する
我々はコア計算戦場に来た。私たちは非常に簡単なNode.jsコードを書いて、暗号を受信してサーバーに命令を出すことができるようにします。
Cloud title (クラウド機能) ページを検索して、「関数を作成」をクリックします。
基本設定: 関数名: vm-auto-switch。地域 (Region): asia-east1台湾など、仮想マシンに最も近い地域を選択します。トリガータイプ (Trigger): ドロップダウンメニューから「Cloud Pub/Sub」を選択します。クリックして新しいテーマを作成し、vm-timer-topicと名付けます。
実行時パラメータ調整: 下の「実行時、構築、接続、セキュリティ設定」を展開し、サービスアカウント欄でデフォルトアカウントを切り離す必要があります第2段階で構築したvm-timer-executorを正確に選択します。
「次へ」をクリックして、コードエディタに入ります。実行環境の選択
Node.js 20
(またはあなたがよく知っている言語)。
を置く
Index.js
中のコードはすべて空にして、以下の大手工場の生産環境基準のハードコア制御コードを貼り付ける
JavaScript
Const Compute = require('@ google-cloud/compute');
Const compute = new Compute();
Exports.manageVmStatus = async (クラウドデベント) => {
// 1.Pub/Subラジオから送られてきた暗号化された無線信号を強制的に解包する
Const base64Data = クラウドデベント.data.message.data;
Const json s
Tring = Buffer.from(base64Data, 'base64').toString();
Const payload = JSON.parse (JSON string);
// 2.設計図面を正確に抽出する: どこの機械を動かすのですか何をさせたいですか
Const {zone, instanceName, action } = payload;
もしでなければZone | |! インスタ | |! Action) {
コンソール.error('【災害エラー】パラメータが失われました!zone、instanceName、actionを含める必要があります!');
戻る;
}
Const zoneObj = compute.zone(zone);
Const vm = zoneObj.vm(instanceName);
コンソール.log('【自動運送次元アクティベーション】 ${zone} にある仮想マシン [${instanceName}] に対して [${action}] 操作を実行しようとしています。
試みる {
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のみをサポートしています。');
}
} catch (エラー) {
コンソール.error('【物理失敗】実行中にエラーが発生しました: ${error.message}');
}
};
ついでに隣の
パッケージ.json
Google公式を含むように修正しました。
Computeライブラリの依存性:
JSON
{
"ければ": {
"@ Google-cloud/compute": "^ 4.0.0",
"@ Google-cloud/cloudevents-conforence": "^ 0.2.2"
}
}
右上隅の「実行する関数」を次のように変更します
ManageVmStatus
。クリック
「配置」
。
第四段階: 実戦演習二 -- Cloud schedオイラー溶接死定時発令銃を配置する
関数の配備が完了すると、静かに暗号を待つエージェントのようになります。今、私たちは2つのクラウド目覚まし時計を建設します。1つは朝に電源を入れて、もう1つは夜に寝るように催促します。
検索して入ります
Cloud schedオイラー (クラウド計画タスク)
ページ。
1.目覚まし時計1: 月曜日から金曜日の朝8時30分までフルスピードで電源を入れる
クリック
「ジョブの作成 (Create job) 」
:
名前: cron-start-dev-vm。
周波数: 標準のLinux Cron式を入力します。 (翻訳: 毎週月曜日から金曜日までの朝8時30分にトリガー)。
タイムゾーン: あなたの地元のメインタイムゾーン (中国上海時間など) を選択します。
ターゲットタイプ: Pub/Subを選択します。
トピック (Topic): 先ほど作成したvm-timer-topicを選択します。
メッセージ本体 (Message body): これはロボットのコアPayloadに注入され、JSON{ "zone": "asia-east1-a" 、 "instanceName": "my-dev-workstation", "action": "start"}
作成をクリックします。
2.目覚まし時計2: 月曜日から金曜日の夜20時30分まで強制的にシャットダウンするように配置する
もう一度クリックしてジョブを作成します
名前: cron-stop-dev-vm。
周波数: 30 * * 1-5を入力します。 (翻訳: 毎週月曜日から金曜日までの午後20時30分にトリガーされます)。
ターゲットタイプ: Pub/Sub、トピックはまだvm-timer-topicです。
メッセージボディー: actionをシャットダウンコマンドに変更します。JSON{ "zone": "asia-east1-a" 、 "instanceName": "my-dev-workst
Ation ", "action ":" stop "}
作成をクリックします。これまで、全自動で閉じた閉ループ鉄線網は完全にロックされていた。
第五段階: 奇跡の現場を目撃する -- 「肉体圧迫」手動テスト演習
配置が終わったら、私たちは夜の8時半まで馬鹿に待っていて効果がないのでしょうか大手工場の運送次元は運ギャンブルをしたことがないので、私たちは直接現場で「人工触媒テスト」を行った。
My-dev-workstationという名前の仮想マシンが現在グリーンで実行されていることを確認します。
Cloud Schedulerリストページに来ます。
シャットダウンを担当するcron-stop-dev-vmタスクを見つけ、右側の3つのポイントをクリックして、「強制実行」を選択することを躊躇しない。
クリックした瞬間、Cloud Schedulerは強制的に時間制限を迂回し、Pub/Subにシャットダウン信号を送ります。
この時、あなたはすぐに戻ってきます
Compute Engine仮想マシンリスト
。緑がついていたサーバーは、その状態アイコンが人工的な介入なしに、一瞬黄色になったことが不思議にわかるでしょう
ストック
数秒後に完全に灰になります。
Terminated
(電源を切った) スリープ状態です。
関数に行く
ログ
大画面で見ると、私たちが書いたコードの痕跡がはっきりと印刷されています
【成功】仮想マシン [my-dev-workstation] シャットダウン指示の発行に成功し、安全なシャットダウンを開始!
。
大成功です! それ以来、この機械は規則的に仕事をしているアルバイトのように、カードを打つ時に電源を入れ、時に強制的に寝る。
第六段階: 商業級自動運送次元のピット血涙歴
このサーバーなしのアーキテクチャはとても爽快で、お金を節約する効果がすぐに現れます。しかし、本当の企業レベルの大皿環境で安定して生きていくためには、最高設計者として、すぐに案を境界強化して、次の二つの見えない穴を防ぐ必要があります
1. 致命的な「ローカルディスクデータ灰飛煙」の危険性 (GCP特有の深い穴)
多くの初心者が仮想マシンを運転している時、読み書きのスピードをむさぼると、マシンにマウントされます。
ローカルSSD
または、システムに持続不可能な非持続的ディスクとして構成します。
災害発生: GCPの基礎ロジックで、vm.stop() を呼び出して物理的なシャットダウンを実行し、このマシン上のすべてのLocal SSDにマウントされたデータは電源が切れた瞬間、グーグルは物理的なハードウェアから完全に消去されます。標準永続ディスクをマウントしたデータのみが、シャットダウン後に保持されます。
設計者のピット回避規範: 定時的なシャットダウン・キューに参加するサーバは、内部的に多活なバックアップをしていないLocを保管することは厳禁です
Al SSD一時的なコアデータ。全面的にPersistentディスク資産を実行していることを確認します。
2.「深夜残業犬」の泣き声を警戒する (人間的溶断メカニズム)
自動化はあまりにもハードコアで、時にはマイナスのフィードバックをもたらす。例えば、ある金曜日の午後8時半、グループ全体の開発は緊急プロジェクトを追うためにサーバーの中で狂ったバグを修正していた。結果、8時半に到着すると、Cloud schedオイラーは非常に敬業し、冷酷にワンクリックでサーバーを引き揚げて電源を切った開発者が半分書いたコードが直接パケットロスを断ち切って、グループ全体が直接心理的に崩壊した。
ハードコアの人間的なチューニング: コードの中でvm.stopを盲目的に発行してはいけない。
高度な解法: シャットダウン・コードを実行する前に、関数に内部検出を実行させます (SSHや監視指標で現在のサーバのCPU使用率やイントラネット接続数を調べるなど)。
CPU使用率がまだ20% を超えていることを発見した場合 (誰かが圧力測定や残業をしていることを示している) 、関数は自動的に「残業の兆候を監視して、今回の深夜のシャットダウンは自動的にスキップされます一時間遅れてから調べます」。コードは第一線の優しさを残して、成熟した運送設計者の最高の修養である。
まとめ
GCP Cloud schedオイラーを利用してCloud titleと連携して定期的に仮想マシンを自動的に切り替えます。核心的な工業レベルの真髄は実は16文字にあります。
定時発令、無線配達、関数受注、優しさ溶断
。
あなたは、過去の肉体的な監視、仕事が終わった後、携帯電話でVPNを接続してサーバーの原始的な状態に別れを告げた。完全に無料のServerless計算力を使って、無駄にしてはいけないクラウドコインを一枚一枚止めます。機械に機械を管理させることは、現代の雲の原生時代で最も本格的で、最も優雅なお金を節約する姿勢である。
