每当使用无服务器关闭 ec2 时发送电子邮件
send email whenever ec2 is shut down using serverless
我是无服务器框架和 aws 的新手,我需要在 python 上创建一个 lambda 函数,它会在 ec2 关闭时发送电子邮件,但我真的不知道该怎么做使用无服务器。所以,如果有人可以帮助我做到这一点,或者至少给我一些开始的曲目,请。
您想要的是 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(如果 link 损坏:AWS 仪表板 > CloudWatch > 规则)
- 创建新规则。
- 在 "Event Source" select EC2 作为服务名称,"EC2 Instance State-change Notification" 作为事件类型。
- 点击 "Specific States"。你可以在这里简单地 select "shutting-down" 但我也会选择 "stopping" 和 "terminated" 只是为了确定。
- 保存,转到 Lambda,在“触发器”选项卡中添加此事件并开始编写代码。
您可以为此使用 CloudWatch。
您可以创建一个 cloudwatch 规则
- 服务名称 - Ec2
- 事件类型 - EC2 实例更改通知
- 特定状态 - 关闭
然后使用 SNS 目标发送电子邮件。
使用无服务器,您可以像这样为您的函数定义事件触发器...
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。
我是无服务器框架和 aws 的新手,我需要在 python 上创建一个 lambda 函数,它会在 ec2 关闭时发送电子邮件,但我真的不知道该怎么做使用无服务器。所以,如果有人可以帮助我做到这一点,或者至少给我一些开始的曲目,请。
您想要的是 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(如果 link 损坏:AWS 仪表板 > CloudWatch > 规则)
- 创建新规则。
- 在 "Event Source" select EC2 作为服务名称,"EC2 Instance State-change Notification" 作为事件类型。
- 点击 "Specific States"。你可以在这里简单地 select "shutting-down" 但我也会选择 "stopping" 和 "terminated" 只是为了确定。
- 保存,转到 Lambda,在“触发器”选项卡中添加此事件并开始编写代码。
您可以为此使用 CloudWatch。
您可以创建一个 cloudwatch 规则
- 服务名称 - Ec2
- 事件类型 - EC2 实例更改通知
- 特定状态 - 关闭
然后使用 SNS 目标发送电子邮件。
使用无服务器,您可以像这样为您的函数定义事件触发器...
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。