在Amazon Textract中,异步调用无法直接发送通知到SNS。但是,您可以使用其他AWS服务(如AWS Lambda)来处理异步通知并发送SNS通知。以下是一个解决方法的代码示例:
首先,您需要创建一个Lambda函数来处理异步通知并发送SNS通知。以下是一个基本的Lambda函数示例:
import boto3
def lambda_handler(event, context):
# 解析异步通知的消息
sns_topic_arn = event['SnsTopicArn']
completion_message = event['CompletionMessage']
# 发送SNS通知
sns_client = boto3.client('sns')
sns_client.publish(
TopicArn=sns_topic_arn,
Message=completion_message
)
然后,您需要创建一个Amazon SNS主题,并将Lambda函数配置为SNS主题的订阅者。这样,当Lambda函数被触发时,它会发送SNS通知。
最后,您可以在调用Amazon Textract的异步API请求中指定SNS主题ARN。这样,当异步任务完成时,Amazon Textract会将通知发送到SNS主题,然后由Lambda函数处理并发送SNS通知。
以下是一个调用Amazon Textract异步API并指定SNS主题ARN的代码示例:
import boto3
def start_async_job(document_bucket, document_name, sns_topic_arn):
textract_client = boto3.client('textract')
response = textract_client.start_document_text_detection(
DocumentLocation={
'S3Object': {
'Bucket': document_bucket,
'Name': document_name
}
},
NotificationChannel={
'SNSTopicArn': sns_topic_arn,
'RoleArn': 'YOUR_ROLE_ARN'
}
)
# 返回异步任务的JobId
return response['JobId']
在上面的示例中,start_async_job函数接受文档的S3存储桶和名称,以及SNS主题ARN作为参数。它使用textract_client.start_document_text_detection方法启动异步任务,并指定了SNS主题ARN作为通知通道。
这样,当异步任务完成时,Amazon Textract会将通知发送到SNS主题,然后由Lambda函数处理并发送SNS通知。