【问题标题】:How to reuse AWS Lambda functions?如何重用 AWS Lambda 函数?
【发布时间】:2020-12-23 06:02:02
【问题描述】:

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

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 网关中重用相同的函数(所有这些都具有相同的结构和表格)?

【问题讨论】:

    标签: amazon-web-services aws-lambda amazon-rds


    【解决方案1】:

    由于您为不同的客户端使用不同的 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 中,您从 Lambda 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);
    }
    

    【讨论】:

    • 当我尝试在 API 网关中将阶段变量添加到我的 lambda 函数时,我收到一条错误消息,提示“无法使用接收的参数构建 URI”。这意味着什么?
    • @NoohAhamad 请为此问题创建一个新问题。这几个细节真的很难判断正在发生的事情等等。
    猜你喜欢
    • 2017-12-26
    • 1970-01-01
    • 2019-10-30
    • 2016-03-25
    • 2018-10-03
    • 2017-11-29
    • 2021-12-17
    • 2021-06-24
    • 2016-09-18
    相关资源
    最近更新 更多