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
を選択
この後、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 を使っているので、現状だと解決方法は以下なのかな
- python-slack-sdk
- digdag-slack
- それか、AWS Lambda