我有一个.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;
}
答案 0 :(得分:0)
经过漫长的一天分析问题。我能够解决它..根据文档主题,只需向SQS发送SendMessage操作即可。但是在将其更改为“所有SQS操作”后,它开始工作。但是,AWS错误消息仍然令人产生误解和困惑
答案 1 :(得分:0)
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
)。更改我的令牌代码以满足正则表达式可以解决问题。
对于这种类型的不透明类型错误,我建议使用这种方法。