ShellScript で Amazon SNS トピックに紐づかないサブスクリプションを削除する方法について調査した結果を備忘録として残しておく

環境

  • OS: MacOS

実際のコード

«…» 部分は実際の環境に応じて書き換える

#!/bin/bash

AWS_PROFILE=<<AWS Configure Profile>>

# SNSトピック一覧を取得
topics=$(aws sns list-topics --profile=${AWS_PROFILE} | jq -r '.Topics[].TopicArn')

# SNSサブスクリプション一覧を取得
subscriptions=$(aws sns list-subscriptions --profile=${AWS_PROFILE})

# トピックに紐づかないサブスクリプションを削除
echo $subscriptions | jq -c '.Subscriptions[]' | while read subscription; do
  subscriptionArn=$(echo $subscription | jq -r '.SubscriptionArn')
  topicArn=$(echo $subscription | jq -r '.TopicArn')

  # サブスクリプションのtopicArnがtopicsに含まれていなければ削除
  if ! echo $topics | grep $topicArn > /dev/null
  then
    aws sns unsubscribe --subscription-arn $subscriptionArn --profile=${AWS_PROFILE}
    echo "削除したサブスクリプション: $subscriptionArn"
  fi
done