AWS - 如何使用一个lambda函数公开多个API端点

时间:2018-02-20 14:04:15

标签: aws-lambda aws-api-gateway

我有以下Lambda功能:

using Amazon.Lambda.Core;

// Assembly attribute to enable the Lambda function's JSON input to be converted into a .NET class.
[assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.Json.JsonSerializer))]

namespace AWSLambdaAPI
{
    public class Function
    {

        /// <summary>
        /// A simple function that takes a string and does a ToUpper
        /// </summary>
        /// <param name="input"></param>
        /// <param name="context"></param>
        /// <returns></returns>
        public object FunctionHandler(string input, ILambdaContext context)
        {
            return new { FirstName = "William Smith" };
        }
    }
}

我使用AWS Gateway API创建对此Lambda函数的POST调用。

我的问题是:是否可以只使用一个Lambda函数来公开多个API方法?或者我必须为我想要曝光的每种方法创建一个Lambda。

  

例如:如果我有一个将验证登录的方法,然后是将一些对象插入S3的其他方法,我可以在单个Lambda函数中执行此操作吗?

1 个答案:

答案 0 :(得分:0)

您可以使用单个API网关端点来处理不同的方法,但这取决于用例。他们是:

  1. 如果您使用的所有方法都在流程中,即一个接一个,您有两个选择:

    • 使用 AWS步骤函数,它将在序列AWS Step function中执行不同的lambda函数。因此我们可以使用API​​网关触发lambda函数,您可以命令lambda函数按顺序执行。然后我们只需要一个API网关来触发你的所有lambda函数,这些函数将按照我们指定的顺序执行。但缺点是,如果我们的AWS步骤功能返回我们必须每次轮询以查看该状态是否处于运行状态或已完成。 AWS Step功能以异步方式运行,因此它会在执行完成时为我们提供所需的响应。

    • 其他选项可以像一个lambda函数一样,它将调用一个函数,其中函数是普通函数。让我们说,在您的示例中,您的第一种方法是登录方法。因此,如果你想让你的lambda函数首先登录,然后将对象插入S3,你可以使用一个具有登录功能的lambda函数,如果它的确定,那么它将调用一个函数来处理要发送到的对象S3。我的很多人都使用这种技术,但我们需要跟踪上传的总jar大小。 AWS Lambda对我们上传的jar的大小有一些限制。 AWS Limit

  2. 如果上述情况不适合您,那么您必须为每种方法选择不同的lambda函数

  3.   

    注意:请不要直接链接不同的lambda函数。这不是正确的方法。请改用AWS Step功能。