AWS Textract InvalidParameterException

时间:2019-11-30 05:52:58

标签: amazon-web-services .net-core amazon-textract

我有一个.Net核心客户端应用程序,根据AWS文档使用具有S3,SNS和SQS的Amazon Textract来检测和分析多页文档中的文本(https://docs.aws.amazon.com/textract/latest/dg/async.html

使用AmazonTextractServiceRole策略创建了一个AWS角色,并根据文档(https://docs.aws.amazon.com/textract/latest/dg/api-async-roles.html)添加了“以下信任”关系 {   “ Version”:“ 2012-10-17”,   “声明”:[     {       “效果”:“允许”,       “校长”:{         “服务”:“ textract.amazonaws.com”       },       “动作”:“ sts:AssumeRole”     }   ] }

根据aws文档为该主题订阅SQS,并向Amazon SNS主题授予权限以将消息发送到Amazon SQS队列。

所有资源,包括S3存储桶,SNS和SQS都位于同一us-west2地区

以下方法显示一般错误“ InvalidParameterException” 请求的参数无效

但是,如果对NotificationChannel部分进行注释,则代码可以正常工作并返回正确的作业ID。

错误消息没有给出关于参数的清晰图片。非常感谢您的帮助。

public async Task<string> ScanDocument()
{
            string roleArn = "aws:iam::xxxxxxxxxxxx:instance-profile/MyTextractRole";
            string topicArn = "aws:sns:us-west-2:xxxxxxxxxxxx:AmazonTextract-My-Topic";
            string bucketName = "mybucket";
            string filename = "mytestdoc.pdf";

            var request = new StartDocumentAnalysisRequest();
            var notificationChannel = new NotificationChannel();
            notificationChannel.RoleArn = roleArn;
            notificationChannel.SNSTopicArn = topicArn;

            var s3Object = new S3Object
            {
                Bucket = bucketName,
                Name = filename
            };
            request.DocumentLocation = new DocumentLocation
            {
                S3Object = s3Object
            };
            request.FeatureTypes = new List<string>() { "TABLES", "FORMS" };
            request.NotificationChannel = channel; /* Commenting this line work the code*/
            var response = await this._textractService.StartDocumentAnalysisAsync(request);
            return response.JobId;

        }

2 个答案:

答案 0 :(得分:0)

经过漫长的一天分析问题。我能够解决它..根据文档主题,只需向SQS发送SendMessage操作即可。但是在将其更改为“所有SQS操作”后,它开始工作。但是,AWS错误消息仍然令人产生误解和困惑

答案 1 :(得分:0)

调试无效的AWS请求

AWS开发工具包会先在本地验证您的请求对象,然后再将其分派到AWS服务器。该验证将因诸如OP之类的无用的不透明错误而失败。

由于SDK是开放源代码,因此您可以检查源代码以帮助缩小无效参数的范围。

在看代码之前:SDK(和文档)实际上是从特殊的JSON文件生成的,这些文件描述了API,其要求以及如何验证它们。实际的代码是根据这些JSON文件生成的。

我将以Node.js SDK为例,但是我确信类似的方法可能适用于其他SDK,包括.NET

在我们的案例中(AWS Textract),最新的Api版本是2018-06-27。果然,JSON源文件位于GitHub here上。

就我而言,实验将问题缩小到ClientRequestToken。错误是不透明的InvalidParameterException。我在SDK源JSON文件中搜索了它,而且确实在line 392上进行了搜索:

"ClientRequestToken": {
  "type": "string",
  "max": 64,
  "min": 1,
  "pattern": "^[a-zA-Z0-9-_]+$"
},

一大堆未记录的要求!

在我的情况下,我使用的令牌违反了正则表达式(以上源代码中的pattern)。更改我的令牌代码以满足正则表达式可以解决问题。

对于这种类型的不透明类型错误,我建议使用这种方法。