【问题标题】:send email whenever ec2 is shut down using serverless使用无服务器关闭 ec2 时发送电子邮件
【发布时间】:2018-03-01 13:33:13
【问题描述】:

我是无服务器框架和 aws 的新手,我需要在 python 上创建一个 lambda 函数,该函数将在 ec2 关闭时发送电子邮件,但我真的不知道如何使用无服务器来做到这一点。所以请如果有人可以帮助我做到这一点,或者至少给我一些曲目开始。

【问题讨论】:

    标签: python amazon-web-services amazon-ec2 aws-lambda serverless-framework


    【解决方案1】:

    使用无服务器,您可以像这样为您的函数定义事件触发器...

    functions:
      shutdownEmailer:
        handler: shutdownEmailer.handler
        events:
          - cloudwatchEvent:
              event:
                source:
                  - "aws.ec2"
                detail-type:
                  - "EC2 Instance State-change Notification"
                detail:
                  state:
                    - shutting down
              enabled: true
    

    然后,您可以期望每次发生该事件时都会调用您的 lambda。

    【讨论】:

    • 非常感谢兄弟,这正是我想要的,一个用于设置所有参数的 yml 文件。
    【解决方案2】:

    您可以为此使用 CloudWatch。

    您可以创建 cloudwatch 规则

    1. 服务名称 - Ec2
    2. 事件类型 - EC2 实例更改通知
    3. 特定状态 - 正在关闭

    然后使用 SNS 目标发送电子邮件。

    【讨论】:

      【解决方案3】:

      您想要的是 CloudWatch 事件

      简而言之,CloudWatch 事件能够触发 Lambda 函数并传递如下内容:

      {
        "version": "0",
        "id": "123-456-abc",
        "detail-type": "EC2 Instance State-change Notification",
        "source": "aws.ec2",
        "account": "1234567",
        "time": "2015-11-11T21:36:16Z",
        "region": "us-east-1",
        "resources": [
          "arn:aws:ec2:us-east-1:12312312312:instance/i-abcd4444"
        ],
        "detail": {
          "instance-id": "i-abcd4444",
          "state": "shutting-down"
        }
      

      从那里,您可以在 Lambda 上运行的 Python 代码中解析这些信息。要获取关闭实例的实例 ID,您将使用如下内容:

      instance_id = event["detail"]["instance-id"]
      

      然后您可以在官方 boto3 库的帮助下使用 Amazon SES(简单电子邮件服务)API 并发送电子邮件。见:http://boto3.readthedocs.io/en/latest/reference/services/ses.html#SES.Client.send_email

      当然,您还需要具有必要权限的适当 IAM 角色才能使用附加到您的 Lambda 函数的 SES。您可以在 AWS IAM 角色页面上轻松创建一个新角色。

      对于初学者来说,一开始可能会让人不知所措:

      • 转到https://console.aws.amazon.com/cloudwatch/home?region=us-east-1#rules:action=create(如果链接损坏:AWS 仪表板 > CloudWatch > 规则)
      • 创建新规则。
      • 在“事件源”下选择 EC2 作为服务名称,并选择“EC2 实例状态更改通知”作为事件类型。
      • 单击“特定状态”。您可以在此处简单地选择“关闭”,但我也会选择“停止”和“终止”以确保。
      • 保存,转到 Lambda,在触发器选项卡中添加此事件,然后开始编写代码。

      【讨论】:

      • 谢谢,这真的很有帮助,我将测试所有这些并尝试在无服务器上进行
      猜你喜欢
      • 2017-05-09
      • 1970-01-01
      • 2018-06-25
      • 2018-04-07
      • 2018-06-29
      • 1970-01-01
      • 2018-01-25
      • 1970-01-01
      • 2013-10-17
      相关资源
      最近更新 更多