SAM アプリケーション内に複数の機能を持つアプリケーションを作成しています。AWS Lambda call Lambdaと同様のコードを使用して、AWS に既にデプロイされているラムダ関数を呼び出すことができますが、ローカル関数では機能しません。https://github.com/awslabs/aws-sam-cli/issues/510から試してみましたが、まだ何も機能していないようです。
sam local start-lambda --host 172.17.0.1
これは私がこれまでに得た最も近いものです (ホストが docker ネットワーク内のどこにあるかが必要です)
var AWS = require("aws-sdk");
exports.lambdaHandler = async (event, context) => {
let lambda = new AWS.Lambda({});
if (process.env.AWS_SAM_LOCAL) {
var ep = new AWS.Endpoint("http://172.17.0.1:3001");
lambda = new AWS.Lambda({ endpoint: ep });
}
const body = await new Promise(r => {
lambda.invokeAsync(
{
FunctionName: "myFunction",
InvokeArgs: JSON.stringify({ arguments: "for other function" })
},
function(err, data) {
if (err) console.log(err, err.stack);
else console.log(data);
r(data);
}
);
});
response = {
statusCode: 200,
body: JSON.stringify(body)
};
return response;
};
少なくともいくつかのアクティビティが表示されますが、エラーが発生しますinvokeAsync
PathNotFoundLocally: PathNotFoundException\n at Object.extractError (/var/task/node_modules/aws-sdk/lib/protocol/json.js:51:27)\n
start-lambda コンソールのこのエラー
2019-12-20 16:07:02 172.17.0.7 - - [20/Dec/2019 16:07:02] "POST /2014-11-13/functions/myFunction/invoke-async/ HTTP/1.1" 404 -
アップデート:
この質問の最初のバージョンで発生したsslエラーを修正できました。同期モードで動作するようですlambda.invoke