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

时间:2018-01-10 13:38:20

标签: c# visual-studio-2017 aws-lambda

我创建了一个AWS-Lambda函数,它向客户发送FCM推送通知,然后将记录(通过存储过程)插入MSSql数据库。它运行良好,但我必须维护2个项目,一个用于开发目的的本地数据库凭据,另一个用于使用实时服务器的数据库凭证进行生产的功能。

注意:我已将数据库凭据和其他配置文件存储在项目中的c#类中。

在vs17中是否有任何方法只需更改“发布到AWS Lambda”对话框中的任何设置来部署该功能,这样我就不必维护两个独立的项目?

谢谢,

1 个答案:

答案 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和配置。 Example1Example2