使用 Amazon SNS 发送 Elastic Beanstalk 环境通知 - AWS Elastic Beanstalk

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

使用 Amazon SNS 发送 Elastic Beanstalk 环境通知

您可以配置 AWS Elastic Beanstalk 环境,以使用 Amazon Simple Notification Service (Amazon SNS) 向您通知影响应用程序的重要事件。要在发生错误或环境运行状况发生变化时接收来自AWS的电子邮件,请在创建环境时或随后指定电子邮件地址。

注意

Elastic Beanstalk 使用 Amazon SNS 进行通知。有关 Amazon SNS 定价的信息,请参阅 https://aws.amazon.com/sns/pricing/

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

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


      Amazon SNS 通知电子邮件

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

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

您只能打开或关闭 Amazon SNS 通知。根据环境的大小和构成,发送到主题的通知频率可能较高。要配置在特定情况下发送的通知,您还可以使用其他选项。您可以使用 Amazon EventBridge 设置事件驱动型规则,它可在 Elastic Beanstalk 发出符合特定标准的事件时通知您。或者,您还可以配置环境以发布自定义指标,并设置 Amazon CloudWatch 警报,以在这些指标达到运行状况不佳阈值时通知您。

使用 Elastic Beanstalk 控制台配置通知

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

在 Elastic Beanstalk 控制台中配置通知
  1. 打开 Elastic Beanstalk 控制台,然后在 Regions(区域)列表中选择您的 AWS 区域。

  2. 在导航窗格中,选择 Environments(环境),然后从列表中选择环境的名称。

    注意

    如果您有多个环境,请使用搜索栏筛选环境列表。

  3. 在导航窗格中,选择 Configuration(配置)。

  4. Updates, monitoring, and logging(更新、监控和日志记录)配置类别中,选择 Edit(编辑)。

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

  6. 输入电子邮箱地址。

  7. 要保存更改,请选择页面底部的 Apply(应用)。

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

使用配置选项配置通知

可以使用 aws:elasticbeanstalk:sns:topics 命名空间中的选项为您的环境配置 Amazon SNS 通知。可以使用配置文件、CLI 或开发工具包来设置这些选项。

  • 通知终端节点 – 要将通知发送到的电子邮件地址、Amazon SQS 队列或 URL。如果您设置此选项,则可为指定终端节点创建 SQS 队列和订阅。如果终端节点不是电子邮件地址,还必须设置 Notification Protocol 选项。SNS 会基于 Notification Endpoint 的值来验证 Notification Protocol 的值。多次设置此选项可创建针对主题的更多订阅。如果您清除此选项,则该主题将被删除。

  • 通知协议 – 用于将通知发送到 Notification Endpoint 的协议。此选项默认为 email。将此选项设置为 email-json 可发送 JSON 格式的电子邮件,设置为 httphttps 可将 JSON 格式的通知发布到 HTTP 终端节点,或设置为 sqs 可向 SQS 队列发送通知。

    注意

    不支持 AWS Lambda 通知。

  • 通知主题 ARN – 为环境设置通知终端节点之后,读取此设置以获取 SNS 主题的 ARN。您还可以设置此选项为通知使用现有 SNS 主题。更改此选项或终止环境时,不会删除通过此选项附加到环境的主题。

    要配置 Amazon SNS 通知,您需要具备所需的权限。如果您的 IAM 用户使用 AdministratorAccess-AWSElasticBeanstalk 托管用户策略,则您应当已拥有配置 Elastic Beanstalk 为您的环境创建的默认 Amazon SNS 主题所需的权限。但是,当您配置 Elastic Beanstalk 无法管理的 Amazon SNS 主题时,则需要将以下策略添加到您的用户角色。

    { "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:CreateTopicsns:DeleteTopic

    • 如果要将 Notification Topic Name 从一个自定义主题名称更改为另一个自定义主题名称,您还必须在 Resource 列表中包含两个主题的 ARN。或者,包含一个涵盖两个主题的正则表达式。这样,Elastic Beanstalk 就有权删除旧主题并创建新主题。

EB CLI 和 Elastic Beanstalk 控制台会对前面的选项应用建议的值。如果您需要使用配置文件来配置相同的项,则必须删除这些设置。有关更多信息,请参阅 建议值

配置发送通知的权限

本部分讨论与使用 Amazon SNS 的通知相关的安全注意事项。有两种截然不同的情况:

  • 使用 Elastic Beanstalk 为您的环境创建的默认 Amazon SNS 主题。

  • 通过配置选项提供外部 Amazon SNS 主题。

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

默认主题的权限

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

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

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

外部主题的权限

使用配置选项配置通知 解释了如何使用其他 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 主题的名称。

{ "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 访问控制示例案例