おれ、Unity2Dでゲーム作るんだ。

Unity2Dをメインに、覚書などを記事にしていきます。

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

 

LINE BOTに設定しているコールバックに飛んでこないのは多分SSLの水準のせい?

ここ数日、LINE BOTをイジイジしていたんですが、

architect.hatenadiary.jp

 

結局、引っかかったLINE BOTからのコールバックは解決してません。
設定してから反映されるまでに時間がかかるって話もありましたが、
AWSAPI Gatewayと自己ドメインで相互書き換えしてみたのですが、
結局、2,3分で切り替わり、疎通<>不通を繰り返すのでした。

 

しかもログにも残らないので、、、。
まぁ、じゃあ、、、、

 

「何らかの理由で、LINE BOTがリクエストしてこない」しかない。

 

で、現状提示されている条件としてはCAが発行したSSLが必須ということしかない。

で、APIGatewayの証明書違うのは、CAが違うということしか無い。

 

つまり、メール認証でぺろっと生成できるようなSSL証明書を使ってるサーバーなんかには、リクエスト出すかいな!ってことだろうと思います。

 

推測にしか過ぎませんが、

上記のURLで言われているClass1では通してくれないんではないでしょうかね。

StartSSLもClass2の証明になると管理費がかかるようになりますので、この検証の為にということで二の足を踏んじゃうんですね。。。

 

qiita.com

情報をまとめてくれている方もいましたが、軒並み無料SSLが拒否られてる感じがしますね。これらが全てClass1かどうかは判りませんが、そんな感じと言うことで。

 

こちらからはこの辺になります。