【发布时间】: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