我只有很少的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循环仅迭代一次并停止执行。关于如何依次调用所有功能的任何想法。
答案 0 :(得分:2)
使用SQS队列顺序调用lambda函数不是一个好主意。虽然我认为您可能可以使其正常运行,但这绝对不是正确的方法,并且您需要自己处理很多不必要的东西。
AWS为您提供了一种非常清晰的方式来使用状态机处理这种情况,该状态机称为“步骤功能”。使用Step Functions,您可以对lambda执行顺序流进行建模,而无需任何额外的操作开销,并且它为您提供了一个漂亮的图形,您可以在其中查看流程的执行准确度以及错误执行失败的位置。
答案 1 :(得分:0)
没有为此使用Lambda函数。如果您要从一个lambda调用另一个lambda,则可以使用AWS step函数,您可以对其进行调优以进行顺序调用(具有一些解决方法和状态机配置)。请注意这些Step Function,因为它们不是用于大数据传输的(如果我没记错的话,有效负载的最大大小为1MB),并且如果需要更大的大小,则必须使用S3(基本上是AWS的存储服务)。