天天看点

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

继续阅读