GCP 雲端主機設定排程每日定時自動開關機節省費用
GCP雲端主機使用一段時間之後,每個月固定會花費一筆雲端費用說多也不多,說少也不少,看VM虛擬主機的規格與容量大小,小的網站平均約NT $700/月,大的網站平均NT $3,500/月,因為這些虛擬主機平常都是沒有在關機的,這樣每一個年度需要的花費是不少錢,看一下虛擬主機的功用,假如是做網站的服務性質工作,那一年365天都應該一直開機;如果是上班時間開機,下班時間關機的功能,可以在GCE的使用上節省一點花費,因為開機就要算錢,關機就可以節省能源的耗費,也可以節省一個月的開支,如果設定每一天早上VM虛擬主機定時自動開機,晚上下班時間沒有人使用,定時自動關機,那就太好了。
查看一下Google Cloud技術文件,真的有這一個設定(Scheduling compute instances with Cloud Scheduler),只是需要花一些時間設定,以下主要是透過Cloud Function、Cloud Scheduler 管理設定自動化的動作,來完成每日定時GCE自動開機與關機的動作,如果一天可以節省1/3時間的使用,一個月就可以節省1/3的成本,接下來看一下參照下方所做的設定:
內容目錄
Google Cloud Functions 建立函式
1.請在Google Cloud Platform 點選 Google Cloud Functions ,點選建立函式
2.基本資訊下方有函式名稱,可以自行keyin您想要的名稱或按照技術手冊上一模一樣名稱(startInstancePubSub) copy貼上,區域可用動,預設值即可,觸發類型選擇Cloud Pub/Sub,最後在下方選擇建立主題。
3.此時跳出建立主題視窗,在主題ID keyin您想要的名稱,也可以跟技術手冊上的名稱一樣,start-instance-event,最後再點選建立主題。
4.回到建立函式的主畫面後,再點選左下方的儲存。
5.儲存剛剛的資料後,再點選左下方的下一步。
6.重點來了,在執行階段Node.js 10的右邊有進入點,是剛剛建立的函式startInstancePubSub ,確認後,左下方的index.js點選後,技術手冊上functions/scheduleinstance/index.js右邊有GitHub分享的程式碼,copy後貼上右邊這個位置。
7.再來滑鼠點選package.json,一樣在技術手冊上的 functions/scheduleinstance/package.json 複製下方的程式碼,貼在右邊空白的位置,最後再按部署。
8.此時正在建立開機函式 startInstancePubSub
9.回到Cloud Functions主畫面中,開機函式startInstancePubSub已完成。
10.接下來同樣的作法,要新增關機的函式stopInstancePubSub,新增名稱、選擇觸發類型Cloud Pub/Sub後建立主題。
11.跳出的視窗一樣建立關機的主題ID,keyin名稱stop-instance-event,右下方點選建立主題。
12.再按下儲存。
13.設定名稱後,在按下一步。
14.同樣在關機的函式裡,執行階段Node.js 10的進入點stopinstancePubSub的index.js貼上關機的程式碼 functions/scheduleinstance/index.js。
15.package.json貼上技術手冊上的 functions/scheduleinstance/package.json 程式碼,最後再按部署。
16. Cloud Functions 的函式主畫面就出現關機的函式了。
新增Compute Engine的VM的標籤
17.現在準備需要在Compute Engine的VM 執行個體建立標籤 labels,如果您沒有標籤則需要建立一個,因為晚一點Cloud Scheduler會使用到,如果有現成標籤就使用現成的,例如好記的索引鍵gce-20210329,值就是restart。
Google Cloud Scheduler建立開關機時間
18.設定完上述的步驟之後,最後就是要設定排程自動開機與自動關機的時間,請在Google Cloud Scheduler 設定建立工作
19.跑出選取位置時,如果您不知道選哪裡,可以使用預設值,不用特地選擇在哪裡執行工作,就直接按繼續。
20.虛擬主機可以先設定google cloud scheduler 設定排程觸發時間,因為虛擬主機正在使用當中,等一下可以直接測試排程關機時間,google有技術文件提供,configuring cron job scheules 有五顆***** ,依照分鐘、小時、每個月的第幾日、月份、每週的星期幾,如果您知道linux的crontab 的工作排程,規則差不多,
- 頻率就設定幾時要關機,例如我設定凌晨1:00 關機,就是0 1 * * * ,
- 時區這時候比較重要了,要選對台北標準時間,除非你人在非台北的時區,要不然沒選對就在別的時間關機,
- 目標類型選Pub/Sub
- 主題就是剛剛新增設定的stop-instance-event
- 酬載就是之前剛剛設定的{“zone”:”asia-east1-b”,”label”:”gce-20210329=restart”}前面就是虛擬主機所在的時區,後面就是虛擬主機的標籤之前的新增設定
- 最後再按更新。
21.同理開機排程設定也與關機相同,例如設定每天早上9:00開機,0 9 * * * ,下方選擇與關機相似,最後按更新時就會產生工作排程。
22.回到Google Cloud Scheduler主畫面,可以看到自動關機與開機的工作排程,右邊欄位有個執行按鈕,點選立即執行則會按照您所做的關機或開機,就知道剛剛設定的有沒有問題。也可以設定排程時間離現在最近的時間,就看有沒有動作,如果有動作就表示成功了。
最後如果您想要節省經費,可以設定這樣的省錢方式,很多使用者GCP開機後設定自動爬蟲抓頁面資料,抓完一段時間後就自動關機,如果您像這樣設定,可省去很多開機後忘記手動關機的費用。
Cloud Scheduler 的計費方式按用量的方式付費,可參考cloud scheduler定價 ,位於最下方,如果像我這樣的每日自動開關機一次,且只有一台虛擬主機則不需要付費,除非您一個帳號使用很多虛擬主機,太多設定排程開關機,還是會付一點點的費用。
如果您可以使用在GCP內虛擬主機(Linux或Windows作業系統)自動排程關機,Linux使用crontab排程關機,Windows使用工作排程器來自動關機,但是無法設定自動開機,要怎麼做? 就是用上方的Cloud Functions與Cloud Scheduler來設定每日自動開機,是比較好的方式。