にわかサーバー屋さんの覚書

サーバー系を担当しているけど、設計などは日々勉強中のプログラマの覚書

AWS Lambda + DynamoDBで吐く"NetworkingError: write EPROTO"エラーについて

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系で報告されているようでした。

github.com

このエラーがを改善するには、

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);