自动暂停配置集电子邮件发送 - Amazon Simple Email Service

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

自动暂停配置集电子邮件发送

您可以配置 Amazon SES,以将特定于使用特定配置集发送的电子邮件的声誉指标导出到 Amazon CloudWatch。然后,可以使用这些指标来创建特定于这些配置集的 CloudWatch 警报。当这些警报超出特定阈值时,您可以自动暂停使用指定配置集的电子邮件发送,而不会影响您的 Amazon SES 账户的整体电子邮件发送功能。

注意

本节中所述的解决方案暂停单个 AWS 区域中特定配置集的电子邮件发送。如果您从多个区域发送电子邮件,请为要在其中实施此解决方案的每个区域重复执行本节中的过程。

第 1 部分:启用配置集声誉指标的导出

您必须首先启用配置集的声誉指标的导出,然后才能配置 Amazon SES 以自动暂停该配置集的电子邮件发送。

要启用配置集的退回邮件和投诉指标的导出,请完成查看和导出声誉指标中的步骤。

第 2 部分:创建 IAM 角色

配置自动暂停电子邮件发送的第一步是创建可执行 UpdateConfigurationSetSendingEnabled API 操作的 IAM 角色。

创建 IAM 角色
  1. 通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/

  2. 在导航窗格中,选择 Roles(角色)。

  3. 选择 Create role(创建角色)。

  4. Select type of trusted entity (选择受信任实体的类型)下,选择 AWS service (AWS 服务)

  5. 选择将使用此角色的服务下,选择 Lambda。选择 Next: Permissions(下一步: 权限)。

  6. Attach permissions policies(附加权限策略)页面上,选择以下策略:

    • AWS LambdaBasicExecutionRole

    • AmazonSESFullAccess

    提示

    使用策略列表顶部的搜索框可快速找到这些策略。

    请选择 Next: Review(下一步:审核)。

  7. Review(审核)页面上,对于 Name(名称),为角色键入一个名称。选择 Create role(创建角色)。

第 3 部分:创建 Lambda 函数

在创建 IAM 角色之后,便可以创建可暂停配置集的电子邮件发送的 Lambda 函数。

创建 Lambda 函数
  1. 打开 AWS Lambda 控制台,地址:https://console.aws.amazon.com/lambda/

  2. 使用区域选择器来选择要在其中部署此 Lambda 函数的区域。

    注意

    此函数仅暂停您在此步骤中选择的 AWS 区域中的配置集的电子邮件发送。如果您从多个区域发送电子邮件,请为要在其中自动暂停电子邮件发送的每个区域重复执行本节中的过程。

  3. 选择 Create function(创建函数)。

  4. Create function(创建函数)下,选择 Author from scratch(从头开始创作)。

  5. Author from scratch(从头开始创作)下,完成以下步骤:

    • 对于 Name(名称),键入 Lambda 函数的名称。

    • 对于 Runtime(运行时),选择 Node.js 14(或者选择列表中当前提供的版本)。

    • 对于 Role(角色),选择 Choose an existing role(选择现有角色)。

    • 对于 Existing role (现有角色),选择您在第 2 部分:创建 IAM 角色中创建的 IAM 角色。

    选择 Create function(创建函数)。

  6. Function code(函数代码)下,在代码编辑器中粘贴以下代码:

    'use strict'; var aws = require('aws-sdk'); // Create a new SES object. var ses = new aws.SES(); // Specify the parameters for this operation. In this example, you pass the // Enabled parameter, with a value of false (Enabled = false disables email // sending, Enabled = true enables it). You also pass the ConfigurationSetName // parameter, with a value equal to the name of the configuration set for // which you want to pause email sending. var params = { ConfigurationSetName: ConfigSet, Enabled: false }; exports.handler = (event, context, callback) => { // Pause sending for a configuration set ses.updateConfigurationSetSendingEnabled(params, function(err, data) { if(err) { console.log(err.message); } else { console.log(data); } }); };

    将前面的代码中的 ConfigSet 替换为配置集的名称。选择 ‬Save (保存)‭

  7. 选择 Test(测试)。如果 Configure test event(配置测试事件)窗口出现,在 Event name(事件名称)字段中键入一个名称,然后选择 Create(创建)。

  8. 确保页面顶部的通知栏显示 Execution result: succeeded。如果函数执行失败,请执行以下操作:

    • 确认您在第 2 部分:创建 IAM 角色中创建的 IAM 角色包含正确的策略。

    • 确认 Lambda 函数中的代码不包含任何错误。Lambda 代码编辑器会自动突出显示语法错误和其他潜在问题。

