定時關閉AWS上的EC2機器例項

黃博文發表於2014-12-26

最近一段時間在做一個產品從阿里雲向亞馬遜雲中國區遷移的前期試驗。亞馬遜中國區並沒有開放免費體驗賬號,使用的每一份資源都要實打實的掏錢。而為了實驗我們使用時一般要啟動好幾臺EC2例項。為了不浪費辛辛苦苦賺的錢,特寫了一個指令碼,在每天晚上6點將所有的EC2例項自動關閉。由於在亞馬遜雲中關閉的EC2例項是不收費的,只收取少量的儲存費用,所以這樣節省不少錢。

為了讓一臺機器可以值守這個任務,所以我們在AWS留一臺機器用來定期執行關閉其它機器的命令。關閉EC2的命令主要是使用AWS提供了awscli來實現。

首先在這臺機器上安裝awscli。這臺機器使用的作業系統是ubuntu 12.04,所以使用其自帶的包管理器可以一鍵安裝。

1
$ apt-get install awscli

安裝完畢後需要配置aws命令列工具的認證。方式有很多,最簡單的是執行aws configure來實現。

1
2
3
4
5
$ aws configure
AWS Access Key ID [None]: YOURACCESSKEY
AWS Secret Access Key [None]: YOURSECRTKEY
Default region name [None]: cn-north-1
Default output format [None]: json

或者你可以在當前使用者根目錄下的.aws目錄中配置認證資訊,詳情請移步http://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html.

接下來在當前使用者根目錄下建立stopinstance.sh檔案,並輸入以下資訊.

stopinstance.sh
1
2
#!/bin/bash
aws ec2 stop-instances --instance-ids i-68726951 i-965ca276 i-377a620e i-d35fa133 i-fe5ca21e

這就是關閉指定EC2例項的命令,--instance-ids後面跟的就是你的EC2例項的id。

把該檔案許可權改為可執行。

1
$ chmod +x stopinstance.sh

最後要讓該命令定時執行,那麼就要藉助crontab這個命令了。

使用crontab -e來編輯batch檔案,在檔案最後加上下行.

1
* 18 * * * ~/stopinstance.sh >> ~/shutdown.log

前五個欄位制定命令執行的時間。第一個是分鐘,第二個是小時,第三個是每月的哪天,第四個是月份,第五個是每週的哪天。配置相當靈活。

這句話是描述了一個batch任務,在每天的下午6點執行,會執行stopinstance.sh指令碼,並把日誌輸出到shutdown.log檔案中。

注意使用crontab執行任務時一定要注意當前機器的時區和你期望執行的時間所用時區是否不同。有關crontab和cron命令的進一步使用請移步http://www.adminschoice.com/crontab-quick-reference

至此,就大功告成了。

相關文章