在Azure VIP交换期间更改连接字符串是否可能?

6
我正在尝试在Azure(9月工具包)中设置分别用于测试和生产的环境,并且我需要一个单独的测试和生产数据库 - 其中包含不同的连接字符串。显然,我可以通过Visual Studio中的web.config转换来实现这一点,但是是否有一种方法可以在VIP交换期间自动更改连接字符串 - 以便测试站点指向测试数据而生产站点指向生产数据?我希望不必进行两次部署。
2个回答

15

通过管理API和PowerShell Cmdlets,您可以自动化大量Azure平台操作,包括VIP切换和连接字符串更改。

以下是步骤:

  1. 将数据库连接字符串添加到ServiceConfiguration文件中。
  2. 修改应用程序逻辑,使用RoleEnvironment.GetConfigurationSettingValue而不是更常见的.NET config ConfigurationManager.ConnectionStrings API从Azure特定配置中读取连接字符串。
  3. 实现RoleEnvironmentChanging,以便在Azure服务配置更改时通知您的逻辑。在此处添加代码以使用RoleEnvironment.GetConfigurationSettingValue更新应用程序的连接字符串。
  4. 使用用于“staging”数据库连接字符串的ServiceConfiguration设置部署到暂存环境。
  5. 编写PowerShell脚本,调用VIP切换(基于Windows Azure Platform PowerShell Cmdlets 2.0中的Move-Deployment cmdlet构建),并使用包括“production”数据库连接字符串的新ServiceConfiguration文件调用配置更改(参见Set-DeploymentConfiguration)。

综合起来,步骤5将在单个自动化操作中执行VIP切换和连接字符串更新。


9
我不认为在进行 VIP 交换时角色本身会发生任何变化,而是会改变负载均衡器的配置。
因此,您的应用程序不会因此改变配置。我能想到的唯一可能性是 URL 在两者之间发生了变化。您可以实现代码,根据访问的 URL 选择两个连接字符串中的一个(假设我们只谈论 Web 角色),但这似乎有些混乱。
从根本上说,我认为问题在于暂存并不是一个独立的测试环境;它是进入生产的跳板。因此,微软的假设是配置不会发生变化。

1
是的,这正是我们发现的:“staging”在这里的意思是“即将上线”。我们有一个完全独立的环境,在不同的Azure订阅中进行测试。在部署之后但VIP交换之前,我们会启动“staging”环境来验证web.config转换和类似操作中是否存在简单错误 - 这也确保缓存已填充并且VM正确运行。 - Jeremy McGee
谢谢大家。看起来需要一个单独的测试环境。对此并不太满意,主要是基于成本考虑。 - Andiih
暂存区应该仅在“生产开关”被切换之前用于确保您的应用程序运行良好。+1 最后一段。 - Jonathan McIntire
我认为这是生产的一个垫脚石。如果你想要一个测试环境,你就必须再启动另一个Web角色。这应该不是什么大问题,因为生产/预备角色的成本都是一样的。 - Craig
所以如果我理解你的解释正确的话,在数据库模式更改时绝对不应该使用VIP开关。在更新数据库之前,暂存区将被破坏,否则在更新数据库之后生产环境将会出现问题。这是假设一个常见的设置;下面的Andy有一个更为复杂的解决方法。 - Josh Mouch

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