C# 处理AWS Lambda的开发和生产版本

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函数,它向客户发送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