将值配置到用Java编写的AWS Lambda中

时间:2016-02-03 15:35:41

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

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

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

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

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

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

2 个答案:

答案 0 :(得分:1)

随着环境变量的出现'对于AWS Lambda,使用相同的方法可以轻松实现。

所以使用'环境变量'是这种情况的方法

答案 1 :(得分:0)

我解决这个问题的方法是使用lambda函数的名称作为DynamoDB表的键。将部署信息部署到AWS时,部署信息将编码为lambda函数名称。

例如,首先将使用附加到名称的DEV标记部署lambda:

$ 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
 ...    |

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