準備
我們将要用到的AWS的服務包括:
- EC2, 即雲端虛拟機,将用于運作我們的腳本。
- Lambda, 用于操作我們的EC2執行個體,即啟動和關閉。
- IAM, AWS Identity and Access Management, 用于賦予Lambda函數操作我們EC2執行個體的權限。
- Cloud Watch, 用于定時執行我們的Lambda函數,達到定時開關機的效果。
1:下面先建好EC2 後,就可以建IAM role 了,注意在建role 的時候,要先建立policy:

在建立政策頁籤,将以下JSON内容複制粘貼:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "arn:aws:logs:*:*:*"
},
{
"Effect": "Allow",
"Action": [
"ec2:Start*",
"ec2:Stop*"
],
"Resource": "*"
}
]
}
建立好policy 後,就可以建立role 了,這個role 建立的時候,添加這個policy, 就可以啦。
2: 下面開始建立lambda:
按上面的iam 的role 加進去後,點選" 建立函數", 然後點選下圖的 “代碼源”裡面的 lambda_function.py, 把下面的代碼copy 進去:
import boto3
region = 'us-west-1'
instances = ['i-12345cb6de4f78g9h', 'i-08ce9b2d7eccf6d26']
ec2 = boto3.client('ec2', region_name=region)
def lambda_handler(event, context):
ec2.stop_instances(InstanceIds=instances)
print('stopped your instances: ' + str(instances))
注意:
重複從 建立函數 開始的以上所有步驟,有以下幾點改變:
- 函數名稱: StartEC2Instances
- Python代碼裡的
替換為ec2.stop_instances
ec2.start_instances
完成後,在Lambda控制台,就能看到我們剛才建立的兩個函數:
3: 下面開始建立cloudwatch 裡面的schedule: (cron 表達是: 0 8 * * ? *) ,aws 會自動算出時間如下,注意,時間是 UTC, 時間要以目前中原標準時間-8.
規則建立好後,可以看到:
測試結果成功,可以看到instance 已經啟動了,可以看一下日志:
參考文章: https://segmentfault.com/a/1190000023101856?utm_source=tag-newest
https://blog.csdn.net/captsinpata/article/details/93501163