天天看點

Lambda + Cloud Watch + EC2, 在AWS上每天定時啟動關閉執行個體和運作腳本

準備

我們将要用到的AWS的服務包括:

  1. EC2, 即雲端虛拟機,将用于運作我們的腳本。
  2. Lambda, 用于操作我們的EC2執行個體,即啟動和關閉。
  3. IAM, AWS Identity and Access Management, 用于賦予Lambda函數操作我們EC2執行個體的權限。
  4. Cloud Watch, 用于定時執行我們的Lambda函數,達到定時開關機的效果。

1:下面先建好EC2 後,就可以建IAM role 了,注意在建role 的時候,要先建立policy:

Lambda + Cloud Watch + EC2, 在AWS上每天定時啟動關閉執行個體和運作腳本

在建立政策頁籤,将以下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:

Lambda + Cloud Watch + EC2, 在AWS上每天定時啟動關閉執行個體和運作腳本

按上面的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))

注意:

重複從 建立函數 開始的以上所有步驟,有以下幾點改變:

  1. 函數名稱: StartEC2Instances
  2. Python代碼裡的 

    ec2.stop_instances

     替換為 

    ec2.start_instances

完成後,在Lambda控制台,就能看到我們剛才建立的兩個函數:

Lambda + Cloud Watch + EC2, 在AWS上每天定時啟動關閉執行個體和運作腳本
Lambda + Cloud Watch + EC2, 在AWS上每天定時啟動關閉執行個體和運作腳本

3: 下面開始建立cloudwatch 裡面的schedule: (cron 表達是: 0 8 * * ? *) ,aws 會自動算出時間如下,注意,時間是 UTC, 時間要以目前中原標準時間-8.

Lambda + Cloud Watch + EC2, 在AWS上每天定時啟動關閉執行個體和運作腳本

規則建立好後,可以看到:

Lambda + Cloud Watch + EC2, 在AWS上每天定時啟動關閉執行個體和運作腳本

測試結果成功,可以看到instance 已經啟動了,可以看一下日志:

Lambda + Cloud Watch + EC2, 在AWS上每天定時啟動關閉執行個體和運作腳本

參考文章: https://segmentfault.com/a/1190000023101856?utm_source=tag-newest

https://blog.csdn.net/captsinpata/article/details/93501163

繼續閱讀