如何在C#的AWS Lambda项目中设置和获取环境变量

17

我在 C# 中创建了 AWS Lambda 项目(不是无服务器应用程序)。

输入图像描述

我在 aws-lambda-tools-defaults.json 中定义了一个环境变量,如下所示:

"environment-variables": {
 "my-api": "http://myapihost.com/api/attendance-backfill"
 }
在Function.cs中,按如下方式获取值。
   var apiUrl = Environment.GetEnvironmentVariable("my-api").ToString();

但它总是返回null

我如何设置和获取环境变量?

谢谢!

按照评论中的建议。

launch-settings.json

Function.cs

3个回答

28

这很接近了,但经过一番搜索,我找到了如何使用Mock Lambda测试工具为本地运行设置它们的方法。实际上,它位于launchSettings.json文件中。您希望将设置放置在profiles节点的Mock Lambda测试工具部分内而非外部。

{
 "profiles": {
  "Mock Lambda Test Tool": {
   "commandName": "Executable",
   "commandLineArgs": "--port 5050",
   "workingDirectory": ".\\bin\\Debug\\netcoreapp2.1",
   "executablePath": "C:\\Users\\%USERNAME%\\.dotnet\\tools\\dotnet-lambda-test-tool-2.1.exe",
   "environmentVariables": {
     "environment": "test"
   }
  }
 }
}

13
  1. 设置环境变量 文档

您需要在两个地方设置环境变量:开发时和部署时。为此,请从“解决方案资源管理器”下的“属性”文件夹中打开launchSettings.json文件。然后添加以下JSON属性:

    "environmentVariables": {
      "my-api": "something"
    }

若要在部署时设置环境变量,您可以将其添加到aws-lambda-tools-defaults.json文件中。(只需记得转义双引号。)

    environment-variables, its format is: "<key1>=<value1>;<key2>=<value2>;".

在您的情况下,您应该拥有

    "environment-variables" : "\"my-api\"=\"http://myapihost.com/api/attendance-backfill\";"
  1. 获取环境变量

    在使用 C# 编写 Lambda 函数时,通过使用 System 库中的方法直观地获取并使用环境变量作为函数逻辑的一部分,具体操作请参考AWS 博客

System.Environment.GetEnvironmentVariable(<key>);

在您的情况下,您可以使用以下内容:

var apiUrl = System.Environment.GetEnvironmentVariable("my-api");
这份文档中,建议您获取环境变量的方法是正确的。
    var variableValue = Environment.GetEnvironmentVariable("nameOfVariable"); 

你尝试过只使用Environment.GetEnvironmentVariable("my-api")再试一次吗?确保你的环境变量已经正确配置。我找到了两个文档,它们略有不同:aws threadtwenty6 doc on lambda variables - marcincuber
1
System.Environment.GetEnvironmentVariable("my-api") 在 .json 文件中已经设置了值,但返回 null。 - Kgn-web
我更新了我的答案,并添加了一些文档。你能确认你已经修复了aws-lambda-tools-defaults.json文件,以便正确设置环境变量参数吗? - marcincuber
1
我添加了 launch-settings.json 和 Function.cs 的截图,但仍然得到 null 值。 - Kgn-web
2
对于遇到此问题的任何人,解决方法是在launchSettings.json中使用environmentVariables(而不是environment-variables)。 - Ash

0
这些解决方案有效。需要在两个地方设置环境变量:1)部署目的和2)使用模拟工具本地测试。
serverless.template文件 enter image description here launchSettings.json文件 enter image description here

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接