【问题标题】:Configuring values into AWS Lambda written in Java将值配置到用 Java 编写的 AWS Lambda
【发布时间】:2016-05-12 21:32:17
【问题描述】:

我的要求是我需要编写一个需要进行一些处理然后调用 URL 的 AWS Lambda 函数。这些 URL 将非常从堆栈到堆栈。

所以在堆栈 1 Lambda 中,URL 可以是 http://do-something.com,而在堆栈 2 中,URL 可以是 http://do-nothing.com

我会用 Jenkins 构建我的 Lambda jar,所以我不能将这些细节也放在 Lambda Jar 中

我的问题是在 Lambda 中配置这些东西的方法是什么。我能想到的一种方法是将 URL 放在标准存储桶中的文件中,Lambda 会在每次调用它时读取它。似乎效率不高,因为它必须每次都读取。

任何其他建议或推荐的良好做法。

【问题讨论】:

  • 如果没有 lambda,你会如何处理这个
  • 如果没有 Lambda,我会这样做,然后会有一个配置文件告诉我的应用程序要使用的 URL

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


【解决方案1】:

随着 AWS Lambda 的“环境变量”的出现,这可以很容易地使用它来实现。

因此使用“环境变量”是解决此类情况的方法

【讨论】:

    【解决方案2】:

    我解决此问题的方法是使用 lambda 函数的名称作为 DynamoDB 表的键。部署信息在您将其部署到 AWS 时被编码到 lambda 函数名称中。

    例如,首先将部署 lambda,并在名称上附加一个 DEV 标签:

    $ aws lambda update-function-code --function-name myLambda_DEV 
        --s3-bucket lambda_s3_release_bucket --s3-key myLambda-1.0.0.jar --publish
    

    然后在 lambda 中,从上下文中读取函数名并用于从配置表中读取:

    public Response handleRequest(Request request, Context context) {
        String functionName = context.getFunctionName();
        AmazonDynamoDBClient dbclient = new AmazonDynamoDBClient();
        DynamoDB configdb = new DynamoDB(dbclient);
        Table config = dynamoDB.getTable("config_" + functionName);
        String url = config.getItem("url");
        ...
    }
    

    DynamoDB 有一个名为 config_myLambda_DEV 的表,如下所示:

     name   | value
     -------+-------------------------
     url    |  http://do-something.com
     ...    |
    

    虽然与 lambda 的其余部分相比,对 DynamoDB(或 S3 等)的调用可能相对较慢,但实际上 lambda 函数会被重用。您可以在第一次调用时加载和缓存信息,并在后续调用中使用内存中的值。

    【讨论】:

    • 谢谢ataylor,这与我想的差不多,除了我计划使用S3而不是DynamoDB。您能否详细说明缓存部分。我不确定我们是否可以在 Lambda 中缓存任何内容,因为它们都是无状态的
    猜你喜欢
    • 2019-10-18
    • 1970-01-01
    • 2019-01-18
    • 2018-06-02
    • 2019-07-06
    • 1970-01-01
    • 2018-11-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多