AWS Chat botで設定したSlackチャンネルに対してAWS SNSから手動でテストメッセージを送信する

AWS ChatbotのCustom notificationsという種類のメッセージをAWS SNSから送信することで疎通確認が楽にできます
2024.02.01

こんばんは、CX事業本部のmorimorikochanです。最近yamlばっかり触ってるので完全にyamlエンジニアになってます。

AWS SNS と AWS Chatbot を連携させて、AWS SNSで受信したメッセージをAWS Chat botを経由してSlackに送信させたい状況 ってよくありますよね!。これの前段にさらに Amazon Event Bridge が配置されることもあると思いますが、そうなると疎通確認でうまくいかなかった場合にどこ(Amazon EventBridgeかAWS SNSか)で失敗したかが見えにくくなると思います。

今回は、そのような場合にまず AWS SNS と AWS Chatbot(Slack) との接続を確かめるために、 AWS SNS から手動でメッセージを送る方法を見つけたので、共有したいと思います。

結論

  • 1.AWS SNS のトピック詳細画面から「メッセージの送信」を押下
  • 2.メッセージ本文の「エンドポイントに送信するメッセージ本文」に対して、以下をペースト
{
    "version": "1.0",
    "source": "custom",
    "content": {
        "description": ":warning: EC2 auto scaling refresh failed for ASG *OrderProcessorServiceASG*! \ncc: @SRE-Team"
    }
}
  • 3.「メッセージの発行」を押下すると、以下のようなメッセージが届いていると思います

aws-chatbot-slack-from-sns-in-manual

背景・説明

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

AWS Chatbot が Amazon SNS メッセージを受信しない問題をトラブルシューティングする | AWS re:Post

と記載があったので当初は手動での送信は無理かなぁと思っていたのですが、AWS Chatbot でサポートされているサービスを見ると、サービスの中にCustom notificationsという種類がありました。

そして、 Custom notifications のミニマムのサンプルがこちらです。

{
    "version": "1.0",
    "source": "custom",
    "content": {
        "description": ":warning: EC2 auto scaling refresh failed for ASG *OrderProcessorServiceASG*! \ncc: @SRE-Team"
    }
}

また、リッチなメッセージのサンプルはこちらです。

  {
    "version": "1.0",
    "source": "custom",
    "id": "c-weihfjdsf",
    "content": {
      "textType": "client-markdown",
      "title": ":warning: Banana Order processing is down!",
      "description": "Banana Order processor application is no longer processing orders. OnCall team has beeen paged.",
      "nextSteps": [
        "Refer to <http://www.example.com|*diagnosis* runbook>",
        "@googlie: Page Jane if error persists over 30 minutes",
        "Check if instance i-04d231f25c18592ea needs to receive an AMI rehydration"
      ],
      "keywords": [
        "BananaOrderIntake",
        "Critical",
        "SRE"
      ]
    },
    "metadata": {
      "threadId": "OrderProcessing-1",
      "summary": "Order Processing Update",
      "eventType": "BananaOrderAppEvent",
      "relatedResources": [
        "i-04d231f25c18592ea",
        "i-0c8c31affab6078fb"
      ],
      "additionalContext": {
        "priority": "critical"
      }
    }
  }

Slackではこんな感じで見えます

slack-message-from-sns-by-manual-2

いずれも、AWS Chatbot の公式ドキュメントの以下の部分に記載があります。

まとめ

  • AWS SNS から AWS Chatbot(Slack) への疎通確認ができるようになりました。
    • EventBridgeの問題かAWS SNSの問題か切り分けができます。
  • うまく送信されているということは、 AWS Chatbot のIAMロールが不足している、AWSのアプリがSlackにインストールされていない、トピックの設定が間違えている、というような問題は発生していないということになりますね
  • 公式ドキュメントはしっかり読み込みましょう👀