抽出コマンド
AWSリソースの整理中、SNSトピックやSQSキューのみを抽出するためのコマンドが必要になったので、備忘録として残しておきます。以下のコマンドのプロファイルのみ修正することで、トピックやキューのみを抽出することが出来ます。
aws sns list-topics --profile XXX | jq -r '.Topics[].TopicArn' | cut -f 6 -d ":"
aws sqs list-queues --profile XXX | jq -r '.QueueUrls[]' | cut -f 5 -d "/"
コマンド解説
解説するまでもないようなコマンドですが、インプットも兼ねて。
aws sns list-topics (--profile XXX)
# SNSトピックを取得
aws sns list-topics --profile XXX
出力結果
{
"Topics": [
{
"TopicArn": "arn:aws:sns:ap-northeast-1:${AccountId}:${トピック名1}"
},
{
"TopicArn": "arn:aws:sns:ap-northeast-1:${AccountId}:${トピック名2}"
},
// 以下省略
]
}
このままだと上記のようにトピックがjson形式で出力されるため、jqコマンドを利用して整形を行う。
jq -r '.Topics[].TopicArn'
"Topics"配列内の"TopicArn"の内容を取得する。更に、-rオプションによりダブルクウォーテーションを取り除く。
# SNSトピックを取得し、jqコマンドでTopicArnのみを抽出
aws sns list-topics --profile XXX | jq -r '.Topics[].TopicArn'
出力結果
arn:aws:sns:ap-northeast-1:${AccountId}:${トピック名1}
arn:aws:sns:ap-northeast-1:${AccountId}:${トピック名2}
// 以下省略
この時点でTopicArnのみを抽出することが出来たので、最後にcutコマンドを用いて${トピック名}のみを取得する。
cut -f 6 -d ":"
-dオプションで区切り文字に「:」を指定し、-fオプションで6つ目のフィールドのみを抽出する。
# SNSトピックを取得し、jqコマンドでTopicArnのみを抽出し、cutコマンドでトピック名のみを取得
aws sns list-topics --profile XXX | jq -r '.Topics[].TopicArn' | cut -f 6 -d ":"
出力結果
${トピック名1}
${トピック名2}
// 以下省略
おわりに
SQSキューの取得に関してもやってることはほぼ同じなのでコマンド解説は省略します。これくらいのワンライナーのシェルは何も見ないでスラスラ書けるようになりたいものです。