我们有几个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)
任何输入都会有很大的帮助。
答案 0 :(得分:1)
默认情况下,在EC2中,从内部停止实例(例如sudo halt
或sudo poweroff
)与通过API停止实例完全相同 - 它们转换为Stopped
状态在控制台中,您不必为它们付费,就好像您已经通过要求API停止它们来阻止它们一样。
命令shutdown -h +15
将要求系统在15分钟内自行关闭,并向所有ttys发出警告。
所以......你可以想象,15分钟前,每个实例从Lambda调用EC2 RunCommand
,而不是你的关闭函数,在每个系统上远程运行shutdown命令。
或者,如果这些系统每天都这样做,只需将关闭放在crontab中。
答案 1 :(得分:0)
除非我误解了这个问题,否则代码几乎与您已有的代码相同。
制作关闭实例的Lambda函数的副本。修改此版本以发送电子邮件(通过SES),而不是实际关闭服务器。安排这个新的Lambda函数在关闭函数运行前15分钟运行。