我的目标是要访问授权人的声明。我使用了无服务器框架来使用lambda。在javascript中,我可以很容易地获得这样的evt.requestContext.authorizer.claims。
module.exports = async (evt, ctx) => {
const authorizer = evt.requestContext.authorizer;
console.log(authorizer.claims)
}使用使用无服务器wsgi的python处理程序,我不知道如何在flask中获取事件上下文。=> 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'发布于 2022-03-23 13:25:00
如果您试图在朴素的烧瓶和无服务器的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'https://stackoverflow.com/questions/70576559
复制相似问题