C# 处理AWS Lambda的开发和生产版本
我创建了一个AWS Lambda函数,它向客户发送FCM推送通知,然后(通过存储过程)向MSSql数据库插入一条记录。它工作得很好,但我必须维护2个项目,一个用于开发的函数使用本地数据库凭据,另一个用于生产的函数使用live server的数据库凭据 注意:我已将数据库凭据和其他配置文件存储在项目中的c#类中 在vs17中,是否有任何方法可以通过更改“Publish to AWS Lambda”对话框中的任何设置来部署deploy the函数,这样我就不必维护两个独立的项目C# 处理AWS Lambda的开发和生产版本,c#,visual-studio-2017,aws-lambda,C#,Visual Studio 2017,Aws Lambda,我创建了一个AWS Lambda函数,它向客户发送FCM推送通知,然后(通过存储过程)向MSSql数据库插入一条记录。它工作得很好,但我必须维护2个项目,一个用于开发的函数使用本地数据库凭据,另一个用于生产的函数使用live server的数据库凭据 注意:我已将数据库凭据和其他配置文件存储在项目中的c#类中 在vs17中,是否有任何方法可以通过更改“Publish to AWS Lambda”对话框中的任何设置来部署deploy the函数,这样我就不必维护两个独立的项目 谢谢,可以从环境变量
谢谢,可以从环境变量中读取特定于环境的敏感数据和运行时数据,AWS Lambda对此提供了支持 您可以通过配置文件和变量()轻松实现它 毕竟,它归结为简单的命令: $serverless deploy--stage Prod//使用指定的配置文件设置环境变量 $serverless部署--阶段开发 它所做的是根据cli选项在部署时设置环境变量。因此,在代码中,您可以从环境变量中读取ConnectionString 您也可以在没有无服务器框架的情况下实现这一点。 为此,您必须在部署时自己定义环境变量,或者在AWS控制台中的Lambda函数上硬编码(您知道它是Prod或Dev或…)。 然后您必须在应用程序中直接读取它,就像
Environment.GetEnvironmentVariable(“ConnectionString”)
与其直接阅读,我选择做的是引导我的函数,比如使用Microsoft扩展
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 core上更好地进行DependecyInjection和配置 您可以将预编译指令与
#if DEBUG
和#if RELEASE