如何顺序运行AWS Lambda函数

时间:2019-03-08 05:27:21

标签: c# .net amazon-web-services aws-lambda aws-sdk

我只有很少的lambda函数,我想在C#中依次调用这些lambda函数。我创建了一个AWS队列,该队列在消息正文中包含lambda函数的名称。我使用for循环从表单队列接收到的每个消息来执行该功能。但是我的程序在执行第一个lambda函数后立即退出。

foreach (var message in response.Messages)
{
    Console.WriteLine("For message ID '" + message.MessageId + "':");
    Console.WriteLine("  Body: " + message.Body);

    if (message.Body == "Function1")
    {
        LambdaClient.InvokeAsync(new InvokeRequest
        {
            FunctionName = "Function1",
        }).Wait();
    }

    if (message.Body == "Function2")
    {
        LambdaClient.InvokeAsync(new InvokeRequest
        {
            FunctionName = "Function2",
        }).Wait();
    }
}

在此函数中,for循环仅迭代一次并停止执行。关于如何依次调用所有功能的任何想法。

2 个答案:

答案 0 :(得分:2)

使用SQS队列顺序调用lambda函数不是一个好主意。虽然我认为您可能可以使其正常运行,但这绝对不是正确的方法,并且您需要自己处理很多不必要的东西。

AWS为您提供了一种非常清晰的方式来使用状态机处理这种情况,该状态机称为“步骤功能”。使用Step Functions,您可以对lambda执行顺序流进行建模,而无需任何额外的操作开销,并且它为您提供了一个漂亮的图形,您可以在其中查看流程的执行准确度以及错误执行失败的位置。

答案 1 :(得分:0)

没有为此使用Lambda函数。如果您要从一个lambda调用另一个lambda,则可以使用AWS step函数,您可以对其进行调优以进行顺序调用(具有一些解决方法和状态机配置)。请注意这些Step Function,因为它们不是用于大数据传输的(如果我没记错的话,有效负载的最大大小为1MB),并且如果需要更大的大小,则必须使用S3(基本上是AWS的存储服务)。