首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法在无服务器的wsgi处理程序中获取lambda事件

问无法在无服务器的wsgi处理程序中获取lambda事件
EN

Stack Overflow用户
提问于 2022-01-04 09:24:51
回答 1查看 309关注 0票数 4

我的目标是要访问授权人的声明。我使用了无服务器框架来使用lambda。在javascript中,我可以很容易地获得这样的evt.requestContext.authorizer.claims。

代码语言:javascript
复制
module.exports = async (evt, ctx) => {
 
  const authorizer = evt.requestContext.authorizer;
  console.log(authorizer.claims)

}

使用使用无服务器wsgi的python处理程序,我不知道如何在flask中获取事件上下文。=> https://www.npmjs.com/package/serverless-wsgi给我看了这个。

代码语言:javascript
复制
from flask import Flask, request
app = Flask(__name__)


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

但我犯了个错误。如何修复它。

代码语言:javascript
复制
KeyError: 'serverless.event' // Werkzeug Debugger

这是我的serverless.yml

代码语言:javascript
复制
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'
EN

回答 1

Stack Overflow用户

发布于 2022-03-23 13:25:00

如果您试图在朴素的烧瓶和无服务器的wsgi中正确地运行它,您应该使用dict.get(key, default_value)而不是dict[key]。

在您的例子中,只需像这样修改代码:

代码语言:javascript
复制
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'
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70576559

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档