我在AWS中有一些lambda函数(node.js),它们将连接到postgresql并进行一些查询并返回结果,所以我试图为数据库创建一个配置文件,其中包含用户,密码,数据库name,port ...那么将共享配置文件共享给所有lambda函数的最佳方法是什么?
答案 0 :(得分:1)
AWS为此提供了两种服务。
AWS Secrets Manager是最新的服务,它具有版本控制的机密并自动旋转密钥。
您可以将其存储为单个键或组合所有键,将它们存储为一个键。
Secrets Manager示例:
https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/SecretsManager.html#getSecretValue-property
var params = {
SecretId: "MyTestDatabaseSecret",
VersionStage: "AWSPREVIOUS"
};
secretsmanager.getSecretValue(params, function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
else console.log(data); // successful response
/*
data = {
ARN: "arn:aws:secretsmanager:us-west-2:123456789012:secret:MyTestDatabaseSecret-a1b2c3",
CreatedDate: <Date Representation>,
Name: "MyTestDatabaseSecret",
SecretString: "{\n \"username\":\"david\",\n \"password\":\"BnQw&XDWgaEeT9XGTT29\"\n}\n",
VersionId: "EXAMPLE1-90ab-cdef-fedc-ba987SECRET1",
VersionStages: [
"AWSPREVIOUS"
]
}
*/
});
Systems Manager参数存储:
https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/SSM.html#getParameter-property
var params = {
Name: 'STRING_VALUE', /* required */
WithDecryption: true || false
};
ssm.getParameter(params, function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
else console.log(data); // successful response
});
<强> EDIT1:强>
为了从公共存储共享公共文件,现在不可能。您可以将文件存储在s3中并从那里拉出来。这将是一个沉重的冷启动。
答案 1 :(得分:1)
可以使用Layers在不同的Lambda函数之间共享通用文件。您可以为图层创建zip文件,几乎与为功能创建zip文件的方法相同。
该图层包看起来或多或少是这样的:
your-lambda-layer.zip
└ nodejs/node_modules/shared-package
在代码中可以这样引用:
const shared = require('shared-package');
shared-package
可以包含您的代码或配置。
答案 2 :(得分:0)
使用AWS::Lambda::LayerVersion
或AWS::Serverless::LayerVersion
在AWS Lambda Layer中定义共享代码,然后在lambda函数中对其进行引用。例如,使用AWS SAM:
MyFunction:
Type: AWS::Serverless::Function
Properties:
CodeUri: function_code/
Handler: app.lambda_handler
Runtime: nodejs8.10
Layers:
- !Ref MySharedLayer
MySharedLayer:
Type: AWS::Serverless::LayerVersion
Properties:
LayerName: SharedLayerName
Description: Some shared code
ContentUri: layer_code/
CompatibleRuntimes:
- nodejs8.10
LicenseInfo: 'My License'
RetentionPolicy: Retain
图层代码将在/opt
文件夹中提供,并且可以包含在您的lambda函数中。