无服务器框架:从 REST API 网关指向预先存在的 Lambda 函数

问题描述 投票:0回答:1

我提到了这个问题。仍然没有答案。在创建新的 REST API 网关时,是否有办法直接从

serverless.yml
指向预先存在的 Lambda 函数?

从提到的问题来看,理想情况下可能是这样的:

functions:
someFunction:
    arn: arn:aws:lambda:us-east-1:...
    events:
        - http:
            ...
amazon-web-services serverless-framework
1个回答
0
投票

为了成功编译您的

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"
© www.soinside.com 2019 - 2024. All rights reserved.