在将二进制数据传递到使用无服务器框架和apigw-binary插件部署的AWS Lambda函数时出现“内部服务器错误”

时间:2019-11-18 07:02:02

标签: aws-lambda binary aws-api-gateway serverless-framework

我在尝试什么

通过API网关中的Lambda集成传递二进制数据。 Lambda返回文本。

问题

从控制台配置API网关时,该函数返回所需的输出。为了使用无服务器框架实现它,我安装了 serverless-apigw-binary 插件。所需的二进制类型显示在API网关>设置>二进制媒体类型中。但是,在调用API时出现“内部服务器错误”。该功能可在application / json类型输入上正常运行。在启用禁用lambda代理集成并通过控制台添加映射之后,我得到了正确的输出。

serverless.yml文件

org: ------
app: ---------
service: ---------
frameworkVersion: ">=1.34.0 <2.0.0"

plugins:
  - serverless-python-requirements
  - serverless-offline
  - serverless-apigw-binary
provider:
  name: aws
  runtime: python3.7 #fixed with pipenv
  region: us-east-1
  memorySize: 128
  timeout: 60
  profile: ----

custom:
  pythonRequirements:
    usePipenv: true
    useDownloadCache: true
    useStaticCache: true
  apigwBinary:
    types:           #list of mime-types
      - 'application/octet-stream'
      - 'application/zip'


functions:
  main:
    handler: handler.main
    events:
      - http:
          path: ocr
          method: post
          integration: lambda
          request:
            passThrough: WHEN_NO_TEMPLATES
            template:
              application/zip: '
              {
                  "type": "zip",
                  "zip": "$input.body",
                  "lang": "$input.params(''lang'')",
                  "config": "$input.params(''config'')",
                  "output_type": "$input.params(''output_type'')"
              }'
              application/json: '
              {
                  "type": "json",
                  "image": $input.json(''$.image''),
                  "lang": "$input.params(''lang'')",
                  "config": "$input.params(''config'')",
                  "output_type": "$input.params(''output_type'')"
              }'
              application/octet-stream: '
              {
                  "type": "img_file",
                  "image": "$input.body",
                  "lang": "$input.params(''lang'')",
                  "config": "$input.params(''config'')",
                  "output_type": "$input.params(''output_type'')"
              }'

handler.py

def main(event, context):
    # do something on event and get txt
    return txt

编辑

我比较了昂首阔步的定义,发现了这个
1.从控制台(工作)生成的API

paths:
  /ocr:
    post:
      consumes:
      - "application/octet-stream"
      produces:
      - "application/json"
      responses:
  1. 从无服务器框架生成的API
paths:
  /ocr:
    post:
      consumes:
      - "application/x-www-form-urlencoded"
      - "application/zip"
      - "application/octet-stream"
      - "application/json"
      responses:

产生:-缺少“ application / json” 。如何在无服务器中添加它?

0 个答案:

没有答案