0

我正在使用Amazon TextractStartDocumentAnalysis函数从 S3 存储桶中异步扫描 .pdf 文件。正如文档所说,我应该收到有关所提供 SNS 主题的作业状态的通知。

StartDocumentAnalysisJobId返回用于获取操作结果的作业标识符 ( )。文本分析完成后,Amazon Textract 将完成状态发布到您在 中指定的 Amazon Simple Notification Service (Amazon SNS) 主题NotificationChannel

我用来开始分析的代码如下所示:

    fun analyzeDocument(documentId: String) {
        klogger.info { "Start Textract analysis on document '$documentId'" }

        val request = StartDocumentAnalysisRequest()
            .withFeatureTypes("TABLES", "FORMS")
            .withDocumentLocation(DocumentLocation()
                .withS3Object(S3Object()
                    .withName(documentId)
                    .withBucket(bucketName)
                )
            )
            .withNotificationChannel(NotificationChannel()
                .withSNSTopicArn(snsTopicArn)
                .withRoleArn(snsRoleArn)
            )

        val jobId = textract.startDocumentAnalysis(request).jobId

        klogger.info { "Analysis started for document '$documentId'. Job ID: '$jobId'" }
    }

我在 AWS 控制台中创建了 SNS。

  • snsTopicArn = arn:aws:sns:us-east-1:093475263507:textract-result.fifo
  • snsRoleArn = arn:aws:iam::093475263507:role/SNSSuccessFeedback

我可以从控制台手动向该 SNS 发布一条消息,但来自 Textract 的任何消息都不会进入 SNS 主题。我已经等了几个小时了——我怀疑现在我已经收到了消息。

我不确定这snsRoleArn是否正确。我只是使用了一些我在 AWS 中已经拥有的随机的。这会是个问题吗?我应该使用哪个snsRoleArn?如果不是这样,为什么我没有收到消息?

我会在访问策略中遗漏一些东西吗?

{
  "Version": "2008-10-17",
  "Id": "__default_policy_ID",
  "Statement": [
    {
      "Sid": "__default_statement_ID",
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": [
        "SNS:GetTopicAttributes",
        "SNS:SetTopicAttributes",
        "SNS:AddPermission",
        "SNS:RemovePermission",
        "SNS:DeleteTopic",
        "SNS:Subscribe",
        "SNS:ListSubscriptionsByTopic",
        "SNS:Publish",
        "SNS:Receive"
      ],
      "Resource": "arn:aws:sns:us-east-1:093475263507:textract-result.fifo",
      "Condition": {
        "StringEquals": {
          "AWS:SourceOwner": "093475263507"
        }
      }
    }
  ]
}
4

2 回答 2

2

对特定任务使用随机 IAM 角色并不是最佳实践。对于此用例,您应该使用附加了 SN​​S 策略的 IAM 角色。我会尝试使用这样的东西:

在此处输入图像描述

于 2021-02-08T22:35:29.433 回答
0

面对同样的问题,从 fifo SNS 更改为标准 SNS 对我有用。不确定强制性 .fifo 命名约定是否会导致此行为。一旦我从 aws 获得适当的支持,就会更新。

从您的配置中,我可以看到您没有使用正确的命名约定来创建由 Textract 通知的 SNS。对于 textract,SNS 应以 AmazonTextract* 开头。确保始终在您的 sns 前添加 AmazonTextract。

于 2021-12-08T10:53:11.413 回答