基本的な概要です。Node.js アプリが実行されている AWS Lambda を取得しました。これは、HTTP 呼び出しを介して JSON を AWS Elastic Search DB に投稿します。
だから、私はこの小さなエラーから始めました:AWS: {"Message":"User: anonymous is not authorized to perform: es:ESHttpPost"}
そして、かなりの時間が経過した後、AWS が署名されていない要求を好まないことを理解するところまで到達しました。
今、これにこだわっています
Response:
{
"errorMessage": "Cannot read property 'presigned-expires' of undefined",
"errorType": "TypeError",
"stackTrace": [
"V4.isPresigned (/var/runtime/node_modules/aws-sdk/lib/signers/v4.js:206:32)",
"V4.addAuthorization (/var/runtime/node_modules/aws-sdk/lib/signers/v4.js:27:14)",
"Promise (/var/task/index.js:18:16)",
"new Promise (<anonymous>)",
"exports.handler (/var/task/index.js:6:12)"
]
}
グーグルで多くの時間を過ごし、ウェブのさらに深いところまで行っても、この問題の解決策は得られませんでした。
ここに私のラムダコードがあります:
var AWS = require('aws-sdk');
var creds = new AWS.EnvironmentCredentials('AWS');
var http = require('http');
exports.handler = async (event, context) => {
return new Promise((resolve, reject) => {
const options = {
hostname: 'XXX_ES_DOMAIN.eu-central-1.es.amazonaws.com',
path: '/path/1',
method: 'POST'
};
const req = http.request(options, (res) => {
resolve('Success');
});
var signer = new AWS.Signers.V4(req, 'es');
signer.addAuthorization(creds, new Date());
req.on('error', (e) => {
reject(e.message);
});
// send the request
req.write(JSON.stringify({ 'test': 'test' }));
req.end();
});
};