You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Amazon Textract StartExpenseAnalysisCommand的NotificationChannel无法推送SNS消息问题

Amazon Textract StartExpenseAnalysis 未触发SNS通知问题排查与解决

核心问题分析

你遇到的问题是Textract完成任务后未通过NotificationChannel推送消息至SNS主题,结合你已确认Lambda订阅正常、手动发消息可触发的情况,问题大概率出在NotificationChannel配置的角色权限不足,以及环境变量引用错误这两点上。

具体解决步骤

1. 修正环境变量引用

你的serverless.yml中当前用外部环境变量传入SNS_TOPIC_ARN和ROLE_ARN,容易出现ARN不匹配的问题。直接引用CloudFormation生成的资源ARN更可靠:

provider:
  environment:
    # 替换原来的外部环境变量配置
    SNS_TOPIC_ARN: !GetAtt AmazonTextractMyTopicName.TopicArn
    # 后续我们会创建这个专用角色,先预留引用
    ROLE_ARN: !GetAtt TextractNotificationRole.Arn

2. 创建Textract专用通知角色

你当前给Lambda配置的IAM角色不能直接给Textract用,需要创建一个专门的角色,让Textract能承担该角色并向SNS发消息。在resources.Resources下添加:

TextractNotificationRole:
  Type: AWS::IAM::Role
  Properties:
    AssumeRolePolicyDocument:
      Version: "2012-10-17"
      Statement:
        - Effect: Allow
          Principal:
            Service: textract.amazonaws.com
          Action: sts:AssumeRole
    Policies:
      - PolicyName: TextractPublishToSNS
        PolicyDocument:
          Version: "2012-10-17"
          Statement:
            - Effect: Allow
              Action: sns:Publish
              Resource: !GetAtt AmazonTextractMyTopicName.TopicArn

3. 验证Lambda角色权限(可选)

你的Lambda角色已经配置了sns:Publish权限,但这个权限是给Lambda自身用的,和Textract的NotificationChannel无关,保持现有配置即可。

4. 确认代码中的参数正确性

确保代码中NotificationChannel的参数和环境变量一致,你的现有代码逻辑没问题,只要环境变量正确就能生效:

const command = new StartExpenseAnalysisCommand({
  DocumentLocation: {
    S3Object: {
      Bucket: fileObj.s3.bucket.name,
      Name: fileObj.s3.object.key,
    },
  },
  NotificationChannel: {
    SNSTopicArn: process.env.SNS_TOPIC_ARN,
    RoleArn: process.env.ROLE_ARN,
  },
});

关于SQS订阅的疑问

不需要将SQS订阅到该SNS主题。你当前的流程是Textract → SNS → Lambda,第二个Lambda已经直接订阅了SNS主题,任务完成后Textract推送的消息会直接触发Lambda执行,完全满足你的需求,SQS是额外的中间件,当前流程不需要引入。

内容的提问来源于stack exchange,提问作者Ger

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 20:38:29