我创建了一个AWS-Lambda函数,它向客户发送FCM推送通知,然后将记录(通过存储过程)插入MSSql数据库。它运行良好,但我必须维护2个项目,一个用于开发目的的本地数据库凭据,另一个用于使用实时服务器的数据库凭证进行生产的功能。
注意:我已将数据库凭据和其他配置文件存储在项目中的c#类中。
在vs17中是否有任何方法只需更改“发布到AWS Lambda”对话框中的任何设置来部署该功能,这样我就不必维护两个独立的项目?
谢谢,
答案 0 :(得分:1)
可以从Environment Variables中读取Sensitive和RuntimeEnvironment特定数据,AWS Lambda也支持它。
您可以使用配置文件和变量(serverless framework)轻松实现example。
毕竟它归结为简单的命令:
$ serverless deploy --stage Prod //使用指定的配置文件来设置环境变量
$ serverless deploy --stage Dev
它的作用是根据cli选项在部署时设置环境变量。所以在你的代码中你从环境变量中读取了ConnectionString。
如果没有无服务器框架,您也可以实现这一目标。
为此,您必须在部署时自己定义环境变量,或者在AWS控制台(您知道是Prod或Dev或......)中的Lambda函数上进行硬编码。
然后,您必须直接在应用程序中阅读它,如Environment.GetEnvironmentVariable("ConnectionString")
而是直接阅读我选择做的是使用Microsoft Extensions来引导我的函数。
IConfigurationRoot configuration = GetConfiguration();
// Read values from appsettings{Env}.json file.
var connString = configuration.GetSection("ConnectionStringField"))
private static IConfigurationRoot GetConfiguration()
{
var environmentName = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
Console.WriteLine("EnvironmentName: " + environmentName);
return new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory() + "/AppSettings")
.AddJsonFile($"appsettings.json", optional: true)
.AddJsonFile($"appsettings.{environmentName}.json", optional: true)
.Build();
}
所以我在同一个项目中为每个阶段(Prod,Dev ...)保留单独的文件。在运行期间从适当的json文件中读取敏感数据。 您可以更多地了解如何在.net核心上进行更好的DependecyInjection和配置。 Example1,Example2