Я использую StartDocumentAnalysis для асинхронного сканирования файла .pdf из корзины S3. Как сказано в документации, я должен получить уведомление о статусе задания в предоставленной теме SNS.
StartDocumentAnalysis
возвращает идентификатор задания (JobId
), который вы используете для получения результатов операции. Когда анализ текста завершен, 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'" }
}
Я создал SNS в консоли AWS.
snsTopicArn = arn:aws:sns:us-east-1:093475263507:textract-result.fifo
snsRoleArn = arn:aws:iam::093475263507:role/SNSSuccessFeedback
Я могу вручную опубликовать сообщение для этого соцсети с консоли, но ни одно сообщение от Textract никогда не попадает в тему соцсети. Я ждал уже несколько часов - подозреваю, что уже получил бы сообщение.
Я не уверен, что 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"
}
}
}
]
}