将值配置到以 Java 编写的 AWS Lambda 中
Configuring values into AWS Lambda written in Java
我的要求是我需要编写一个 AWS Lambda 函数,该函数需要进行一些处理,然后调用 URL。这些 URL 会从一个堆栈到另一个堆栈。
所以在堆栈 1 Lambda 中 URL 可以是 http://do-something.com and in stack 2 the URL can be http://do-nothing.com
我会用 Jenkins 构建我的 Lambda jar,所以我不能将这些细节也放在 Lambda Jar 中
我的问题是在 Lambda 中配置这些东西的方法是什么。我能想到的一种方法是将 URL 放入标准存储桶中的文件中,Lambda 会在每次调用时读取它。似乎效率不高,因为它必须每次都读取它。
任何其他建议或推荐的良好做法。
我解决这个问题的方法是使用 lambda 函数的名称作为 DynamoDB 的键 table。当您将部署信息部署到 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中,从context中读取函数名,用于从config中读取table:
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
的 table,看起来像这样:
name | value
-------+-------------------------
url | http://do-something.com
... |
虽然与其余的 lambda 相比,对 DynamoDB(或 S3 等)的调用可能相对较慢,但实际上 lambda 函数得到重用。您可以在第一次调用时加载和缓存信息,并在后续调用中使用内存中的值。
随着 AWS Lambda 'Environment variables' 的出现,使用它可以轻松实现这一点。
所以使用 'Environment variables' 是应对这种情况的方法
我的要求是我需要编写一个 AWS Lambda 函数,该函数需要进行一些处理,然后调用 URL。这些 URL 会从一个堆栈到另一个堆栈。
所以在堆栈 1 Lambda 中 URL 可以是 http://do-something.com and in stack 2 the URL can be http://do-nothing.com
我会用 Jenkins 构建我的 Lambda jar,所以我不能将这些细节也放在 Lambda Jar 中
我的问题是在 Lambda 中配置这些东西的方法是什么。我能想到的一种方法是将 URL 放入标准存储桶中的文件中,Lambda 会在每次调用时读取它。似乎效率不高,因为它必须每次都读取它。
任何其他建议或推荐的良好做法。
我解决这个问题的方法是使用 lambda 函数的名称作为 DynamoDB 的键 table。当您将部署信息部署到 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中,从context中读取函数名,用于从config中读取table:
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
的 table,看起来像这样:
name | value
-------+-------------------------
url | http://do-something.com
... |
虽然与其余的 lambda 相比,对 DynamoDB(或 S3 等)的调用可能相对较慢,但实际上 lambda 函数得到重用。您可以在第一次调用时加载和缓存信息,并在后续调用中使用内存中的值。
随着 AWS Lambda 'Environment variables' 的出现,使用它可以轻松实现这一点。
所以使用 'Environment variables' 是应对这种情况的方法