AWS SAM CLI-Python-授权中间件

AWS SAM CLI-Python-授权中间件,python,aws-lambda,boto3,aws-sam-cli,Python,Aws Lambda,Boto3,Aws Sam Cli,我正在开发我的第一个AWS无服务器Python应用程序,我需要一个在实际进入lambda处理程序之前处理和检查一些HTTP请求头的程序 这可以概括为以下内容(初步验证步骤): 但我不想对每个lambda处理程序重复(复制和粘贴)。 来自Django的背景,我习惯于Django中间件当涉及到这类事情时,我想知道我们如何在这里做类似的事情。 有什么建议吗?实现这一点有两种方法 第一个选择对我们来说是一个选择。但这需要使用API网关。有一些事情可以开箱即用,或者您可以提供自定义授权器Lambda,您必

我正在开发我的第一个AWS无服务器Python应用程序,我需要一个在实际进入lambda处理程序之前处理和检查一些HTTP请求头的程序

这可以概括为以下内容(初步验证步骤):

但我不想对每个lambda处理程序重复(复制和粘贴)。 来自Django的背景,我习惯于Django中间件当涉及到这类事情时,我想知道我们如何在这里做类似的事情。
有什么建议吗?

实现这一点有两种方法

第一个选择对我们来说是一个选择。但这需要使用API网关。有一些事情可以开箱即用,或者您可以提供自定义授权器Lambda,您必须自己构建。这个Lambda可以执行任何您想要授权传入请求的操作。这实际上与Django中间件相同

第二个选项是。您可以使用这些函数在Lambda函数之间共享公共代码。您可以使用上面的代码创建一个包含授权方法的Lambda层,然后将该层附加到所有需要该层的Lambda。也许是这个

就我个人而言,我认为API授权人是更好的生产选择。我们经常使用它们。但它们增加了复杂性和成本。Lambda层可能适合较小的项目

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