

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

# 使用 Amazon SNS 发送 Elastic Beanstalk 环境通知
<a name="using-features.managing.sns"></a>

您可以将 AWS Elastic Beanstalk 环境配置为使用亚马逊简单通知服务 (Amazon SNS) Simple Notification Service 将影响您的应用程序的重要事件通知您。要在发生错误或环境运行状况发生变化 AWS 时接收电子邮件，请在创建环境时或之后指定电子邮件地址。

**注意**  
Elastic Beanstalk 使用 Amazon SNS 进行通知。[有关 Amazon SNS 定价的信息，请参阅https://aws.amazon.com/sns/定价/。](https://aws.amazon.com/sns/pricing/)

为环境配置通知时，Elastic Beanstalk 会代表您为环境创建 Amazon SNS 主题。Elastic Beanstalk 必须具有所需的权限才能发送消息到 Amazon SNS 主题。有关更多信息，请参阅 [配置发送通知的权限](#configuration-notifications-permissions)。

当值得注意的[事件](using-features.events.md)发生时，Elastic Beanstalk 会向该主题发送消息。然后，Amazon SNS 则将它收到的消息中继到该主题的订阅者。值得注意的事件包括环境创建错误以及[环境和实例运行状况](health-enhanced.md)的所有更改。针对 Amazon EC2 Auto Scaling 操作（例如，对环境添加和删除实例）的事件和其他信息性事件不会触发通知。

![\[Amazon SNS 通知电子邮件\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/sns-notification-email.png)


您可以在创建环境时或此后的某个时间在 Elastic Beanstalk 控制台中输入电子邮件地址。这样将会创建一个 Amazon SNS 主题并订阅该主题。Elastic Beanstalk 负责管理主题的生命周期，在您的环境终止时或者您在[环境管理控制台](environments-console.md)中删除电子邮件地址时删除主题。

`aws:elasticbeanstalk:sns:topics` 命名空间提供了各种选项，可用于使用配置文件、CLI 或软件开发工具包来配置 Amazon SNS 主题。使用这些方法之一，您可以配置订阅者和终端节点的类型。对于订阅者类型，您可以选择 Amazon SQS 队列或 HTTP URL。

您只能打开或关闭 Amazon SNS 通知。根据环境的大小和构成，发送到主题的通知频率可能较高。要配置在特定情况下发送的通知，您还可以使用其他选项。您可以通过亚马逊[设置事件驱动型规则， EventBridge 这些规则](AWSHowTo.eventbridge.md)在 Elastic Beanstalk 发出符合特定标准的事件时通知您。或者，您可以[将您的环境配置为发布自定义指标](health-enhanced-cloudwatch.md)，并将 [Amazon CloudWatch 警报设置](using-features.alarms.md)为在这些指标达到不健康阈值时通知您。

## 使用 Elastic Beanstalk 控制台配置通知
<a name="configuration-notifications-console"></a>

您可以在 Elastic Beanstalk 控制台中输入电子邮件地址，以便为环境创建 Amazon SNS 主题。

**在 Elastic Beanstalk 控制台中配置通知**

1. 打开 [Elastic Beanstalk](https://console.aws.amazon.com/elasticbeanstalk) 控制台，然后**在 “区域” 列表中，选择您**的。 AWS 区域

1. 在导航窗格中，选择 **Environments**（环境），然后从列表中选择环境的名称。

1. 在导航窗格中，选择 **Configuration**（配置）。

1. 在 **Updates, monitoring, and logging**（更新、监控和日志记录）配置类别中，选择 **Edit**（编辑）。

1. 向下滚动到**电子邮件通知**部分。

1. 输入电子邮箱地址。

1. 要保存更改，请选择页面底部的 **Apply**（应用）。

当您为通知输入电子邮件地址时，Elastic Beanstalk 会为环境创建 Amazon SNS 主题并添加订阅。Amazon SNS 会向订阅的地址发送电子邮件以确认订阅。您必须单击确认电子邮件中的链接才能激活订阅并接收通知。

## 使用配置选项配置通知
<a name="configuration-notifications-namespace"></a>

可以使用 [`aws:elasticbeanstalk:sns:topics` 命名空间](command-options-general.md#command-options-general-elasticbeanstalksnstopics)中的选项为您的环境配置 Amazon SNS 通知。可以使用[配置文件](ebextensions.md)、CLI 或开发工具包来设置这些选项。
+ **通知终端节点** – 要将通知发送到的电子邮件地址、Amazon SQS 队列或 URL。如果您设置此选项，则可为指定终端节点创建 SQS 队列和订阅。如果终端节点不是电子邮件地址，还必须设置 `Notification Protocol` 选项。SNS 会基于 `Notification Endpoint` 的值来验证 `Notification Protocol` 的值。多次设置此选项可创建针对主题的更多订阅。如果您清除此选项，则该主题将被删除。
+ **通知协议** – 用于将通知发送到 `Notification Endpoint` 的协议。此选项默认为 `email`。将此选项设置为 `email-json` 可发送 JSON 格式的电子邮件，设置为 `http` 或 `https` 可将 JSON 格式的通知发布到 HTTP 终端节点，或设置为 `sqs` 可向 SQS 队列发送通知。
**注意**  
AWS Lambda 不支持通知。
+ **通知主题 ARN** – 为环境设置通知终端节点之后，读取此设置以获取 SNS 主题的 ARN。您还可以设置此选项为通知使用现有 SNS 主题。更改此选项或终止环境时，不会删除通过此选项附加到环境的主题。

  要配置 Amazon SNS 通知，您需要具备所需的权限。如果您的 IAM 用户使用 Elastic Bean **AdministratorAccessstalk-AWSElastic Beanstalk** [托管用户策略，那么您应该已经拥有配置 Elastic Bean](AWSHowTo.iam.managed-policies.md) stalk 为您的环境创建的默认 Amazon SNS 主题所需的权限。但是，当您配置 Elastic Beanstalk 无法管理的 Amazon SNS 主题时，则需要将以下策略添加到您的用户角色。

------
#### [ JSON ]

****  

  ```
  {
    "Version":"2012-10-17",		 	 	 
    "Statement": [
      {
        "Effect": "Allow",
        "Action": [
          "sns:SetTopicAttributes",
          "sns:GetTopicAttributes",
          "sns:Subscribe",
          "sns:Unsubscribe",
          "sns:Publish"
        ],
        "Resource": [
          "arn:aws:sns:us-east-2:123456789012:sns_topic_name"
        ]
      }
    ]
  }
  ```

------
+ **通知主题名称** – 设置此选项可自定义用于环境通知的 Amazon SNS 主题的名称。如果已存在同名主题，则 Elastic Beanstalk 会将该主题挂载到环境。
**警告**  
如果您使用 `Notification Topic Name` 将现有 SNS 主题挂载到环境，则将来您终止环境或更改此设置时，Elastic Beanstalk 将会删除该主题。

  如果您更改此选项，`Notification Topic ARN` 也会更改。如果环境已经挂载了主题，则 Elastic Beanstalk 会删除旧主题，并创建新的主题和订阅。

  使用自定义主题名称，您还必须提供外部创建的自定义主题的 ARN。托管用户策略不会自动检测使用自定义名称的主题，因此您必须向 IAM 用户提供自定义 Amazon SNS 权限。使用的策略与用于自定义主题 ARN 的策略相似，但增加以下内容：
  + `Actions` 列表中包括另外两个操作，具体是：`sns:CreateTopic`、`sns:DeleteTopic`
  + 如果您要将`Notification Topic Name`一个自定义主题名称更改为另一个自定义主题名称，则还必须在`Resource`列表中 ARNs 包括两个主题的名称。或者，包含一个涵盖两个主题的正则表达式。这样，Elastic Beanstalk 就有权删除旧主题并创建新主题。

EB CLI 和 Elastic Beanstalk 控制台会对前面的选项应用建议的值。如果您需要使用配置文件来配置相同的项，则必须删除这些设置。有关更多信息，请参阅 [建议值](command-options.md#configuration-options-recommendedvalues)。

## 配置发送通知的权限
<a name="configuration-notifications-permissions"></a>

本部分讨论与使用 Amazon SNS 的通知相关的安全注意事项。有两种截然不同的情况：
+ 使用 Elastic Beanstalk 为您的环境创建的默认 Amazon SNS 主题。
+ 通过配置选项提供外部 Amazon SNS 主题。

Amazon SNS 主题的默认访问策略仅允许主题所有者发布或订阅该主题。但是，通过适当的策略配置，Elastic Beanstalk 可以获得在本节中描述的两种情况之一中向 Amazon SNS 主题发布的权限。以下各子节提供了详细信息。

### 默认主题的权限
<a name="configuration-notifications-permissions-default"></a>

为环境配置通知时，Elastic Beanstalk 会为环境创建 Amazon SNS 主题。Elastic Beanstalk 必须具有所需的权限才能发送消息到 Amazon SNS 主题。如果您的环境使用 Elastic Beanstalk 控制台或 EB CLI 为其生成的[服务角色](iam-servicerole.md)，或者使用您的账户的[监控服务相关角色](using-service-linked-roles-monitoring.md)，则无需执行任何其他操作。这些托管角色包括允许 Elastic Beanstalk 向 Amazon SNS 主题发送消息所需的权限。

但是，如果您在创建环境时提供自定义服务角色，请确保此自定义服务角色包括以下策略。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "sns:Publish"
      ],
      "Resource": [
        "arn:aws:sns:us-east-2:123456789012:ElasticBeanstalkNotifications*"
      ]
    }
  ]
}
```

------

### 外部主题的权限
<a name="configuration-notifications-permissions-external"></a>

[使用配置选项配置通知](#configuration-notifications-namespace) 解释了如何使用其他 Amazon SNS 主题替换 Elastic Beanstalk 提供的 Amazon SNS 主题。如果您替换了主题，Elastic Beanstalk 必须验证您有权发布到此 SNS 主题，您才能将 SNS 主题与环境关联。您应该具有 `sns:Publish`。服务角色使用相同的权限。为验证这一点，Elastic Beanstalk 在您创建或更新环境的操作中，发送测试通知到 SNS。如果此测试失败，则创建或更新环境的尝试也会失败。Elastic Beanstalk 会显示一条消息，解释失败的原因。

如果您为环境提供了自定义服务角色，请确保自定义服务角色包括以下策略，以允许 Elastic Beanstalk 向 Amazon SNS 主题发送消息。在以下代码中，将 *`sns_topic_name`* 替换为您在配置选项中提供的 Amazon SNS 主题的名称。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "sns:Publish"
      ],
      "Resource": [
        "arn:aws:sns:us-east-2:123456789012:sns_topic_name"
      ]
    }
  ]
}
```

------

 有关 Amazon SNS 访问控制的详细信息，请参阅《*Amazon Simple Notification Service 开发人员指南*》中的 [Amazon SNS 访问控制示例案例](https://docs.aws.amazon.com/sns/latest/dg/sns-access-policy-use-cases.html)。