Lambda経由でEC2にJSONを飛ばしてみる
LambdaからEC2で動いているServletにJSON飛ばしたつもりが、受け取れてないなーと、ちょっと手こずったので備忘メモ。
原因はContent-Lengthセットしてなかった事でござる。
const http = require('http'); exports.handler = function(event, context) { const postData = JSON.stringify(event); const options = { protocol: 'http:', host: process.env.EC2_API_HOST, port: process.env.EC2_API_PORT, path: process.env.EC2_API_PATH, method: 'POST', headers: { "Content-type": "application/json", 'Content-Length': encodeURIComponent(postData).replace(/%../g,"x").length } }; const req = http.request(options, (res) => { var responseBody = ''; res.setEncoding('utf8'); res.on('data', (chunk) => { responseBody += chunk; }); res.on('end', () => { context.succeed(JSON.parse(responseBody)); }); }) req.setTimeout(1000); req.on('timeout', function() { console.log('request timed out'); var responseBody = JSON.parse(postData); var index = 0; for (var cov in responseBody["coverage"]) { responseBody["coverage"][cov]["prem"] = 1000 * ++index; } responseBody["resultCode"] = "999"; var errors=[]; errors.push("EC2落としたんで、Lambdaでタイムアウトしました。テスト用に保険料は設定しておきました。"); responseBody["errorCode"] = errors; context.succeed(responseBody); }); req.on('error', (e) => { console.error(`problem with request: ${e.message}`); }); req.write(postData); req.end(); }
EC2で動いているServletとAPI Gatewayにリクエストを投げるhtmlはgithubに登録しておいたので、必要に応じて参照のこと。
GitHub - eternalvirtue/JacksonTest