第 4 部分:重新启用配置集的电子邮件发送

第 3 部分:创建 Lambda 函数中测试 Lambda 函数的一个副作用是会暂停配置集的电子邮件发送。在大多数情况下,除非 CloudWatch 警报被触发,否则您并不需要暂停配置集的发送功能。

这一部分中的过程可为您的配置集重新启用电子邮件发送。要完成这些过程,您必须安装并配置 AWS Command Line Interface。有关更多信息,请参阅 AWS Command Line Interface 用户指南

重新启用电子邮件发送
  1. 在命令行键入以下命令,为配置集重新启用电子邮件发送:

    aws ses update-configuration-set-sending-enabled \ --configuration-set-name ConfigSet \ --enabled

    在前面的命令中,将 ConfigSet 替换为您想暂停其电子邮件发送的配置集的名称。

  2. 在命令行键入以下命令,确保启用了电子邮件发送:

    aws ses describe-configuration-set \ --configuration-set-name ConfigSet \ --configuration-set-attribute-names reputationOptions

    该命令生成类似于以下示例的输出:

    { "ConfigurationSet": { "Name": "ConfigSet" }, "ReputationOptions": { "ReputationMetricsEnabled": true, "SendingEnabled": true } }

    如果 SendingEnabled 的值为 true,说明该配置集的电子邮件发送已成功重新启用。

第 5 部分:创建 Amazon SNS 主题

要使 CloudWatch 在警报触发时执行 Lambda 函数,必须先创建一个 Amazon SNS 主题并让 Lambda 函数订阅该主题。

创建 Amazon SNS 主题
  1. 通过以下网址打开 Amazon SNS 控制台:https://console.aws.amazon.com/sns/v3/home

  2. 使用区域选择器来选择要在其中自动暂停电子邮件发送的区域。

  3. 在导航窗格中,选择 Topics (主题)

  4. 选择 Create new topic (创建新主题)

  5. Create new topic(创建新主题)窗口中,对于 Topic name(主题名称),为主题键入一个名称。(可选) 在 Display name(显示名称)字段中键入一个更具描述性的名称。

    选择 Create topic(创建主题)

  6. 在主题列表中,选中您在上一步中创建的主题旁的框。在 Actions(操作)菜单上,选择 Subscribe to topic(订阅主题)。

  7. Create subscription(创建订阅)窗口中,进行以下选择:

    • 对于 Protocol(协议),选择 AWS Lambda

    • 对于 Endpoint (终端节点),选择您在第 3 部分:创建 Lambda 函数中创建的 Lambda 函数。

    • 对于 Version or alias(版本或别名),选择 default(原定设置)。

  8. 选择 Create subscription(创建订阅)。

第 6 部分:创建 CloudWatch 警报

本节包含在 CloudWatch 中创建警报的过程,当某一指标达到特定阈值时将触发该警报。警报触发后会向在第 5 部分:创建 Amazon SNS 主题中创建的 Amazon SNS 主题发送通知,然后该主题执行在第 3 部分:创建 Lambda 函数中创建的 Lambda 函数。

