如何重用 AWS Lambda 函数?

How to reuse AWS Lambda functions?

我有一个 angular 应用程序 ERP,其设计目的是 运行 在不同的本地环境中针对不同的客户端,每个客户端都使用 AWS S3 托管。这些应用程序中的每一个都将拥有自己专用的 API 网关,使用 Lambda 函数指向 Amazon Aurora RDS 中各自的 PostgreSQL 数据库。我目前使用的Lambda函数指向单个数据库,示例如下:

var pg = require("pg");

exports.handler = function(event, context) {

    var conn = "//Connection string to a single PostgreSQL DB in Amazon Aurora RDS (postgres://username:password@url.region.amazonaws.com:port/dbname)";
    var client = new pg.Client(conn);
    client.connect();

    //var id = event.id;
    
    console.log('Connected to PostgreSQL database');

    var query = client.query(`//SQL Query`);
    console.log(query);
    
    query.on("row", function (row, result) {
        result.addRow(row);
    });
    
    query.on("end", function (result) {
        var jsonString = JSON.stringify(result.rows);
        var jsonObj = JSON.parse(jsonString);
        console.log(jsonString);
        client.end();
        context.succeed(jsonObj);
    });
};

如何将这些 Lambda 函数转换为服务(Functions-as-a-service,FaaS),以便我可以在不同的 API 网关中重用相同的函数,这些网关指向它们各自的数据库(所有具有相同结构和表格的)?

由于您的不同客户端有不同的 API 网关,因此您可以使用 Stage Variables.

例如,假设您有两个客户,分别是 Awesome AlesGreat Gins。对于这两个阶段,每个阶段都有两个阶段,称为 StagingProduction。您希望为每个客户端和每个阶段使用不同的 RDS 数据库。

Client Staging Production
Awesome Ales awesome_ales_staging awesome_ales_production
Great Gins great_gins_staging great_gins_production

现在您需要将这些名称的名称设置为它们各自的客户端和阶段的阶段变量,然后在您的 Lambda 中,您从 Lambdas event.

如果您为 Lambda 使用代理集成并且您的阶段变量称为 dbname,它将可以作为 event.stageVariables.dbname:

访问
exports.handler = function(event, context) {
    const dbname = event.stageVariables.dbname
    var conn = "postgres://username:password@url.region.amazonaws.com:port/" + dbname;
    var client = new pg.Client(conn);
}