从 C# 中的另一个 lambda 函数调用 aws Lambda 函数

Ans*_*hri 5 .net c# asp.net-mvc aws-lambda

我是 C# aws lambda 函数的新手。我有两个 lambda 函数,我想从第二个函数调用一个 lambda 函数,我使用的代码如下:

public string Function1(JObject input)
{
    string param = input["param"].ToString();
    string param1 = input["param1"].ToString();
    return param.ToUpper()+" "+param1.ToUpper();
}


public string Function2()
{
    try
    {
        using (AmazonLambdaClient client = new AmazonLambdaClient(some region))
        {
            JObject ob = new JObject();
            ob.Add("param", "hello");
            ob.Add("param1", "Lambda");
            var request = new InvokeRequest
            {
                FunctionName = "Function1",
                Payload = ob.ToString()
            };
            var response = client.Invoke(request);
            string result;
            using (var sr = new StreamReader(response.Payload))
            {
                return result = sr.ReadToEnd();
            }
        }
    }
    catch (Exception ex) 
    {
        return ex.Message.ToString();
    }
}
Run Code Online (Sandbox Code Playgroud)

我收到如下错误:

{ "errorType": "TypeLoadException", "errorMessage": "无法从程序集 'System, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e, Retargetable=Yes' 加载类型 'System.Net.HttpStatusCode'。" , "stackTrace": [ "at AWSLambdaApp.Function.Function2()", "at lambda_method(Closure , Stream , Stream , ContextInfo )" ] }

在功能 2 应用程序中,我添加了“AWSSDK.Core”和“AWSSDK.Lambda”dll 的引用。谁能告诉我我做错了什么?

Rre*_*Cat 8

我的电脑上没有安装“netcoreapp1.0”。所以我尝试了“netcoreapp2.0”。

我的代码如下所示:

public string FunctionHandler(JObject input, ILambdaContext context)
{
    param = input["param"].Value<string>();
    param1 = input["param1"].Value<string>();
    param.ToUpper() + " " + param1.ToUpper();
}
Run Code Online (Sandbox Code Playgroud)

对于函数 2:

public async Task<string> FunctionHandler(string input, ILambdaContext context)
{
    try
    {
        using (AmazonLambdaClient client = new AmazonLambdaClient(RegionEndpoint.USEast1))
        {
            JObject ob = new JObject { { "param", "hello" }, { "param1", "Lambda" } };

            var request = new InvokeRequest
            {
                FunctionName = "Function1",//Function1:v1 if you use alias
                Payload = ob.ToString()
            };

            var response = await client.InvokeAsync(request);

            using (var sr = new StreamReader(response.Payload))
            {
                return await sr.ReadToEndAsync();
            }
        }
    }
    catch (Exception ex)
    {
        return ex.Message;
    }
}
Run Code Online (Sandbox Code Playgroud)

并且执行的结果是"\"HELLO LAMBDA\""。

我的代码工作的原因可能是:

  • 如何从 Function1 中的输入获取参数。很有可能是这样。
  • 我的异步代码。我无法使用最新 SDK 的同步代码来调用 lambda。
  • .net core 的版本。

另外,我需要发送一个简单的字符串作为 Function2 的参数。