【问题标题】:Amazon AWS Machine Learning HTTP request亚马逊 AWS 机器学习 HTTP 请求
【发布时间】:2017-07-14 13:15:42
【问题描述】:

我创建了带有工作实时端点的 AWS 机器学习模型。我想通过 HTTP 请求使用创建的服务。出于测试目的,我使用 Postman,我根据 Amazon 的 API 文档创建了请求,但每次我得到相同的异常:UnknownOperationException。当我使用 Python SDK 时,该服务运行良好。下面的示例获取模型信息。

这是我的要求(假凭据):

POST  HTTP/1.1
Host: realtime.machinelearning.us-east-1.amazonaws.com
Content-Type: application/json
X-Amz-Target: AmazonML_20141212.GetMLModel
X-Amz-Date: 20170714T124250Z
Authorization: AWS4-HMAC-SHA256 Credential=JNALSFNLANFAFS/20170714/us-east-1/AmazonML/aws4_request, SignedHeaders=content-length;content-type;host;x-amz-date;x-amz-target, Signature=fiudsf9sdfh9sdhfsd9hfsdkfdsiufhdsfoidshfodsh
Cache-Control: no-cache
Postman-Token: hd9sfh9s-idsfuuf-a32c-31ca-dsufhdso

{
   "MLModelId": "ml-Hfdlfjdof0807",
   "Verbose": true
}

我得到的异常:

{
    "Output": {
        "__type": "com.amazon.coral.service#UnknownOperationException",
        "message": null
    },
    "Version": "1.0"
}

【问题讨论】:

  • 你的内容类型应该是application/x-amz-json-1.1
  • @jjones 不起作用,现在我收到此错误:"__type": "UnknownOperationException"
  • 我会注意到,AWS 文档是出了名的糟糕。他们的 HTTP 请求样本通常包含无效值。
  • 完全同意,我浏览了整个文档,但仍然找不到解决方案。我对他们的 API 网关没有任何问题,但是在处理 ML 服务时,我什至无法执行一个简单的请求。

标签: rest amazon-web-services httprequest amazon-machine-learning


【解决方案1】:

在 AWS 论坛上进行研究后,我发现了一些类似的 HTTP 请求。原来我有 3 个不正确的参数。

  1. 主机地址应为:

Host: machinelearning.us-east-1.amazonaws.com

  1. 内容类型:

Content-Type: application/x-amz-json-1.1

  1. 在凭据参数中,目标服务必须指定为machinelearning

如何设置 Postman 请求的简短说明:

  1. Authorization选项卡中选择AWS Signature并填写AccessKeySecrectKey。在Service Name 字段中写入machinelearning。点击Update Request,这将更新您的标题。

  2. Headers 选项卡中添加两个标题:

    键:X-Amz-Target,值:AmazonML_20141212.GetMLModel

    键:Content-Type,值:application/x-amz-json-1.1

  3. 添加正文:

{ "MLModelId": "YOUR_ML_MODEL_ID", "Verbose": true }


正确的 HTTP 请求如下:

POST  HTTP/1.1
Host: machinelearning.us-east-1.amazonaws.com
X-Amz-Target: AmazonML_20141212.GetMLModel
Content-Type: application/x-amz-json-1.1
X-Amz-Date: 20170727T113217Z
Authorization: AWS4-HMAC-SHA256 Credential=JNALNFAFS/20170727/us-east-1/machinelearning/aws4_request, 
SignedHeaders=content-length;content-type;host;x-amz-date;x-amz-target, 
Signature=fiudsf9sdfh9sdhfsd9hfsdkfdsiufhdsfoidshfodsh
Cache-Control: no-cache
Postman-Token: hd9sfh9s-idsfuuf-a32c-31ca-dsufhdso

{
   "MLModelId": "ml-Hfdlfjdof0807",
   "Verbose": true
}

【讨论】:

  • 完成上述操作后,在尝试使用实时预测时,出现错误:"class com.amazon.coral.value.json.numbers.TruncatingBigNumber can not be converted to an String"。原来这是因为机器学习需要将 JSON 中的数字编码为字符串。 (或者也许 x-amz-json-1.1 总是如此?我找不到任何关于 JSON 的特殊风格的规范......)
【解决方案2】:

请检查以下链接并验证您的 sigv4

http://docs.aws.amazon.com/general/latest/gr/sigv4_signing.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多