为什么我的 AWS Chatbot 没有收到来自 Amazon SNS 的消息?

4 分钟阅读
0

我在我的 Amazon Simple Notification Service (Amazon SNS) 主题上订阅了 AWS Chatbot。但是,来自我的 Amazon SNS 主题的通知没有到达 AWS Chatbot。我该如何排查此问题?

简短描述

如果您的 Amazon SNS 主题的通知没有到达您的 AWS Chatbot,说明以下其中一项配置错误:

  • (仅适用于 Slack)AWS Chatbot 和 Slack 通道之间的通信通道。
  • (对于 Slack 和 Amazon Chime)Amazon SNS 主题和 AWS Chatbot 之间的通信通道。

解决方法

为您的 AWS Chatbot 启用 CloudWatch Logs

按照访问适用于 AWS Chatbot 的 Amazon CloudWatch Logs 中的说明进行操作。

(仅适用于 Slack)验证 AWS Chatbot 和 Slack 通道之间的通信通道配置正确无误

确保 Slack 通道未归档或未被删除

归档或删除的 Slack 通道无法接收消息。归档或删除的 Slack 通道中的所有应用程序都将停用。

要取消归档通道,请参阅 Slack 帮助中心中的归档或删除通道

**注意:**您无法取消删除 Slack 通道。如果已订阅的 Slack 通道被删除,您必须创建一个新的 Slack 通道并配置新通道以接收来自主题的通知

确保您的 Slack 工作区中安装了 AWS Chatbot 应用程序

查看您的 AWS Chatbot CloudWatch Logs 中是否有以下错误消息:account_inactive。如果您看到 account_inactive 错误消息,说明未在 Slack 工作区中安装您的 AWS Chatbot 应用程序。

要在 Slack 工作区中安装 AWS Chatbot 应用程序,请按照为 AWS Chatbot 设置聊天客户端中的说明进行操作。

(仅适用于私有 Slack 通道)确保将 AWS Chatbot 应用程序添加到 Slack 通道

查看您的 AWS Chatbot CloudWatch Logs 中是否有以下错误消息:channel_not_found。如果您看到 channel_not_found 错误消息,说明尚未将您的 AWS Chatbot 应用程序添加到私有通道。

要将 AWS Chatbot 添加到私有 Slack 通道,请在私有通道中运行 /invite @AWS 命令。

(对于 Slack 和 Amazon Chime)验证是否正确配置了 Amazon SNS 主题和 AWS Chatbot 之间的通信通道

确保您的 AWS Chatbot 已订阅您的 Amazon SNS 主题

1.    打开 AWS Chatbot 控制台

2.    在 Configured clients (已配置的客户端) 下,根据您的使用案例选择 SlackAmazon Chime

3.    在 Slack workspace configuration (Slack 工作区配置) 中选择您的 Slack 通道,或者在 Amazon Chime Webhook 列表中选择您的 Webhook。

4.    选择 Edit (编辑)

5.    在 Details(详细信息)窗格的 Topics(主题)下,验证是否已列出您的 Amazon SNS 主题。如果未列出该主题,则必须为 AWS Chatbot 订阅您的 Amazon SNS 主题

确保 AWS Chatbot 端点列为 Amazon SNS 主题的主题订阅

1.    打开 Amazon SNS 控制台

2.    从左侧导航窗格中选择 Topics (主题)。然后,选择您的 Amazon SNS 主题的名称。

3.    在 Topic subscriptions(主题订阅)下,确保列出了以下 AWS Chatbot 端点:https://global.sns-api.chatbot.amazonaws.com。如果 AWS Chatbot 端点未列为主题订阅,您必须为 AWS Chatbot 订阅您的 Amazon SNS 主题

**注意:**要测试设置,请使用 AWS Chatbot 配置发送测试通知

确保您没有手动向 Amazon SNS 主题发布消息

AWS Chatbot 不支持手动发布到 Amazon SNS 主题的消息。确保仅通过 AWS Chatbot 支持的服务之一向您的 AWS Chatbot 发送 Amazon SNS 通知。

确保向您的 Amazon SNS 主题发布消息的 AWS 服务受 AWS Chatbot 的支持

查看您的 AWS Chatbot CloudWatch Logs 中是否有以下错误消息:Event Received is not supported(不支持收到的事件)。如果您看到 Event Received is not supported 错误消息,说明 AWS Chatbot 不支持向您的主题发布消息的服务。

有关 AWS Chatbot 支持的服务的完整列表,请参阅将 AWS Chatbot 与其他 AWS 服务结合使用

确保您的 Amazon SNS 主题的访问策略授予另一项 AWS 服务向该主题发布消息所需的权限

