我正在开发我的第一个AWS无服务器Python应用程序,我需要一个在实际进入lambda处理程序之前处理和检查一些HTTP请求头的程序
这可以概括为以下内容(初步验证步骤):
def handler(event, context):
# preliminary auth steps - start
auth_header = event["headers"].get("Authorization")
if any([not auth_header, not is_auth_header_value_valid(auth_header)]):
return {
'statusCode': 401,
'body': json.dumps("Unauthorized access"),
'headers': {
'Content-Type': 'application/json',
},
}
# preliminary auth steps - end
try:
rsp = do_stuff()
status_code = 200
except Exception as e:
rsp = str(e)
status_code = 500
data = {
'statusCode': 200,
'body': json.dumps(rsp),
'headers': {
'Content-Type': 'application/json',
},
}
return data
但我不想对每个lambda处理程序重复(复制和粘贴)。 来自Django的背景,我习惯于Django中间件当涉及到这类事情时,我想知道我们如何在这里做类似的事情。 有什么建议吗
有两种方法可以实现这一点
第一个选项对我们来说是API Gateway Lambda authorizer。但这需要使用API网关。有一些事情可以开箱即用,或者您可以提供自定义授权器Lambda,您必须自己构建。这个Lambda可以执行任何您想要授权传入请求的操作。这实际上与Django中间件相同
第二个选项是Lambda Layers。您可以使用这些函数在Lambda函数之间共享公共代码。您可以使用上面的代码创建一个包含授权方法的Lambda层,然后将该层附加到所有需要该层的Lambda。也许是这个
就我个人而言,我认为API授权人是更好的生产选择。我们经常使用它们。但它们增加了复杂性和成本。Lambda层可能适合较小的项目
相关问题 更多 >
编程相关推荐