【问题标题】:How to pass and retrieve multiple parameters in lambda function?如何在 lambda 函数中传递和检索多个参数?
【发布时间】:2020-12-04 04:10:10
【问题描述】:

我目前正在使用带有 python 和 dynamoDB 的无服务器框架开发一个 REST API。我想知道如何在我的 lambda 函数中传递和检索参数。我在serverless.xml 上的配置如下:

getNearestConvenios:
  handler: src/controllers/convenio_controller.get_nearest_convenios
  events:
    - http:
        path: convenios/nearest
        method: get
        cors: True
        request:
          template:
            application/json: '{ "lat" : "$input.params(''lat'')",  "long" : "$input.params(''long'')"}'

我正在尝试像这样检索参数:

def get_nearest_convenios(event, context):
  try:
    parameters = event['pathParameters']
    convenios = service.get_nearest_convenios(parameters['lat'], parameters['long'])
    return http.ok(convenios)
  except Exception as ex:
    logger.warn("WARNING: Request id: {0}, Error: {1}, Info: {2}".format(context.aws_request_id, type(ex), ex.args))
    return http.bad_request(str(ex))

我按照官方文档上提供的Custom Request Templates,但是到现在都没有成功。此外,在 CloudWatch 中显示以下错误:

    [WARNING]   2020-08-14T09:04:11.783Z    3c9222b2-4601-4460-ba7c-3cd89ba3b04b    WARNING: Request id: 3c9222b2-4601-4460-ba7c-3cd89ba3b04b, Error: <class 'TypeError'>, Info: ("'NoneType' object is not subscriptable",)

【问题讨论】:

    标签: python amazon-web-services aws-lambda serverless-framework aws-serverless


    【解决方案1】:

    您没有在 lambda 中指定任何集成类型,因此它将使用默认的 lambda-proxy 集成类型。在 Lambda 代理集成中,当客户端提交 API 请求时,API Gateway 按原样将原始请求传递给集成的 Lambda 函数。您不能将映射模板与 lambda-proxy 集成一起使用。如果您想转换您的请求或响应,您可以选择不带代理的 lambda 集成。

    您正在使用 HTTP GET。因此,您可以将数据作为查询字符串或路径参数传递。

    • 查询字符串:您在 url 中传递数据,例如 http://api.example.com/Books?id=1。查询字符串参数可以在 lambda 内部以 event. queryStringParameters 访问。

    • 路径参数:您可以在无服务器模板中定义一个参数,如下所示。然后您可以访问 lambda 中的路径参数,例如 event.pathParameters

      getNearestConvenios:
      handler: src/controllers/convenio_controller.get_nearest_convenios/{parameter}
      events:
        - http:
            path: convenios/nearest
            method: get
            cors: True
      

    参考: Lambda Proxy Integration

    【讨论】:

    • 非常感谢!我删除了映射模板的实现,并在“get_nearest_convenios”函数中将键“pathParameters”更改为“queryStringParameters”,它工作得很好! :)
    猜你喜欢
    • 2019-08-25
    • 2017-04-02
    • 2016-03-03
    • 1970-01-01
    • 2013-03-29
    • 1970-01-01
    • 1970-01-01
    • 2016-04-10
    • 2019-06-04
    相关资源
    最近更新 更多