Amazon TextractのStartDocumentAnalysis関数を使用して、S3 バケットから .pdf ファイルを非同期的にスキャンしています。ドキュメントにあるように、提供された 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'" }
}
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"
}
}
}
]
}