はじめに
AWSでcloudwatchで監視し、異常があったらSNSで通知する事はあるが、SNSではデフォルトで「配信停止(unsubscribe)する場合は、ここクリックしてね」とありがたいことに(?)記載されてある。
チーム開発しているとSNSの通知先がメーリングリストにしていると、誤って押されてしまうと、その後のメールが来なくなってしまう。
配信停止(unsubscribe)を押された場合検知はさっくり作れたのでそれをまとめる
手順
awsコマンドとjqコマンドをうまく組み合わせる
aws sns list-subscriptions | jq -r '.Subscriptions[] | select(.SubscriptionArn == "Deleted") '
結果
aws sns list-subscriptions | jq -r '.Subscriptions[] | select(.SubscriptionArn == "Deleted") ' { "SubscriptionArn": "Deleted", "Owner": "xxxxxxxxxx", "Protocol": "email", "Endpoint": "sute@sumito.jp", "TopicArn": "arn:aws:sns:ap-northeast-1:xxxxxxx:xxxxxxxxx" }
unsubscribeされたメールドレスや、TopicArn情報などを確認することができる。
ちなみにチャットワークに通知する場合は以下の通りシェルでラップする
#!/bin/bash aws --profile=$1 sns list-subscriptions | jq -r '.Subscriptions[] | select(.SubscriptionArn == "Deleted") ' > /tmp/check-unsubscribe.$1 # 文字を整形する # headder cat << _EOT_ > /tmp/check-unsubscribe.$1.txt [info] [title]Someone clicked unsubscribe link [/title] _EOT_ # contents cat /tmp/check-unsubscribe.$1 >> /tmp/check-unsubscribe.$1.txt echo "[/info]" >> /tmp/check-unsubscribe.$1.txt _roomid=xxxxxxxxxxxxx # (your chatroom id) _body=`cat /tmp/check-unsubscribe.$1.txt` # 1件以上あれば通知する if [ `wc -l /tmp/check-unsubscribe.$1 | awk '{print $1}'` -gt 0 ] ; then curl -X POST -H "X-ChatWorkToken: 123456789" -d "body=${_body}" "https://api.chatwork.com/v2/rooms/${_roomid}/messages" fi exit 0