NRIネットコム Blog

NRIネットコム社員が様々な視点で、日々の気づきやナレッジを発信するメディアです

AWS Step Functionsのワークフロー内でAWS ChatbotからSlack通知させようとして気づいたこと①

こんにちは、西本です。気づけば社会人2年目が終わろうとしていて、衝撃を受けています。

今回のテーマについて

早速ですが、Step Functions内での処理の失敗時、何か通知させたりしていますか?メールを飛ばしたり、Slackに通知させている方が多いのではないでしょうか。今回はChatbotを利用して、Slackに通知させようとした時に気づいたことについて紹介できればと思います。

早速今回の本題となる構成について

構成例
一見シンプルに見えて実現できそうな構成ですが、結論から申し上げますとSlackに通知することができませんでした。ここからは順をもって確認していこうと思います。

SNS Topicの作成とChatbotとの関連付け

タイプはスタンダードとして作成します。その他オプションについてはデフォルトのままで検証を実施しました。 SNS Topicの作成後、Chatbotとの関連付けを実施します。

Step Functionsの作成

今回は以下のような定義でワークフローを作成しました。 ※作成したStep Functionsに「sns:Publish」の権限を付与しておくこと。

{
  "Comment": "Query_function_flow",
  "StartAt": "NotificationToSlack",
  "TimeoutSeconds": 600,
  "States": {
    "NotificationToSlack": {
      "Type": "Task",
      "Resource": "arn:aws:states:::sns:publish",
      "Parameters": {
        "TopicArn": "arn:aws:sns:ap-northeast-1:123456789012:techblog-sf-slack",
        "Message": "techblog notification"
      },
      "Next": "SuccessState"
    },
    "SuccessState": {
      "Type": "Succeed"
    }
  }
}

実際に動作確認をしてみる

環境の用意が済んだので、実際に実行してみます。

Step Functionsの実行結果
問題なく成功しました。Slackを確認してみると、、、届いていない。。 サブスクリプションの設定等を確認しても問題なく設定されていたため、SNSとChatbotに問題がないか確認してみます。
SNS Topicのメトリクス
SNS Topicのメトリクスを見てみますが、問題なく動作しているように見えますね。 次にChatbotに問題が起きていないか確認するため、Chatbotの設定でログをCloudWatchに記録するように設定しておきました。

Received event from SNS Topic: arn:aws:sns:ap-northeast-1:123456789012:techblog-sf-slack with message body

SNSからはリクエストを受け取っているようです。
※ChatbotによるCloudWatch Logsへの記録はus-east-1(バージニア北部)となりますのでご注意ください。
もう1つログが出ていたので確認してみます。

Event received is not supported (see https://docs.aws.amazon.com/chatbot/latest/adminguide/related-services.html )

Event received is not supported 」これが原因でした。Chatbotにも対応していないイベントがあったようです。。そのため、Step FunctionsからSNSトピックの呼び出しは正常に完了しているものの、Slackに通知がされませんでした。

次回!EventBridgeの入力トランスフォーマーを活用してみる

ここまでで、この実装方法では通知ができないということがわかりました。 イベント内容によって通知ができないことがわかったので、次回EventBridgeの入力トランスフォーマーを活用してなんとか通知させてみようと思います。

まとめ

今回の記事ではChatbotにこだわって、紹介させていただきました。Slackに通知するという目的達成のためにはWebhook URLを活用するといった手段をとることも多いかと思います。また、Step Functions内での処理の成功や失敗の通知という意味ではStep Functionsの状態(成功したのか、失敗したのか等)自体を監視して通知させることが大半かなと個人的に思います。今回このような構成をとった理由については次回の記事にて紹介させていただければと思います。

執筆者:西本 悠馬 クラウドエンジニア AWSをメインに触っています