9

我想在我的 Azure 部署中部署不同的 VM 大小,具体取决于目标云服务(例如,我希望在生产中使用更大的实例,但在测试中可以使用较小的实例)。在 Visual Studio 2010 中,所有服务配置的大小必须相同。

是否有解决方法,或者这就是它的方式?

4

3 回答 3

2

我发现最好的解决方法是拥有两个不同的云项目。所以基本上你只需创建两个不同的云项目,将所有相同的角色添加到每个项目中,但每个项目都有不同的配置。每次更改时,您只需要小心更新这两个地方的所有配置。正如 Brent the Programming Simian 已经提到的那样,这相当于拥有两个 CSDEF,这只是实现这一目标的具体方法。

这也为您提供了其他方面的灵活性。例如,您可以拥有一个同时具有 HTTP 和 HTTPS 端点的测试站点,但生产站点只能具有 HTTPS。

于 2012-08-17T20:18:35.310 回答
0

VM 大小在服务定义文件中声明。所以创建不同大小的云服务包需要不同的包。最终,这不是视觉工作室支持的东西。

除此之外,如果您正在创建云服务 (PaaS),我会质疑为什么需要这样做。我收到的最佳指导是运行您需要的最小 VM,并根据负载要求运行尽可能多的 VM。通过拥有更多、更小的实例,您的解决方案最终具有更大的弹性。

于 2012-08-17T17:26:15.180 回答
0

我进一步评论,但认为我会为我的解决方案提供 powershell。我在构建我的 CI 服务器(恰好是 TeamCity)之前运行它,但这可以在本地或 CI 上运行。

Param(
    [string]$RoleType,  #WebRole or WorkerRole
    [string]$RoleName,  #RoleName from CSDEF
    [string]$VMInstanceSizeIn,  #Options for VM Size: Small, Medium, Large, ExtraLarge, A6, A7
    [string]$csDefPath  #File path for ServiceDefinition.csdef for the cloud service project
)

$timeStampFormat = "g"
if ($VMInstanceSizeIn -eq $null) {$VMInstanceSizeIn = "Medium"}

Write-Output "$(Get-Date -f $timeStampFormat) - Setting $RoleType role type with RoleName $RoleName VM Size to $VMInstanceSizeIn in ServiceDefinition.csdef prior to building the package file."

Try 
{
    $csDefConfig = "$csDefPath\ServiceDefinition.csdef"
    Write-Output "$(Get-Date -f $timeStampFormat) - config file location: $csDefConfig"
    $csDefConfigXml = [xml](Get-Content $csDefConfig)
    Write-Output "$(Get-Date -f $timeStampFormat) - Found ServiceDefinition File at $csDefConfig"
    $csDefCurrentXmlNode = $csDefConfigXml.ServiceDefinition.$RoleType | where {$_.Name -eq $RoleName}
    $csDefCurrentXmlNode.SetAttribute("vmsize", $VMInstanceSizeIn)
    $csDefConfigXml.Save($csDefConfig)
    Write-Output "$(Get-Date -f $timeStampFormat) - Successfully saved the ServiceDefinition.csdef file to $csDefConfig"
}

Catch
{
    Write-Output "$(Get-Date -f $timeStampFormat) - Powershell Script Error. An error occurred while attempting to modify the ServiceDefinition.csdef file prior to building the solution."  
    Write-Error -ErrorRecord $_
    ##teamcity[buildStatus status='FAILURE' ]
    exit(1)
}

请注意,在撰写本文时,我只需要处理一个 web 和 worker 角色,所以我不确定是否曾经使用多个 worker 角色进行过测试。至少应该足以让您入门。

于 2016-12-02T17:09:58.150 回答