如何通过匹配模式使用AWS CLI批量删除AWS SNS主题和SQS队列
批量删除匹配命名模式的AWS SNS主题与SQS队列
批量删除SNS主题
前缀匹配脚本
如果要删除所有名称包含特定前缀(比如dev-)的SNS主题,用以下bash脚本:
# 替换成你要匹配的前缀 PREFIX="dev-" # 遍历并删除匹配的主题 aws sns list-topics --query "Topics[?contains(TopicArn, '$PREFIX')].TopicArn" --output text | tr '\t' '\n' | while read arn; do if [ -n "$arn" ]; then echo "正在删除SNS主题: $arn" aws sns delete-topic --topic-arn "$arn" fi done
正则匹配脚本
如果需要更复杂的匹配规则(比如删除以dev-开头且以-test结尾的主题),用grep过滤:
# 遍历符合正则的主题并删除 aws sns list-topics --query "Topics[*].TopicArn" --output text | tr '\t' '\n' | grep "dev-.\+-test$" | while read arn; do echo "正在删除SNS主题: $arn" aws sns delete-topic --topic-arn "$arn" done
批量删除SQS队列
前缀匹配脚本
针对前缀匹配的SQS队列,用以下脚本:
# 替换成你要匹配的前缀 PREFIX="dev-" # 遍历并删除匹配的队列 aws sqs list-queues --queue-name-prefix "$PREFIX" --query "QueueUrls[]" --output text | tr '\t' '\n' | while read url; do if [ -n "$url" ]; then echo "正在删除SQS队列: $url" aws sqs delete-queue --queue-url "$url" fi done
正则匹配脚本
复杂规则下用grep筛选队列URL:
# 遍历符合正则的队列并删除 aws sqs list-queues --query "QueueUrls[]" --output text | tr '\t' '\n' | grep "dev-.\+-queue$" | while read url; do echo "正在删除SQS队列: $url" aws sqs delete-queue --queue-url "$url" done
关键注意事项
- 执行前一定要先测试:把脚本里的
aws sns delete-topic/aws sqs delete-queue换成echo,确认要删除的对象完全符合预期,避免误删重要资源。 - 确保你的AWS账号具备对应的权限:
sns:ListTopics、sns:DeleteTopic、sqs:ListQueues、sqs:DeleteQueue。 - 如果目标资源不在默认区域,需要在所有
aws命令后加上--region <你的区域>参数(比如--region us-east-1)。
内容的提问来源于stack exchange,提问作者Alexander Pravdin
相关产品推荐
相关产品推荐

