如何使用AWS CLI获取SNS Topic最新消息?查询AWS IP范围变更通知主题
用AWS CLI获取Amazon IP范围变更SNS主题最新消息的操作方法
注意:SNS是推送型消息服务,本身不持久化存储历史消息,无法直接从主题中拉取已推送的历史内容。要接收该主题的消息,需要先订阅主题并将消息投递到支持拉取操作的终端节点,SQS队列是最适配AWS CLI操作的方案。
操作步骤
- 第一步:配置AWS CLI的权限与区域
确保你的AWS账号拥有SNS订阅、SQS队列创建与读写权限,且操作时指定us-east-1区域(该SNS主题部署在美东1区域)。 - 第二步:创建用于接收消息的SQS队列
执行以下命令创建队列:
命令执行后返回队列URL,再执行以下命令获取队列ARN:aws sqs create-queue --queue-name AmazonIpChangeQueue --region us-east-1aws sqs get-queue-attributes --queue-url <替换为上一步返回的队列URL> --attribute-names QueueArn --region us-east-1 - 第三步:为SQS队列配置访问权限,允许SNS主题推送消息
执行以下命令,替换其中的队列URL和队列ARN占位符:aws sqs set-queue-attributes --queue-url <替换为你的队列URL> --attributes '{"Policy":"{\"Version\":\"2012-10-17\",\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"sns.amazonaws.com\"},\"Action\":\"sqs:SendMessage\",\"Resource\":\"<替换为你的队列ARN>\",\"Condition\":{\"ArnEquals\":{\"aws:SourceArn\":\"arn:aws:sns:us-east-1:806199016981:AmazonIpSpaceChanged\"}}}]"}' --region us-east-1 - 第四步:将SQS队列订阅到目标SNS主题
执行以下命令,替换队列ARN占位符:aws sns subscribe --topic-arn arn:aws:sns:us-east-1:806199016981:AmazonIpSpaceChanged --protocol sqs --notification-endpoint <替换为你的队列ARN> --region us-east-1 - 第五步:拉取最新的IP变更消息
订阅生效后,AWS每次推送IP范围变更通知时,你都可以执行以下命令拉取队列中的最新消息:
处理完消息后可执行以下命令删除队列中的该条消息,避免重复拉取:aws sqs receive-message --queue-url <替换为你的队列URL> --max-number-of-messages 10 --wait-time-seconds 20 --region us-east-1aws sqs delete-message --queue-url <替换为你的队列URL> --receipt-handle <替换为receive-message返回的ReceiptHandle参数值> --region us-east-1
补充说明
如果需要查询历史的AWS服务IP范围,可直接使用AWS官方公开的IP范围JSON文件,无需订阅SNS主题。
内容的提问来源于stack exchange,提问作者F_SO_K
相关产品推荐
相关产品推荐

