使用无服务器

时间:2017-09-20 13:05:52

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

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

3 个答案:

答案 0 :(得分:3)

您可以使用CloudWatch进行此操作。

您可以创建云观察规则

  1. 服务名称 - Ec2
  2. 事件类型 - EC2实例更改通知
  3. 特定州 - 关闭
  4. 然后使用SNS目标发送电子邮件。

答案 1 :(得分:2)

您想要的是 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 Roles页面上轻松创建一个新的。

对于初学者来说,起初看起来似乎势不可挡:

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

答案 2 :(得分:2)

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

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。