我提到了这个问题。仍然没有答案。在创建新的 REST API 网关时,是否有办法直接从
serverless.yml
指向预先存在的 Lambda 函数?
从提到的问题来看,理想情况下可能是这样的:
functions:
someFunction:
arn: arn:aws:lambda:us-east-1:...
events:
- http:
...
为了成功编译您的
serverless.yml
文件,您必须向您的 someFunction
提供处理程序,否则您将收到错误。
错误:需要在函数“someFunction”上设置“handler”或“image”属性
解决方法: 您可以像这样简单地创建一个处理函数
otherLambdaInvoke.js
,然后尝试调用该 lambda ARN。您可以一次又一次地使用该处理函数。
const AWS = require('aws-sdk');
const lambda = new AWS.Lambda();
exports.handler = async (event, context) => {
const params = {
FunctionName: 'arn:aws:lambda:us-east-1:123456789012:function:your-function-name',
InvocationType: 'Event', // Asynchronous invocation
Payload: JSON.stringify({ key: 'value' }) // Optional payload
};
try {
// Invoke the Lambda function
await lambda.invoke(params).promise();
} catch (err) {
// handle error if any
console.error('Error invoking function:', err);
}
// other logics
};
在您的
serverless.yml
文件中您可以使用。
functions:
someFunction:
handler: /otherLambdaInvoke.handler
events:
- httpApi:
path: /...
method: any
someFunction2:
handler: /otherLambdaInvoke.handler
events:
- httpApi:
path: /...
method: any
...
注意: 不要忘记向该 lambda 函数授予调用
serverless.yml
文件中的 ARN 的权限。
provider:
iamRoleStatements:
- Effect: Allow
Action: lambda:InvokeFunction
Resource: "arn:aws:lambda:us-east-1:123456789012:function:your-function-name"