【问题标题】:AWS simple Lambda functionAWS 简单 Lambda 函数
【发布时间】:2019-06-30 23:29:10
【问题描述】:

我正在尝试学习 Lambda,但我正在努力使用一个简单的函数,该函数将字符串作为输入参数并将其大写:

它是用 C# 编写的。

    public class Function
    {
        public string FunctionHandler(string input, ILambdaContext context)
        {
            return input?.ToUpper();
        }
    }

然后,我使用 get 请求设置 API 网关。它在集成请求上有一个映射模板,如下所示:

{
    "input":$input.params("text")
}

我正在尝试通过 url 调用它:

https://xxxxxxx.execute-api.xxxxxxx.amazonaws.com/Prod?test=hello

但我得到一个错误返回:

{ “消息”:“无法将请求正文解析为 json:意外字符(\'}\'(代码 125)):应在 [Source: (byte[])\"{\n\n \"输入\":\n\n}\";行:5,列:2]"}

【问题讨论】:

  • 输入类型很可能是复杂对象。尝试反序列化它或定义类型。看看这个stackoverflow.com/questions/42115779/…
  • @joaofs 我认为这个例子是一个 POST 请求而不是一个只接受 url 参数的 GET。
  • 正确,但将是一个复杂的对象,里面有参数。最好的检查方法是将输入记录为字符串。您使用的是什么类型的集成? API 网关?
  • 您可以使用上下文记录输入消息:context.Logger.LogLine( string.Format("{0}:{1} - {2}", context.AwsRequestId, context.FunctionName, input));
  • @joaofs 感谢您回复我。是的,API 网关是 AWS 的一部分,它允许您为所有微服务创建 1 个标准网关。

标签: amazon-web-services aws-lambda aws-api-gateway


【解决方案1】:

正如 Joaofs 在 cmets 中所建议的那样,解决方法是将我的函数处理程序的输入设为复杂类型。然后它开始神奇地工作。

由于某种原因,传递原始字符串在我的本地机器上工作得很好(使用 SAMS 测试工具),但是在 AWS 中使用它时它不起作用。

这是我的新示例代码:

public string FunctionHandler(Employee input, ILambdaContext context)
{
   context.Logger.LogLine(string.Format("{0}:{1} - {2}", context.AwsRequestId, 
   context.FunctionName, input));
   return input.Name?.ToUpper();
}

以及员工类型定义:

public class Employee
{
   public string Name { get; set; }
}

【讨论】:

    猜你喜欢
    • 2020-04-25
    • 2018-02-23
    • 2017-11-14
    • 2015-08-18
    • 1970-01-01
    • 1970-01-01
    • 2020-05-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多