AWS Lambdaで楽しくサーバーレス環境を作っていたところ。。。
なにやらログにエラーが書き出されていた。
{
"errorMsg": "NetworkingError: write EPROTO",
"param": {
"id": "XXXXXXXXXXXXXX",
"store": "SHOP_AAAA",
}
}
EPROTOていうのはプロトコルエラーって事らしい。
これまでLambdaでDynamoDBにリクエストを投げていてこんなエラーは出ていなかったし、ほとんどコードも変えていない。
となると、要因に心当たりがある。
AWSLambdaがnode.js 4.3に対応したため、
Promise使えるしサイコーって言ってbluebird外して、
Lambdaファンクションをnode.js 4.3で動かしたのでした。
調べると、やはり、nodeの4、5系で報告されているようでした。
このエラーがを改善するには、
DynamoDBの設定に、
- keepAliveを設定する
- secureProtocolに、TLSv1_methodを指定する
と、軽減するというっぽいです。
ということで、この設定をした後は、
今のところ、設定以降、私の環境でもエラーは出ていません。
以下、こんな感じで書いたって言う覚書。
const dynamodb = new AWS.DynamoDB({
region: 'ap-northeast-1',
httpOptions: {
agent: new https.Agent({
keepAlive: true,
secureProtocol: 'TLSv1_method'
})
}
});var doc = require('dynamodb-doc');
var dynamo = new doc.DynamoDB(dynamodb);