以前、localstack 上の SNS や SQS の操作を awscli コマンドから行う方法を紹介しました。

今回は、AWS 上の SNS や SQS について、意図したものが作成されているか確認するためのシェルを書いてみました。
[SNS]
トピック
サブスクリプション
[SQS]
キュー
目的としては、開発環境と本番環境で設定の差異がないかの確認なのですが、AWS のコンソール上で複数のアカウントごとの設定を比較するのが面倒なのですよね。
特に、SNS は障害対策としてマルチリージョンで運用している人も多いと思います。
開発や本番の環境もそうですが、リージョンによって設定に差異があるのも怖いですよね・・・。
SNSのトピック
トピックの一覧は、以下のコマンドで取得が可能です。
aws sns list-topics –region [リージョン] –profile [プロファイル] –endpoint-url [SNSのエンドポイント]
試しに開発環境の AWS のプロファイルを dev という名前で作成しておき、以下のシェルを実行してみます。
リージョンは、東京とシンガポールと北カリフォルニアとしておきましょう。
1 2 3 4 5 6 7 8 | #!/bin/sh PROFILE="dev" REGION_LIST="ap-northeast-1 ap-southeast-1 us-west-1" for region in ${REGION_LIST}; do aws sns list-topics --region ${region} --profile ${PROFILE} --endpoint-url https://sns.${region}.amazonaws.com | grep 'TopicArn' | awk -F'"' '{print $4}' | awk -F':' '{print $6}' | sort > ${PROFILE}_${region}_sns_topics.txt done |
それぞれのリージョンごとの SNS トピックが以下のファイルに出力されます。
dev_ap-northeast-1_sns_topics.txt
dev_ap-southeast-1_sns_topics.txt
dev_us-west-1_sns_topics.txt
東京リージョンとシンガポールリージョンの差分を確認するには、diff コマンドで十分ですね。
1 | $ diff -u dev_ap-northeast-1_sns_topics.txt dev_ap-southeast-1_sns_topics.txt |
SQSのキュー
キューの一覧は、以下のコマンドで取得が可能です。
aws sqs list-queues –region [リージョン] –profile [プロファイル] –endpoint-url [SQSのエンドポイント]
SNS のトピックと同じく、以下のシェルを作成して実行してみます。
1 2 3 4 5 6 | #!/bin/sh PROFILE="dev" REGION="ap-northeast-1" aws sqs list-queues --region ${REGION} --profile ${PROFILE} --endpoint-url https://sqs.${REGION}.amazonaws.com | grep 'https' | awk -F'"' '{print $2}' | awk -F'/' '{print $5}' | sort > ${PROFILE}_${REGION}_sqs_queue.txt |
東京リージョンの SQS キューが以下のファイルに出力されます。
dev_ap-northeast-1_sqs_queue.txt
SQS の場合は、意図したキューがすべて作成されているかの確認や、以下のように開発環境と本番環境の差分を確認したりするイメージです。
1 | $ diff -u dev_ap-northeast-1_sqs_queue.txt prd_ap-northeast-1_sqs_queue.txt |
SNSのサブスクリプション
サブスクリプションの一覧は、以下のコマンドで取得が可能です。
aws sns list-subscriptions –region [リージョン] –profile [プロファイル] –endpoint-url [SNSのエンドポイント]
また、list-subscriptions-by-topic でトピック単位でのサブスクリプションの一覧が取得できますので、トピック一覧で取得したトピックベースで確認するのもアリですね。
aws sns list-subscriptions-by-topic –region [リージョン] –profile [プロファイル] –endpoint-url [SNSのエンドポイント] –topic-arn [トピックのARN]
ただし、取得したサブスクリプションの一覧を単純に比較しても、残念ながら詳細な設定内容まで確認することはできません。
1 2 3 4 5 6 7 8 | #!/bin/sh PROFILE="dev" REGION_LIST="ap-northeast-1 ap-southeast-1 us-west-1" for region in ${REGION_LIST}; do aws sns list-subscriptions --region ${region} --profile ${PROFILE} --endpoint-url https://sns.${region}.amazonaws.com | grep -E 'Endpoint|TopicArn' | awk -F'"' '{print $4}' | awk -F':' '{print $6}' | sort > ${PROFILE}_${region}_sns_topics.txt done |
実際には、メッセージのフィルタポリシー(Attributes)など、確認したい箇所は細部に渡りますよね。
サブスクリプションの一覧を取得してから、個別に比較していくのが近道かもしれません。
aws sns get-subscription-attributes –region [リージョン] –profile [プロファイル] –endpoint-url [SNSのエンドポイント] –subscription-arn [サブスクリプションのARN]