Amazon web services aws-我应该创建两个lambda函数来处理dynamodb查询和非查询用例吗?

Amazon web services aws-我应该创建两个lambda函数来处理dynamodb查询和非查询用例吗?,amazon-web-services,aws-lambda,amazon-dynamodb,Amazon Web Services,Aws Lambda,Amazon Dynamodb,假设我有一张“横幅”表。 此表有两种可能的用例。 1.从表中获取所有横幅数据 我的lambda函数可能如下所示: 'use strict' const AWS = require('aws-sdk'); exports.handler = async function (event, context, callback) { const documentClient = new AWS.DynamoDB.DocumentClient(); let responseBody =

假设我有一张“横幅”表。
此表有两种可能的用例。

1.从表中获取所有横幅数据

我的lambda函数可能如下所示:

'use strict'
const AWS = require('aws-sdk');

exports.handler = async function (event, context, callback) {
    const documentClient = new AWS.DynamoDB.DocumentClient();

    let responseBody = "";
    let statusCode = 0;

    const params = {
        TableName : "Banner",
    };

    try{
        const data = await documentClient.scan(params).promise();
        responseBody = JSON.stringify(data.Items);
        statusCode = 200
    }catch(err){
        responseBody = `Unabel to get products: ${err}`;
        statusCode = 403
    }

    const response = {
        statusCode: statusCode,
        headers:{
            "Content-Type": "application/json",
            'Access-Control-Allow-Origin': '*', // Required for CORS support to work
        },
        body: responseBody
    }

    return response
}
2.按用户分区键查询/GSI

我可能需要根据条幅id或条幅标题进行查询,以获得相应的表。

起初,我想将这两个用户案例合并到一个lambda函数中。
直到我打开下面的帖子。

其中一条评论为我提供了一种对这2个用户案例进行动态查询的方法,但他/她还提到:

you are giving anyone invoke the request the ability to put any query in the request, that might put you vulnerable to some type of SQL Injection attacks.
这让我思考是否应该在两个lambda函数中分离这两个用户案例?

这类事情的一般做法是什么?

一般来说,如果“SQL注入”可以被阻止,最好将其分为两个函数,Lambda处理程序应该单独负责。如果您想重用代码,您可以创建一些可以使用公共代码创建的公共DAL。

一般来说,如果“SQL注入”可以被阻止,最好将其分为两个函数,Lambda处理程序应该是单独负责的。如果您想重用代码,您可以创建一些可以使用通用代码创建的通用DAL。

我认为这取决于个人偏好,但我建议将功能拆分为两个lambda

听起来您有两种访问模式:

  • 获取所有横幅
  • 按用户获取横幅
  • 我可能会使用两个单独的lambda来实现这些。如果我通过API公开此功能,我可能会创建两个端点:

  • 获取/获取横幅。(获取所有横幅)
  • 获取/users/[user\u id]/banner。(获取给定用户的所有横幅)
  • 这些端点中的每一个都将路由到它们自己的lambda,该lambda为特定请求提供服务。如果您使用一个lambda来服务请求,那么您必须在lambda中引入逻辑来确定您正在满足哪种类型的请求。我无法想象只使用一个lambda会得到什么


    让你的lambda代码集中在一个单一的职责上,这将使开发、测试和调试更容易。

    我认为这取决于个人偏好,但我建议将功能分成两个lambda

    听起来您有两种访问模式:

  • 获取所有横幅
  • 按用户获取横幅
  • 我可能会使用两个单独的lambda来实现这些。如果我通过API公开此功能,我可能会创建两个端点:

  • 获取/获取横幅。(获取所有横幅)
  • 获取/users/[user\u id]/banner。(获取给定用户的所有横幅)
  • 这些端点中的每一个都将路由到它们自己的lambda,该lambda为特定请求提供服务。如果您使用一个lambda来服务请求,那么您必须在lambda中引入逻辑来确定您正在满足哪种类型的请求。我无法想象只使用一个lambda会得到什么

    让你的lambda代码集中在一个单一的职责上,这将使开发、测试和调试变得更容易