by Rain Chu | 3 月 27, 2024 | GCP , MIS
要執行該操作GCP中的執行個體的自動開啟以及自動關閉,您需要給予 Compute Engine System service account(服務帳戶) compute.instances.start
和 compute.instances.stop
權限。
錯誤訊息
Compute Engine System service account [email protected] needs to have [compute.instances.start,compute.instances.stop] permissions applied in order to perform this operation.
以下是需要採取的步驟:
找到 Compute Engine System Service Account
打開 Google Cloud Console。
導航到「IAM & Admin」-> 「IAM」。
在右側的窗口中,勾選「Include Google-provided role grants」(包含 Google 提供的角色授權)。
使用搜尋欄 (Ctrl + F) 並輸入「compute-system」找到服務帳戶。服務帳戶的 email 格式為 [email protected]
。
添加權限
點擊服務帳戶旁邊的鉛筆圖示來編輯。
點擊「ADD ANOTHER ROLE」(新增另一個角色)。
在角色過濾器中,輸入「compute」,並選擇:
Compute Instance Admin (v1) – roles/compute.instanceAdmin.v1
或是更精細的權限如 roles/compute.instanceAdmin
、roles/compute.osAdminLogin
。
點擊「SAVE」(儲存)。
等待權限生效 :
新權限生效可能需要幾分鐘。
重要注意事項:
Compute Engine System Service Account 是一個由 Google 管理的特殊服務帳戶,允許 Compute Engine 在您的專案裡進行必要的配置。避免賦予過廣的權限。
如果您只是需要啟動和停止 VM 的權限,選擇更精細的權限來降低風險。
徹底瞭解要賦予的權限,以及它們可能產生的影響。Google Cloud 的 IAM 文件: https://cloud.google.com/iam/docs/ 提供了角色與權限的詳細說明。
如果是在使用像 Cloud Scheduler 這類的服務來啟動或停止 VM,那麼就是該服務所使用的服務帳戶需要這些權限 。
by Rain Chu | 12 月 7, 2023 | GCP , Linux , MIS , Ubuntu
建立一個會自動開機和關閉虛擬機器的排程
值得注意的事項:
主機時間都是 UTC 時間,設定的時候,要記得處理這邊,例如台灣時區是+8,所以設定時間的時候要-8
1.首先設定一個 Compute Engine 的 「執行個體排程」如圖所示
2.建立一個新的執行個體排程
設定在每天18:00到23:00最忙碌的時候多開一台主機
3.將要執行的 VM 個體加入到此排程中
記得建立好排程後,要把適用這個規則的 VM 個體都加入,GCP 的排程才會去處理 VM 的開關
4.執行排程的權限設定
如果你之前沒做過權限設定,那肯定會遇到權限不足的錯誤訊息,這時候要來到 IAM 與管理 -> 身分與存取權管理,並且先勾選「包含 Google 提供的角色授權」,然後選擇「授予存取權」
然後主體要選擇你自己的 compute-system.iam 指派角色則是選擇 Compute 執行個體管理員(v1),如圖所示
建立 Ubuntu or Debian 的 Shell Script 定時執行開關機
1.建立自動開關設定的 Script
#!/bin/bash
SOURCE_CONF="/path/to/a.conf"
TARGET_CONF="/path/to/nginx/nginx.conf"
# 使用 sudo 執行需要 root 權限的命令
sudo cp "$SOURCE_CONF" "$TARGET_CONF"
sudo nginx -s reload
2.可以使用 crontab
命令來檢查和管理定時任務(cron jobs)
加入執行時間、程式碼等設定
# 分 鐘 小時 日期 月份 星期 命令
0 23 * * * /path/to/update_nginx_conf.sh
這樣就可以利用 root 權限運行 Script
其中:
分鐘 :分鐘(0-59)
小時 :小時(0-23,採24小時制)
日期 :一個月中的某天(1-31)
月份 :月份(1-12)
星期 :星期幾(0-7,其中0和7都代表星期日)
命令 :要執行的命令或腳本的絕對路徑
例如,如果您希望每天凌晨 3 點執行一個名為 script.sh
的腳本,您應該這樣寫:
檢查
檢查 crontab
列表 :輸入 crontab -l
來確認您的任務已被添加到 crontab
列表中。
其他方法
at 指令
例如要讓指令碼在明天的 10:00執行,可以執行下面的指令
at 10:00 AM tomorrow /path/to/script.sh
systemd (System and Service Manager)
創建一個 systemd 定時任務檔案。
在定時任務檔案中指定要執行的命令或腳本以及執行時間。
啟用定時任務。
例如:每一分鐘都要執行一次 script.sh
[Unit]
Description=My Script
[Timer]
OnCalendar=*-*-* *:* *
[Service]
ExecStart=/path/to/script.sh
錯誤處理
如果有遇到無法執行權限的話,可以參考下面的文章解決權限問題
結語
這樣設定完成後,GCP自己就會在晚上11點關機、晚上6點開機,而我的腳本則是在晚上11:00 關閉 Nginx 的 upstream,在18:15開啟 upstream server
近期留言