无服务器框架忽略 lambda 代理设置中的 "authorizer" 块

Serverless Framework ignoring "authorizer" block in lambda-proxy setup

我们有一个 serverless.yml 在 API 网关中创建一个 lambda 代理。

我见过几种将 Cognito 用户池授权方附加到 lambda 代理的方法,但其中 none 有效。在每种情况下,结果都是没有在 Proxy 或 Proxy+ 上设置任何身份验证。 (例如,在 API 网关控制台中,"Auth" 始终读取 "NONE"。)

示例:

    events:
      - http: ANY /
        integration: lambda-proxy
        authorizer:
          type: COGNITO_USER_POOLS
          authorizerId:
            Ref: CognitoUserPoolAuthorizer
      - http: ANY {proxy+}
        integration: lambda-proxy
        authorizer:
          arn: ${self:custom.userPools.arnBase}/${self:custom.userPools.ids.${self:custom.stage}}
          # The above results in the format: "arn:aws:cognito-idp:us-west-2:<account_id>:userpool/us-west-2_<user_pool_id>"

你可以在上面看到我正在尝试两种不同的方法来完成相同的任务。 (让我们试着把科学扔到墙上,看看有什么坚持。) 这两种方法都记录在不同的地方 by the serverless framework,但都没有关于 lambda 代理的记录,所以我不确定是否存在未记录的差异。

在第一种方法中(在资源上使用 Ref),资源已正确创建,但端点未附加任何身份验证。 (我没有在这里包括资源块,因为它按预期工作。)第二种方法具有相同的效果(但没有创建授权方)。

我们的s​​erverless framework版本是1.52,符合.

的要求

我也尝试过将 integration 设置为 lambda,或者完全不使用该行。结果在所有情况下都是相同的。

已经通过控制台手动选择授权方来实现这一点,但我们正试图消除这些手动步骤。

我们在这里缺少什么?

乍一看,您的 serverless.yml 文件的缩进似乎有问题。您可以使用 http 数组项下方的选项卡重试吗?

此外,您需要删除方法和路径的 shorthand,而是单独使用它们。下面的代码片段应该有效:

    events:
      - http:
          method: ANY
          path: /
          integration: lambda-proxy
          authorizer:
            type: COGNITO_USER_POOLS
            authorizerId:
              Ref: CognitoUserPoolAuthorizer
      - http:
          method: ANY
          path: /{proxy+}
          integration: lambda-proxy
          authorizer:
            arn: ${self:custom.userPools.arnBase}/${self:custom.userPools.ids.${self:custom.stage}}