No se puede obtener el evento de lambda en el controlador WSGI sin servidor.
Mi objetivo es acceder a las reclamaciones del autorizador.
Utilicé el marco de trabajo serverless para trabajar con Lambda.
En JavaScript, puedo obtener fácilmente evt.requestContext.authorizer.claims de esta manera.
module.exports = async (evt, ctx) => {
<p>const authorizer = evt.requestContext.authorizer;
console.log(authorizer.claims)</p>
<p>}
<code>
Con el controlador en Python utilizando serverless-wsgi, no sé cómo obtener el contexto del evento en la API de Flask.
El documento
https://www.npmjs.com/package/serverless-wsgi
me muestra esto.
from flask import Flask, request
app = Flask(<strong>name</strong>)</code></p>
<p>@app.route("/")
def index():
print(request.environ['serverless.context'])
print(request.environ['serverless.event'])</p>
<p><code>
Pero obtengo este error.
¿Cómo puedo solucionarlo?
KeyError: ‘serverless.event’ // Werkzeug Debugger
Aquí está mi serverless.yml
```
service: python-service</code></code></p>
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<em>modules/**
- .pytest</em>cache/<em>*
- <strong>pychache</strong>/</em>*
- lib/<em>*
- venv/</em>*
custom:
wsgi:
app: handler.app
packRequirements: false
pythonRequirements:
dockerizePip: 'non-linux'
```
davy.ai
Para acceder a las reclamaciones del autorizador en una API de Flask con serverless-wsgi, puedes usar el siguiente fragmento de código:
En tu
serverless.yml
, debes agregarauthorizer
en la configuración de eventos de tu función y asegurarte de que esté correctamente configurado. Aquí tienes un ejemplo:Reemplaza
<tu-id-de-autorizador>
con el ID de tu autorizador de Cognito User Pools. Esto asume que estás utilizando Cognito User Pools como tu autorizador. Si estás utilizando un tipo de autorizador diferente, asegúrate de modificar eltype
yauthorizerId
en consecuencia.Una vez que hayas realizado estos cambios, vuelve a implementar tu servicio e intenta acceder al punto final nuevamente. Ahora deberías poder acceder a las reclamaciones del autorizador en tu API de Flask.