# 利用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會幫你開啟/創建哪些服務.

CloudFormation template


下一頁會進到Options, 要特別注意權限的設定. 這邊也能設定排程出錯時的處置選項.
之後就等待CloudFormation將整組服務建立起來.

Parameters

※註1: Instance Scheduler tag name是之後在EC2/RDS上指定哪些資源要套用自動開關機時會用到的, 這裡指定的是key


  • DynamoDB: 調整時間與排程

現在我們要來調整時間與排程了.

DynamoDB page


進入到DynamoDB -> Tables -> 選擇ConfigTable (不要手動修改StateTable!)-> Items,

能夠看到下面有很多資料. 在這邊我想設定台灣時間09:00到21:00時機器開啟,

首先複製(Actions -> Duplicate)一筆時間資料(period), 再做修改:

時間區間

接著一樣複製一筆排程(schedule)作修改:

排程

這裡的名稱(name)跟上面 ※註1 提到的tag key有關聯, 等等會提到.

總之, 到這邊整個設定就完成了80%.


  • 啟動排程開關機服務

這裡使用EC2u作為範例,

EC2 Instances

EC2 -> INSTANCES -> 選擇要啟用排程開關機的實例 -> Add/Edit Tags

Key:Value

$(Instance Scheduler tag name):$(DanamoDB->ConfigTable->Items->schedule->name)
1
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.

Last Updated: 2022/7/7 上午8:34:36