AWS Textract调用startDocumentAnalysis后SQS接收消息为空的排查求助
排查思路与解决方案
这种同账号下SQS收不到Textract异步任务通知的情况,我之前也碰到过几次,大概率是权限或配置环节的疏漏,给你列几个优先级最高的排查方向:
1. 确认Textract异步任务的SNS主题配置正确性
- 检查调用
startDocumentAnalysis时,OutputConfig参数里指定的SnsTopicArn是否完全匹配公司账号中创建的目标SNS主题ARN(注意账号ID、区域、主题名称不能有拼写错误)。 - 登录AWS控制台进入Textract服务,找到对应的异步任务详情,查看输出配置里的SNS主题是否正确,同时确认任务状态是
SUCCEEDED,有没有关联的错误提示。
2. 验证SNS到SQS的订阅状态
- 进入SNS控制台,找到目标主题的订阅列表,确认对应SQS队列的订阅状态是
Confirmed(如果是Pending状态,需要手动确认;如果是通过API创建的订阅,要确保代码处理了订阅确认逻辑)。 - 检查订阅的协议是否为
SQS,端点是否是目标SQS队列的完整ARN,避免账号ID或队列名写错。
3. 检查SQS队列的权限策略(最常见问题)
SQS默认拒绝外部主体发送消息,必须显式授权SNS主题向其发送消息:
- 进入SQS控制台,找到目标队列的权限标签,添加或更新如下策略(替换成你的实际资源ARN):
这个策略限制只有指定的SNS主题能向该队列发送消息,既安全又能解决权限问题。{ "Version": "2008-10-17", "Id": "SQS-SNS-Publish-Policy", "Statement": [ { "Sid": "AllowSNStoSendMessages", "Effect": "Allow", "Principal": { "Service": "sns.amazonaws.com" }, "Action": "sqs:SendMessage", "Resource": "arn:aws:sqs:你的区域:你的账号ID:你的队列名", "Condition": { "ArnEquals": { "aws:SourceArn": "arn:aws:sns:你的区域:你的账号ID:你的SNS主题名" } } } ] }
4. 确认Textract执行角色的SNS发布权限
Textract异步任务依赖的IAM角色必须具备向目标SNS主题发布消息的权限:
- 进入IAM控制台,找到Textract使用的角色,检查其权限策略是否包含
sns:Publish操作,且资源为目标SNS主题的ARN。 - 同时确认该角色的信任策略已添加Textract服务作为可信实体:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "textract.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
5. 手动测试SNS到SQS的链路
直接在SNS控制台给目标主题发送一条测试消息,如果SQS能收到,说明SNS与SQS的通信正常,问题出在Textract到SNS的环节;如果收不到,继续排查SNS和SQS的配置/权限。
6. 查看CloudWatch日志定位错误
- 启用Textract的CloudWatch日志,查看异步任务的执行日志,是否有发布消息到SNS时的权限拒绝或其他错误。
- 也可以查看SNS的日志记录,确认是否有向SQS发送消息失败的记录(比如权限不足)。
按照这个顺序排查,基本能定位到问题所在——我之前碰到的大部分情况都是SQS权限策略没配置,或者Textract角色缺少SNS发布权限。
内容的提问来源于stack exchange,提问作者Amir
相关产品推荐
相关产品推荐

