无服务器框架 Api 网关类型错误

时间:2021-01-26 20:01:09

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

我有一个无服务器模板,其中包含一个带有 API 网关的 lambda 函数。我已经在模板中包含了一个 api 密钥。一切都部署正常,但最后我仍然收到以下类型错误:

TypeError: Cannot read property 'apiKeys' of undefined

我真的找不到任何好的解决方案来解决这个问题。这是我的无服务器模板示例,其中包含 apikey:

plugins:
  - serverless-add-api-key
provider:
  name: aws
  timeout: 30 # Because API Gateway
  runtime: python3.8
  region: us-east-1
  apiGateway:
    apiKeys:
      - MyKey

我在这里遗漏了什么?

1 个答案:

答案 0 :(得分:1)

我猜您混淆了我们在使用和不使用 serverless-add-api-key 插件的情况下配置 api 密钥的方式。以下是不使用插件的有效 serverless.yml。

service: serverless-api-key

provider:
  name: aws
  stage: prod
  timeout: 30
  runtime: nodejs12.x
  apiGateway:
    apiKeys:
      - MyKey
functions:
  hello:
    handler: handler.hello
    events:
      - http:
          path: /hello
          method: get

sls 在下面部署输出 -

Service Information
service: serverless-api-key
stage: prod
region: ap-south-1
stack: serverless-api-key-prod
resources: 14
api keys:
  MyKey: Aeeblv4djg2AmlXXXXXXXXXXXXXX2fk9l4iCDRf
endpoints:
  GET - https://xxxxxxxx.execute-api.ap-south-1.amazonaws.com/prod/hello
functions:
  hello: serverless-api-key-prod-hello
layers:
  None

如果您仍想使用该插件,则需要获取正确的语法。您可以使用以下 serverless.yml -

service: serverless-api-key-2

plugins:
  - serverless-add-api-key
custom:
  apiKeys:
    - name: MyKey33

provider:
  name: aws
  stage: prod
  region: ap-south-1
  timeout: 30
  runtime: nodejs12.x
functions:
  hello:
    handler: handler.hello
    events:
      - http:
          path: /hello
          method: get