如何在所有 lambda 函数中共享公共文件

dja*_*ngo 5 amazon-s3 amazon-web-services node.js aws-lambda

我在AWS中有一些lambda函数(node.js),它将连接到postgresql并执行一些查询并返回结果,所以我试图为数据库制作一个配置文件,其中包含用户,密码,数据库名称,端口...那么向所有 lambda 函数共享通用配置文件的最佳方式是什么?

Kan*_*yan 2

AWS 为此提供了两种服务。

  1. AWS 秘密管理器
  2. AWS Systems Manager 参数存储

AWS 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"
    ]
   }
   */
 });
Run Code Online (Sandbox Code Playgroud)

系统管理器参数存储:

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
});
Run Code Online (Sandbox Code Playgroud)

编辑1:

对于共享公共存储中的公共文件,现在是不可能的。您可以将文件存储在 s3 中并从那里提取。它将有一个严重的冷启动。