AWS Chatbot が Amazon SNS からメッセージを受信しないのはなぜですか?

最終更新日: 2022 年 5 月 31 日

AWS Chatbot が Amazon Simple Notification Service (Amazon SNS) トピックにサブスクライブするようにしました。しかし、Amazon SNS トピックからの通知が AWS Chatbot に到達していません。この問題をトラブルシューティングするにはどうすればよいですか?

簡単な説明

Amazon SNS トピックの通知が AWS Chatbot に到達しない場合、次のいずれかが正しく設定されていません。

  • (Slack のみ) AWS Chatbot と Slack チャネル間の通信チャネル。
  • (Slack と Amazon Chime の場合) Amazon SNS トピックと AWS Chatbot 間の通信チャネル。

解決方法

AWS Chatbot の CloudWatch Logs をオンにする

(Slack のみ) AWS Chatbot と Slack チャネル間の通信チャネルが正しく設定されていることを確認する

Slack チャネルがアーカイブまたは削除されていないことを確認する

アーカイブまたは削除された Slack チャネルはメッセージを受信できません。アーカイブまたは削除された Slack チャンネルのすべてのアプリケーションは非アクティブ化されます。

チャンネルのアーカイブを解除するには、Slack ヘルプセンターの「チャンネルをアーカイブまたは削除する」を参照してください。

注意: Slack チャンネルの削除を取り消すことはできません。サブスクライブされている Slack チャネルが削除された場合、新しい Slack チャネルを作成し、トピックからの通知を受信するように新しいチャネルを設定する必要があります。

AWS Chatbot アプリケーションが Slack ワークスペースにインストールされていることを確認する

account_inactive というエラーメッセージがないかを AWS Chatbot の CloudWatch Logs で確認します。account_inactive エラーメッセージがある場合、AWS Chatbot アプリケーションは Slack ワークスペースにインストールされていません。

Slack ワークスペースに AWS Chatbot アプリケーションをインストールするには、Set up chat clients for AWS Chatbot の手順に従います。

(プライベート Slack チャネルのみ) AWS Chatbot アプリケーションが Slack チャネルに追加されていることを確認する

channel_not_found というエラーメッセージがないかを AWS Chatbot の CloudWatch Logs で確認します。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] (設定済みのクライアント) で、ユースケースに基づいて Slack または Amazon Chime を選択します。

3.    Slack ワークスペース設定で Slack チャネルを選択するか、Amazon Chime ウェブフックリストでお客様のウェブフックを選択します。

4.    [Edit] (編集) を選択します。

5.    [Details] (詳細) ペインの [Topics] (トピック) で、Amazon SNS トピックがリストされていることを確認します。トピックがリストにない場合は、 Amazon SNS トピックを AWS Chatbot に登録する必要があります

AWS Chatbot エンドポイントが Amazon SNS トピックのトピックサブスクリプションとしてリストされていることを確認する

1.    Amazon SNS コンソールを開きます。

2.    左側のナビゲーションペインで、[Topics] (トピック) を選択します。その後、Amazon SNS トピックの名前を選択します。

3.    [Topic subscriptions] (トピックサブスクリプション) で、https://global.sns-api.chatbot.amazonaws.com という AWS Chatbot エンドポイントがリストされていることを確認します。AWS Chatbot エンドポイントがトピックサブスクリプションとしてリストされていない場合は、AWS Chatbot が Amazon SNS トピックをサブスクライブするようにする必要があります。

注意: 設定をテストするには、AWS Chatbot 設定を使用してテスト通知を送信します。

Amazon SNS トピックに手動でメッセージを発行していないことを確認する

AWS Chatbot は、Amazon SNS トピックに手動で発行されるメッセージをサポートしていません。Amazon SNS 通知は、AWS Chatbot でサポートされているサービスのいずれかを介してのみ AWS Chatbot に送信するようにしてください。

Amazon SNS トピックにメッセージを発行している AWS のサービスが AWS Chatbot によってサポートされていることを確認する

Event Received is not supported (受信したイベントはサポートされていません) というエラーメッセージがないかを AWS Chatbot の CloudWatch Logs で確認します。Event Received is not supported (受信したイベントはサポートされていません) というエラーメッセージがある場合、メッセージをトピックに発行するサービスは AWS Chatbot でサポートされていません。

AWS Chatbot でサポートされているサービスの詳細なリストについては、「Using AWS Chatbot with other AWS services」を参照してください。

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] (編集) を選択します。
[アクセスポリシー] セクションを展開し、必要な許可を追加します。

注意: Amazon SNS アクセスポリシーの例については、デベロッパーツールコンソールユーザーガイドの「Amazon SNS トピックの通知を設定する」を参照してください。また、AWS Billing and Cost Management ユーザーガイドの「予算の通知に関する Amazon SNS トピックを作成する」も参照してください。

raw メッセージ配信が Amazon SNS トピックでアクティブ化されていないことを確認する

AWS Chatbot は raw メッセージ配信を受け入れません。raw メッセージ配信が Amazon SNS トピックでアクティブ化されていることを確認するには、次の手順を実行します。

1.    Amazon SNS コンソールを開きます。

2.    左側のナビゲーションペインで、[Topics] (トピック) を選択します。その後、Amazon SNS トピックの名前を選択します。

3.    [Details] (詳細) ペインの [Raw message delivery] (Raw メッセージ配信) で、ステータスが [enabled] (有効) または [disabled] (無効) として表示されていることを確認します。

4.    ステータスが [有効] とリストされている場合は、次の手順を実行して、Amazon SNS トピックでの raw メッセージ配信をオフにします。
[Edit] (編集) を選択します。
[Enable raw message delivery] (raw メッセージ配信の有効化) を選択して、raw メッセージ配信オプションの選択を解除します。
[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 キーを使用するアクセス許可が必要です。

Amazon SNS トピックに 1 秒あたり 10 通の通知を超えるレートでメッセージを発行していないことを確認する

AWS Chatbot で 1 秒あたりに許可されるイベント数は 10 個です。1 秒あたり 10 個を超えるイベントを受信すると、追加のメッセージがスロットリングされます。

イベントがスロットリングされているかどうかを確認するには、Amazon CloudWatch Logs for AWS ChatbotEventsThrottled メトリクスを確認します。

(Amazon EventBridge を使用している場合) EventBridge イベントが入力トランスフォーマーを使用していないことを確認する

AWS Chatbot は EventBridge 入力トランスフォーマーを認識しません。Amazon EventBridge イベントが入力トランスフォーマーを使用していないことを確認するには、次を実行します。

1.    EventBridge コンソールを開きます。

2.    左側のナビゲーションペインで、[Rules] (ルール) を選択します。その後、設定したイベントルールの名前を選択します。

3.    ルールのターゲットとして設定した Amazon SNS トピックの横にあるチェックボックスをオンにします。次に、[詳細の表示] を選択します。

4.    詳細ページの [Input] (入力) セクションに [Input Transformer] (入力トランスフォーマー) がリストされているかどうかを確認します。[Input Transformer] (入力トランスフォーマー) がリストされている場合は、ルールから入力トランスフォーマーを削除します。

注: 詳細については、「Amazon EventBridge ターゲット入力の変換」を参照してください。

(EventBridge を使用している場合) AWS Chatbot がサポートしていない AWS のサービスからイベント通知を EventBridge 経由で送信していないことを確認する

AWS Chatbot は、以下の AWS のサービスから Amazon EventBridge 経由で送信されるイベント通知をサポートしていません。

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