1.    打开 Amazon SNS 控制台

2.    从左侧导航窗格中选择 Topics (主题)

3.    选择您为 AWS Chatbot 订阅的主题。然后选择 Edit (编辑)

4.    选择 Access policy (访问策略) 选项卡。然后,查看访问策略的 Statement (声明) 部分。确保该策略允许正确的 AWS 服务运行 SNS:Publish API 操作。

5.    如果您的 Amazon SNS 访问策略不允许正确的服务向您的主题发布事件,请执行以下操作来更新策略:
在主题页面的 Details (详细信息) 部分中,选择 Edit (编辑)
展开 Access policy(访问策略)部分,然后添加所需的权限

**注意:**有关 Amazon SNS 访问策略的示例,请参阅《开发人员工具控制台用户指南》中的为通知配置 Amazon SNS 主题。此外,另请参阅《AWS 账单与成本管理用户指南》中的为预算通知创建 Amazon SNS 主题

确保未在您的 Amazon SNS 主题上激活原始消息传递

AWS Chatbot 不接受原始消息传递。要验证是否已在 Amazon SNS 主题上激活了原始消息传递,请执行以下操作:

1.    打开 Amazon SNS 控制台

2.    从左侧导航窗格中选择 Topics (主题)。然后,选择您的 Amazon SNS 主题的名称。

3.    在 Details (详细信息) 窗格中,Raw message delivery (原始消息传递) 的验证状态为 enabled (已启用) 还是 disabled (已禁用)

4.    如果状态列为 enabled(已启用),则请执行以下操作来关闭 Amazon SNS 主题上的原始消息传递:
选择 Edit(编辑)。
选择 Enable raw message delivery (启用原始消息传递) 以取消选择原始消息传递选项。
选择 Save changes(保存更改)。

(如果您使用的是激活服务器端加密的 Amazon SNS 主题)确保包含所需的 AWS Key Management Service (AWS KMS) 密钥策略权限

您的 AWS KMS 密钥策略必须允许发送消息的服务向您的加密 SNS 主题发布消息。

确保您的 AWS KMS 密钥策略包含以下部分:
**重要提示:**将 events.amazonaws.com 替换为要发布到您的加密 SNS 主题的服务的 AWS 服务委托人

{
  "Sid": "Allow CWE to use the key",
  "Effect": "Allow",
  "Principal": {
    "Service": "events.amazonaws.com"
    },
  "Action": [
    "kms:Decrypt",
    "kms:GenerateDataKey"
  ],
  "Resource": "*"
}

注意:要使用 AWS 管理控制台测试配置,您的 AWS Identity and Access Management (IAM) 角色需要具备使用 AWS KMS 密钥的权限。

确保您不会以高于每秒 10 个通知的速率向 Amazon SNS 主题发布消息

AWS Chatbot 允许每秒 10 个事件。如果每秒收到的事件超过 10 个,那么其他消息就会受到限制。

要验证您的事件是否受到限制,请查看适用于 AWS Chatbot 的 Amazon CloudWatch Logs 中的 EventsThrottled 指标。

(如果您使用的是 Amazon EventBridge)请确保您的 EventBridge 事件不使用输入转换器

AWS Chatbot 无法识别 EventBridge 输入转换器。要验证您的 Amazon EventBridge 事件是否未使用输入转换器,请执行以下操作:

1.    打开 EventBridge 控制台

2.    从左侧导航窗格中选择 Rules (规则)。然后,选择已配置的事件规则的名称。

3.    选中您已配置为规则目标的 Amazon SNS 主题旁边的复选框。然后选择 View details(查看详细信息)。

4.    验证详细信息页面的 Input (输入) 部分下是否列出了 Input Transformer (输入转换器)。如果列出了 Input Transformer (输入转换器),则从规则中删除输入转换器。

**注意:**有关更多信息,请参阅转换 Amazon EventBridge 目标输入

(如果您使用的是 EventBridge)请确保没有通过 EventBridge 从 AWS 服务发送 AWS Chatbot 不支持的事件通知

AWS Chatbot 不支持通过 Amazon EventBridge 从以下 AWS 服务发送的事件通知:

  • Amazon CloudWatch
  • AWS CodeBuild
  • AWS CodeCommit
  • AWS CodeDeploy
  • AWS CodePipeline

相关信息

排查 AWS Chatbot 问题

如何使用 Webhook 将 Amazon SNS 消息发布到 Amazon Chime、Slack 或 Microsoft Teams?

使用 CloudWatch 测试从 AWS 服务向 Amazon Chime 或 Slack 发送的通知

AWS 官方
AWS 官方已更新 2 年前