# 利用AWS Instance Scheduler 達成EC2 & RDS 自動開/關機
# Date: 2019/April/02
AWS機器上的花費是相當高的, 當專案仍處在開發階段的時候, 這些機器並不需要24小時都維持開啟的狀態.
我們可以透過腳本讓這些EC2或是RDS在指定的時段裡啟動, 下班之後就把機器關掉節省開銷.
# 60 seconds
# AWS幫你準備好了
- 架構
到官方頁面 (opens new window), 可以看到這套懶人包的架構:
用AWS CloudWatch Events (以時間為條件, 類似cronjob, 這邊用來調整觸發頻率) 觸發Lambda程式 (AWS寫好了, 基於python),
去檢查目標的執行狀態, 再按照DynamoDB裡設定的細節執行開關機.
- 使用CloudFormation佈署基礎服務
一樣是在剛剛的官方頁面, 可以看到 Launch solution in the AWS Console的按鈕,
按下去以後就會進到CloudFormation的頁面, 並開始設定細節.
進不去該頁面的同學請先確認你的IAM裡有開啟CloudFormation的權限.
當然, 你也可以用View/Edit template in Designer查看接下來AWS會幫你開啟/創建哪些服務.
下一頁會進到Options, 要特別注意權限的設定. 這邊也能設定排程出錯時的處置選項.
之後就等待CloudFormation將整組服務建立起來.
※註1: Instance Scheduler tag name是之後在EC2/RDS上指定哪些資源要套用自動開關機時會用到的, 這裡指定的是key
- DynamoDB: 調整時間與排程
現在我們要來調整時間與排程了.
進入到DynamoDB -> Tables -> 選擇ConfigTable (不要手動修改StateTable!)-> Items,
能夠看到下面有很多資料. 在這邊我想設定台灣時間09:00到21:00時機器開啟,
首先複製(Actions -> Duplicate)一筆時間資料(period), 再做修改:
接著一樣複製一筆排程(schedule)作修改:
這裡的名稱(name)跟上面 ※註1 提到的tag key有關聯, 等等會提到.
總之, 到這邊整個設定就完成了80%.
- 啟動排程開關機服務
這裡使用EC2u作為範例,
EC2 -> INSTANCES -> 選擇要啟用排程開關機的實例 -> Add/Edit Tags
Key:Value
$(Instance Scheduler tag name):$(DanamoDB->ConfigTable->Items->schedule->name)
2
3
右邊的值只能選擇當初DynamoDB裡面是排程(type = schedule)的資料,
如果給的值是區間名稱(type = period)的話會報錯.
# 60 minutes
# Still building
# References
# 其他參考資料
Amazon. (2018, Feb. 7). AWS Instance Scheduler 正式推出 (opens new window) Amazon Web Service.
Dulare (20188, Feb. 20). AWS Instance Scheduler – quick howto (opens new window) IT HANDYMAN.
Amazon, (2018, October). AWS Instance Scheduler (opens new window) Amazon Web Service Documentation.