kurosame’s diary

フロントエンド中心です

Digdag から Amazon SNS 経由でエラーを通知する方法を考えた

Digdag から Amazon SNS 経由で Slack にエラーを通知するやつを今までは AWS Lambda を使ってやっていたが、Lambda を使うとコード管理どうするとか色々考えると面倒なので、今年使えるようになった AWS Chatbot が使えたら、いいなーって思ったので調査した

ただし、こちらにあるようにSNS -> Chatbotという経路では、使えません https://docs.aws.amazon.com/chatbot/latest/adminguide/related-services.html

でも簡単に設定できるので、一応試してみた
結果、できなかったが、やったことをメモ

Amazon SNS

トピックの作成

トピックの作成をクリックし、以下を設定

詳細

設定項目 設定値
タイプ スタンダード
名前 任意の名前

AWS Chatbot

Slack のワークスペースの設定

クライアントの設定でSlackを選択

f:id:kurosame-th:20201222101648p:plain

この後、Slack のワークスペースに Chatbot からのアクセスを許可を求める画面が出るので、許可する

チャネルの設定

新しいチャネルを設定をクリックし、以下を設定

設定の詳細

設定項目 設定値
設定名 任意の名前
ログ記録 Amazon CloudWatch Logs にログを発行する(エラーのみ)

Slack チャネル

設定項目 設定値
チャネル ID Slack のチャネル ID

Slack のチャネル ID の Slack の対象のチャネルを右クリックして、Copy linkで確認できる

アクセス許可

CloudWatch に関わるポリシーを付与した、IAM ロールが作成される

設定項目 設定値
IAM ロール 任意のロール名(新規にロールが作られる)
ポリシーテンプレート 通知のアクセス許可

以下のポリシーでアタッチされたロールが作成された

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": ["cloudwatch:Describe*", "cloudwatch:Get*", "cloudwatch:List*"],
      "Effect": "Allow",
      "Resource": "*"
    }
  ]
}

通知 - オプション

設定項目 設定値
SNS トピック 上記で作成した SNS トピック

AWS CLI

必要なポリシー

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "VisualEditor0",
      "Effect": "Allow",
      "Action": "sns:Publish",
      "Resource": "[作成した SNS トピックのARN]"
    }
  ]
}

実行

aws sns publish \
--topic-arn ${SNS トピックのARN} \
--message "SNS test message" \
--subject "SNS test subject" \
--region ap-northeast-1

以下のエラーが CloudWatch に出力された

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

SNS -> Chatbotという連携はできないっぽい
まあ当然の結果ではありますが、、

たとえば、CloudWatch Alarms -> SNS -> Chatbotという経由であれば、できるのだと思う
ただ、今回のケースでは Digdag でエラーが起きる度に通知を飛ばしたいので、CloudWatch Alarm で閾値や期間を設定するのは、難しいのかなーと

Digdag を使っているので、現状だと解決方法は以下なのかな