【问题标题】:Can't get lambda event in serverless wsgi handler无法在无服务器 wsgi 处理程序中获取 lambda 事件
【发布时间】:2022-01-04 09:24:51
【问题描述】:

我的目标是我想访问授权方的声明。 我使用无服务器框架来处理 lambda。 在 javascript 中,我可以像这样轻松获得 evt.requestContext.authorizer.claims。

module.exports = async (evt, ctx) => {
 
  const authorizer = evt.requestContext.authorizer;
  console.log(authorizer.claims)

}

通过使用 serverless-wsgi 的 python 处理程序,我不知道如何在烧瓶 API 中获取事件上下文。 来自文档 => https://www.npmjs.com/package/serverless-wsgi 像这样给我看。

from flask import Flask, request
app = Flask(__name__)


@app.route("/")
def index():
    print(request.environ['serverless.context'])
    print(request.environ['serverless.event'])

但是我收到了这个错误。 如何解决。

KeyError: 'serverless.event' // Werkzeug Debugger

这是我的 serverless.yml

service: python-service

projectDir: ../

plugins:
  - serverless-wsgi
  - serverless-python-requirements
  - serverless-plugin-resource-tagging

variablesResolutionMode: 20210326
useDotenv: true
provider:
  apiGateway: ${file(../serverless.common.yml):apiGateway}
  name: aws
  runtime: python3.7
  stage: ${opt:stage, 'dev'}
  region: ap-southeast-1
  versionFunctions: false
  memorySize: 1024
  timeout: 30
  logRetentionInDays: 14
  stackName: ${self:service}-${self:provider.stage}
  deploymentBucket: ${file(../serverless.common.yml):deploymentBucket}
  environment:
    NODE_ENV: ${self:provider.stage}
  vpc: ${file(../serverless.common.yml):vpc.${self:provider.stage}}
  iamRoleStatements:
    - ${file(../serverless.common.yml):iamGetSecretValue}
    - ${file(../serverless.common.yml):iamInvokeFunction}
     
functions:
  testDrive:
    handler: wsgi_handler.handler
    provisionedConcurrency: 1
    fileSystemConfig:
      arn: !GetAtt AccessPointResource.Arn
      localMountPath: /mnt/efs
    events:
      - http:
          path: testDrive/go
          method: post
          cors: ${file(../serverless.common.yml):cors.preflight.${self:provider.stage}}
          authorizer: ${file(../serverless.common.yml):authorizer}
  
package:
  exclude:
    - node_modules/**
    - .pytest_cache/**
    - __pychache__/**
    - lib/**
    - venv/**

custom:
  wsgi:
    app: handler.app
    packRequirements: false
  pythonRequirements:
    dockerizePip: 'non-linux'

【问题讨论】:

    标签: flask serverless wsgi


    【解决方案1】:

    如果您尝试在 naive flask 和 serverless-wsgi 中正确运行它, 你应该使用dict.get(key, default_value) 而不是dict[key]

    在您的情况下,只需像这样修改您的代码:

    from flask import Flask, request
    app = Flask(__name__)
    
    
    @app.route("/")
    def index():
        print(request.environ.get('serverless.context'))
        print(request.environ.get('serverless.event'))
        return 'here is content of web page'
    

    【讨论】:

      猜你喜欢
      • 2013-04-29
      • 2019-12-03
      • 2019-08-14
      • 1970-01-01
      • 2020-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-20
      相关资源
      最近更新 更多