動機
在 AWS 運行 EC2 是以時計費的,但 staging 環境,下班後就沒在使用,能否關機 (省錢)
Survey AWS 有提供兩種方案
- 使用 AWS lambda 定時開啟、關閉 EC2 instances
- EC2 Spot instances (EC2 競價型執行個體)
原本就想玩 lambda,私心先挑方案一,之後再實驗方案二
Lambda New Function
start, stop 設定流程是一樣的,下面只介紹 stop
start 再重複一次流程,把 stop 地方改成 start
Blueprint
先到 AWS Lambda console,選擇 blank function
Triggers
選用 CloudWatch Events,trigger rule 之後再設定
Lambda function
輸入 function name、Runtime 選擇 Python2.7
function code 調整如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
Role
只要設定一次 start, stop 共用
在 role 的下拉選單,選擇 Create a custom role
Policy Document 調整如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
|
Test
設定完畢,要測試設定是否成功
前往 Lambda console -> Functions
點選 Test 按鈕,會跳出輸入參數視窗,因為此 function 不需要接收參數,可以不用理會直接執行測試
請小心,測試時真的執行(哭),如果要測試,就選擇目前狀態做測試,例如:running instance 就測 start instance
CloudWatch
前往 CloudWatch console -> Events -> Create rule
左邊區塊設定 Event Pattern or Schedule(Cron Expression)
選擇 Schedule,使用 Cron expression 設定執行週期
1 2 |
|
* EC2 以時計費(eg.跑一分鐘也收一小時的錢),建議整點開、關
* 使用 UTC 時間,時間要「減8hr」
* 不要怕 cron expressions,AWS 會根據 expression 貼心的產生結果給你 review
右邊設定 target,選擇 Lambda Function,指定要執行哪個 function
最後在設 rule name 就完成了!!
試算
目前狀況
- EC2 Instance:t2.micro
- EBS:2 GB EBS(SSD)
每月花費: $ 0.016 * 24 * 30 + $ 0.12 * 2 = $ 11.76
導入 CloudWatch Events + Lambda
- CloudWatch Events:每月前一百萬次免費
- Lambda:每月前一百萬次免費
- EC2 Instance:t2.micro
- EBS::2 GB EBS(SSD)
每月花費: $ 0.016 * 12 * 20 + $ 0.12 * 2 = $ 4.08
費用少了三分之一,有達到目的,但不知還有沒有其他費用產生,會在持續追蹤
另外 spot instances 也是不錯的選擇,再找機會測試