如何限制 Azure 中的 WebRole 实例大小?

How to limit WebRole instance size in Azure?

我如何检查构建以确保不会意外上传无效的 VM 大小?

背景: 我最近意识到在 Azure 上无意中将 Azure WebRole 实例 VM 大小配置为 'expensive' 选项是多么容易。

冒着显得非常愚蠢的风险,对于那些感兴趣的人,我就是这样做的...我正在 Visual Studio 中探索我的 WebRole 的设置,并且我一定是将默认的单个 'ExtraSmall' (AO) VM 大小更改为多个 'ExtraLarge' (A4),这在下次部署时导致我的使用量猛增到每天很多美元,并且 运行 Azure 积分很快... Doh!!

这让我开始思考如何检查构建以确保不会意外上传无效的 VM 大小?

在考虑了各种 powershell 和 azure api 方法之后,我决定最快最简单的方法是在 Cloud Service 项目(具有 .csdef 文件的项目)上添加预构建事件,如下所示跟随...

for /F "tokens=5 delims=<>= " %%n in ('findstr "vmsize=" $(ProjectDir)ServiceDefinition.csdef') do (if "ExtraSmall"==%%n (exit 0) else (exit 1))

就是这样!

对于那些想知道它是如何工作的人......这个预构建事件是一个命令 line/batch 文件命令,可以直接放在项目的预构建事件中,在一个单一的线。它打开 ServiceDefinition.csdef 文件并找到包含文本“vmsize=”的行。这 returns 以下行...

<WebRole name="WCFServiceWebRole1" vmsize="ExtraSmall">

然后,使用以下字符作为分隔符 (<,>,=,{space}),它从该行获取第 5 个标记,在本例中为我们提供...

"ExtraSmall"

...然后将该值与文字字符串 "ExtraSmall" 进行比较,如果匹配则 returns 错误级别为 0,否则为错误级别 1。返回错误级别 1 会使构建失败并停止任何后续包和部署,从而导致在 Azure 中部署错误的 VM 大小。