【问题标题】:How do I set up an AWS notification about an instance that is going to be shut down?如何设置有关将要关闭的实例的 AWS 通知?
【发布时间】:2017-07-02 00:20:18
【问题描述】:

我们有几个 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)

任何意见都会有很大帮助。

【问题讨论】:

  • “通知用户”是什么意思?用户是登录到实例中,还是在运行应用程序?您希望如何通知用户(电子邮件、弹出消息、电击)?
  • 对不起,我应该更清楚。电击消失了,但电子邮件很好......
  • 我只是想知道您为什么不轻松使用 Autoscaling 组?您也可以安排它。

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


【解决方案1】:

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

shutdown -h +15 命令会要求系统在 15 分钟后自行关闭,并向所有 tty 广播警告。

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 我希望避免创建另一个函数;我不确定是否有办法设置自动发送通知。我会试试你的解决方案,我相信它会奏效。
    • 如果您想要更开放一点,您可以将消息发布到 SNS 主题而不是 SES。然后,您可以灵活地选择通知选项。
    猜你喜欢
    • 2022-01-22
    • 2017-08-17
    • 2013-07-11
    • 1970-01-01
    • 1970-01-01
    • 2021-09-09
    • 2017-03-22
    • 2018-11-01
    • 1970-01-01
    相关资源
    最近更新 更多