如何轻松地将环境变量添加到多个Lambda函数?

时间:2017-09-21 08:41:40

标签: c# amazon-web-services environment-variables .net-core aws-lambda

我正在开发一个AWS无服务器应用程序,我是AWS的新手,所以请纠正这个问题中的任何误解。我们有大约30个lambda函数在RDS中托管的SQL数据库上执行基本的CRUD操作。我们使用EntityFramework Core来创建数据库。这意味着,为了使用数据库,lambda函数每个都需要访问EF连接字符串。我不想将连接字符串留在内存中(它包含明文密码)所以我把它放在加密的环境变量中。

我能弄清楚如何做到这一点的唯一方法是通过lambda管理控制台GUI将加密的环境变量分别添加到每个lambda函数中。这很乏味但是很有效。我现在已经改变了一点解决方案,我们需要一组不同的lambda函数,这些函数也需要添加环境变量,我不想再次手动执行。

我的问题:

是否有一种简单的方法可以添加所有lambda函数都可以访问的加密环境变量(或类似的东西)?有没有方法可以批量添加它们?我可以使用更高级别的变量吗?

我试图在亚马逊文档(here for example)中查找信息,但收效甚微。

4 个答案:

答案 0 :(得分:2)

Lambda只关心获取所需的环境变量,并且不负责集中管理环境变量。

您需要做的是在部署过程中处理环境变量。

您目前如何部署30个lambda函数?

如果您使用CodeBuild,它可以访问AWS EC2 Parameter Store,您可以在其中集中存储和管理敏感环境变量。

其他CI / CD工具也有自己的集中管理环境变量的方式。

<强>更新

您可以通过编程方式使用AWS EC2 Parameter Store。这意味着您可以在启动期间从Lambda函数内部检索存储的环境变量,因此您无需在部署时执行此操作。

如果在您的用例中可以实现,那么在部署时进行此操作仍然会更好。

答案 1 :(得分:2)

我不会将此称为解决方案而是解决您的问题。 您可以配置环境变量并将其存储到S3存储桶中。 在每个lambda中使用S3客户端,您可以读取您感兴趣的特定变量。 希望这会有所帮助。

答案 2 :(得分:0)

我建议在AWS控制台添加ConnectionString,不要在配置文件中使用生产连接字符串来避免这些问题。登录AWS控制台,转到lambda函数并添加连接字符串作为环境变量。 PS。万一你会遇到语法困难。如果您的json配置文件如下所示:

{
  "Settings":
    {
      "ConnectionString":"",
      "SomethingElse"
  }
}

使用此语法配置连接字符串:

Settings__ConnectionString

答案 3 :(得分:0)

我参加聚会迟到了。将您的连接字符串保存到 DynamoDB 表中并让每个 lambda 从中获取如何。我假设所有这些都使用一个连接字符串。大部分时间用于 SQL Server。