如何设置有关将要关闭的实例的AWS通知?

时间:2017-02-13 21:22:37

标签: python-2.7 amazon-web-services amazon-ec2 aws-lambda amazon-cloudwatch

我们有几个AWS EC2实例,我们为其设置了挂钩到Cloudwatch事件的Lambda函数。一个Lambda函数在上午8:00启动实例,一个在下午6:00关闭它们。我想要的是一种通知用户实例将要关闭的方法,可能是在计划这样做之前15分钟。有没有办法迭代实例并创建一条消息,告诉用户instance1和instance2即将关闭?我们的Lambda函数代码直接来自示例:

import boto3

# Enter the region your instances are in, e.g. 'us-east-1'
region = 'us-east-1'

# Enter your instances here: ex. ['X-XXXXXXXX', 'X-XXXXXXXX']# 
instances = ['X-XXXXXXXX', 'X-XXXXXXXX']

def lambda_handler(event, context):
    ec2 = boto3.client('ec2', region_name=region)
    ec2.start_instances(InstanceIds=instances)
    print 'started your instances: ' + str(instances)

任何输入都会有很大的帮助。

2 个答案:

答案 0 :(得分:1)

默认情况下,在EC2中,从内部停止实例(例如sudo haltsudo poweroff)与通过API停止实例完全相同 - 它们转换为Stopped状态在控制台中,您不必为它们付费,就好像您已经通过要求API停止它们来阻止它们一样。

命令shutdown -h +15将要求系统在15分钟内自行关闭,并向所有ttys发出警告。

所以......你可以想象,15分钟前,每个实例从Lambda调用EC2 RunCommand,而不是你的关闭函数,在每个系统上远程运行shutdown命令。

或者,如果这些系统每天都这样做,只需将关闭放在crontab中。

答案 1 :(得分:0)

除非我误解了这个问题,否则代码几乎与您已有的代码相同。

制作关闭实例的Lambda函数的副本。修改此版本以发送电子邮件(通过SES),而不是实际关闭服务器。安排这个新的Lambda函数在关闭函数运行前15分钟运行。