【问题标题】:aws DynamoDB gives "write EPROTO"aws DynamoDB 提供“写入 EPROTO”
【发布时间】:2016-02-27 19:46:12
【问题描述】:

我正在使用 dynamoDB 来保存 Web 服务生成的数据。 我有时(不一致)会收到“EPROTO”错误,我读过它,这是一个协议错误,但我使用 aws-sdk (javascript),我没有说明任何与协议相关的细节。

这是我初始化它的方式:

var aws = require('aws-sdk');
var dynamoDB = new aws.DynamoDB({
    accessKeyId: config.DynamoDB.accessKeyId,
    secretAccessKey: config.DynamoDB.secretAccessKey,
    region: config.DynamoDB.region
});

我只是使用 put api:

dynamoDB.putItem(params, function(err, dat) {
    if (err) {
       console.log('ERROR: Putting to dynamo failed with error: ' + err.message);
    }
    else {
       console.log('wipi');
       //passing data 
    }
});

params如下:

var params = {
    TableName: config.DynamoDB.tableNames.data, //this is the table name, a string
    Item: {
        id: {
            S: id // this is a generated uid (also a string)
        },
        scheme: {
            S: ivd.version // this is a string of structure 'X.X.X'
        },
        data: {
            S: JSON.stringify(data.data) // data.data is a big object - {arg1: [1, 2, 3...], arg2: '', ...}
        }
    }
};

我应该提一下,它在同一个 params 对象上甚至不一致(仅在生成的 uid 上有所不同)。

任何想法在我的情况下这个错误意味着什么以及为什么会发生?

【问题讨论】:

  • 你能提供一个例子params吗?
  • 编辑了我的问题,但我认为它没有帮助:(
  • 您的数据对象有多大?项目总大小不能超过 400KB。
  • @oshnaps:您是在本地运行代码,还是仅在 Elastic Beanstalk 中运行代码?我们看到了类似的错误,但仅在我们部署的代码中,有点像forums.aws.amazon.com/thread.jspa?messageID=689209
  • 其实我是从一个ec2调用api,node版本是5.2.0,所以不知道你给我的链接...我确实试过增加DB容量,同时好像看不懂了,以后继续更新。

标签: node.js amazon-web-services protocols amazon-dynamodb aws-sdk


【解决方案1】:

关注https://github.com/aws/aws-sdk-js/issues/862的讨论:

在 DynamoDB 方面,对于 DynamoDB 使用哪个版本的 TLS 在客户端中进行通信似乎存在不一致的情况。要解决这个问题,您需要强制 SDK 使用 TLS v1:

const https = require('https');
const dynamodb = new AWS.DynamoDB({
    region: 'us-east-1',
    httpOptions: {
        agent: new https.Agent({
            ciphers: 'ALL',
            secureProtocol: 'TLSv1_method'
        })
    }
});

const dynamodbDoc = new AWS.DynamoDB.DocumentClient({
    region: 'us-east-1',
    service: dynamodb
});

【讨论】:

    【解决方案2】:

    这是由使用节点版本 > 0.12 的 DynamoDB 的问题引起的:https://github.com/aws/aws-sdk-js/issues/862

    这被认为是负载过重的服务器没有响应完整的 TLS 响应的问题,这会导致在较新版本的节点中抛出此错误。

    目前唯一已知的解决方法是降级到 Node 0.12。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-15
      • 1970-01-01
      • 2013-08-07
      • 2022-01-23
      • 2016-12-07
      • 1970-01-01
      • 1970-01-01
      • 2016-11-21
      相关资源
      最近更新 更多