创建 CloudWatch 警报
  1. 通过以下网址打开 CloudWatch 控制台:https://console.aws.amazon.com/cloudwatch/

  2. 使用区域选择器来选择要在其中自动暂停电子邮件发送的区域。

  3. 在左侧的导航窗格中,选择警报

  4. 选择 Create Alarm(创建告警)

  5. 创建警报窗口中的 SES 指标 下,选择配置集指标

  6. ses:configuration-set 列中,找到您要为其创建警报的配置集。在 Metric Name(指标名称)下,选择以下选项之一:

    • Reputation.BounceRate – 如果您希望在配置集的整体“查无此人的邮件”率超过您定义的阈值时暂停配置集的电子邮件发送,请选择此指标。

    • Reputation.ComplaintRate – 如果您希望在配置集的总体投诉率超过您定义的阈值时暂停配置集的电子邮件发送,请选择此指标。

    选择 Next(下一步)。

  7. 完成以下步骤:

    • Alarm Threshold(告警阈值)下,对于 Name(名称),键入警报的名称。

    • Whenever: Reputation.BounceRate(每当: Reputation.BounceRate)或Whenever: Reputation.ComplaintRate(每当: Reputation.ComplaintRate)下,指定用于触发警报的阈值。

      注意

      如果 Amazon SES 账户的总体退回邮件率超过 10% 或 Amazon SES 账户的总体投诉率超过 0.5%,则 Amazon SES 账户会自动置于审核状态。若指定了将导致触发 CloudWatch 警报的退回邮件率或投诉率,建议使用远低于这些比率的值,以防止账户置于审核状态。

    • Actions(操作)下,为 Whenever this alarm(每当此告警)选择 State is ALARM(状态为“告警”)。对于 Send notification to (发送通知到),选择您在第 5 部分:创建 Amazon SNS 主题中创建的 Amazon SNS 主题。

    选择 Create Alarm(创建告警)

第 7 部分:测试解决方案

您现在可以测试警报以确保它在进入 ALARM 状态时执行 Lambda 函数。您可以使用 CloudWatch API 中的 SetAlarmState 操作临时更改警报状态。

本节中的过程是可选的,但我们建议您完成这些过程来验证整个解决方案的配置是否正确。

测试解决方案
  1. 在命令行键入以下命令,查看配置集的电子邮件发送状态:

    aws ses describe-configuration-set --configuration-set-name ConfigSet

    如果为配置集启用了发送,您会看到以下输出:

    { "ConfigurationSet": { "Name": "ConfigSet" }, "ReputationOptions": { "ReputationMetricsEnabled": true, "SendingEnabled": true } }

    如果 SendingEnabled 的值为 true,说明该配置集的电子邮件发送目前已启用。

  2. 在命令行键入以下命令,将警报状态临时更改为 ALARM

    aws cloudwatch set-alarm-state \ --alarm-name MyAlarm \ --state-value ALARM \ --state-reason "Testing execution of Lambda function"

    将上述命令中的 MyAlarm 替换为您在第 6 部分:创建 CloudWatch 警报中创建的警报的名称。

    注意

    当您执行此命令时,警报状态会从 OK 切换为 ALARM 并在几秒后切换回 OK。您可以在 CloudWatch 控制台中在警报的 History (历史记录) 选项卡上查看这些状态更改,或者使用 DescribeAlarmHistory 操作查看。

  3. 在命令行键入以下命令,查看配置集的电子邮件发送状态:

    aws ses describe-configuration-set \ --configuration-set-name ConfigSet

    如果 Lambda 函数执行成功,您将看到类似于以下示例的输出:

    { "ConfigurationSet": { "Name": "ConfigSet" }, "ReputationOptions": { "ReputationMetricsEnabled": true, "SendingEnabled": false } }

    如果 SendingEnabled 的值为 false,则将禁用配置集的电子邮件发送,指示 Lambda 函数已成功执行。

  4. 完成第 4 部分:重新启用配置集的电子邮件发送中的步骤,为配置集重新启用电子邮件发送。