環境:ubuntu14.04
boto3 python開發包
需求:
aws的ec2實例是按需收費的, 是按需收費的,不用的時候不收費。 我用ec2主要是用來翻牆的。 所以對我來說一天有將近一半的時間ec2是閒置空轉的狀態。 而閒置的時候又要被aws計時收費。 所以我就想能不能通過aws提供的api, 來實現定時開關機,從而減少不必要的費用。
需求一: 在晚上10:00~第二天早上10:00這段時間, 將ec2實例自動關機, 早上10:00~晚上10:00 這段時間ec2自動開機
需求二: 通過與微信公衆號聯動,發送對應指令, 讓ec2實例實現即時開機/關機, 滿足不時之需。
步驟:
-
需要先在 https://console.aws.amazon.com/iam/home?#users 生成一個用戶(假設這個用戶爲test)的id和secret,用於開發, 記下來,後面會用到
2. 給test用戶添加管理策略,AmazonEC2FullAccess ,賦予改用戶操作ec2的所有權限
3. 安裝boto3模塊, pip install boto3.
4. 開發之前,要爲boto3添加相關配置用於對aws進行操作, 配置內容如下
Alternatively, you can create the credential file yourself. By default, its location is at ~/.aws/credentials
:
[default] aws_access_key_id = YOUR_ACCESS_KEY aws_secret_access_key = YOUR_SECRET_KEY
You may also want to set a default region. This can be done in the configuration file. By default, its location is at ~/.aws/config
:
[default] region=us-east-1
5. 編寫程序,附上代碼sample
sample-start-ec2.py
# coding=utf8
ec2 = boto3.resource('ec2')
instances = ec2.instances.filter(
Filters=[{'Name': 'instance-state-name', 'Values': ['stopped']}])
for ins in instances:
ins.start() # 啓動ec2實例
sample-stop-ec2.py
# coding=utf8
ec2 = boto3.resource('ec2')
instances = ec2.instances.filter(
Filters=[{'Name': 'instance-state-name', 'Values': ['running']}])
for ins in instances:
ins.stop() # 停止ec2實例
sample-check-ec2.py
# coding=utf8
ec2 = boto3.resource('ec2')
for status in ec2.meta.client.describe_instance_status()['InstanceStatuses']:
print status # 檢查ec2實例的狀態
6. 設置定時任務, 定時執行上述腳本
補充:
與微信公衆號的聯動
設計好對應的關鍵詞,如aws-start,發送對應關鍵詞的時候觸發腳本。
關於安全性的建議:
關鍵詞最好設置的複雜一些,不常用一些,最好能隨機生成,主要是因爲目前未認證的公衆號做不到一號專用,其它用戶也會發送一些關鍵詞,如果他們發送的關鍵詞剛好是你設計好aws重啓的關鍵詞,會造成一些不必要的麻煩。當然最好的方法是增加一層權限控制, 限制某些命令只有某些用戶執行纔有效,目前還沒有找到方法。 以後再嘗試。
想像一下,打開微信就能查看ec2實例的狀態 ,能啓動,關閉ec2實例, 是多麼有趣的事情啊。
更多好玩的玩法, 值得探索!
參考文檔:
boto3 文檔 https://boto3.readthedocs.org/en/latest/guide/migrationec2.html
關於aws cli 的使用 http://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-set-up.html
------------------------------------------------------------------------------------------------
作者: hackstoic 文章首發在鄙人個人網站:www.hackstoic.com