笔者在前文中介绍了如何使用 PowerShell 脚本在 Azure 上建立虚拟主机。正如你所看到的,整个建立过程仍是有点繁琐的,由于咱们须要使用 PowerShell 脚本建立并关联全部相关的组件。其实 Azure 为运维人员提供了效率更高的操做方式:模板。咱们能够经过声明式的语法来建立模板,而后经过模板来简化部署操做。
Azure 提供了强大的模板功能,不只支持用户建立模板,还能够从当前的配置中导出模板。本文暂不关注建立模板的细节,只是把前文脚本建立的资源中导出为模板,并经过导出的模板建立新的资源。html
MS 建议咱们尽可能把同一个项目中的资源放置在同一个 resource manager 中管理,因此前文中咱们在常见虚拟主机的同时建立了一个新的名为 vmpool 的 resource manager:shell
全部建立的资源都属于这个 resource manager。接下来咱们就把这个 resource manager 中的全部资源都导出到模板中。以下图所示,先选择 "Automation script",而后点 "Download" 就能够了:编程
打开下载到的压缩包,里面的文件以下:json
Azure 默认支持经过 PowerShell, shell, ruby 和 C# 部署模板,并提供了相应的脚本文件。也就是说咱们只须要执行下载到的 PowerShell 脚本就能够部署一个和 vmpool 如出一辙的 resource group 了!ruby
接下来咱们使用 powershell 脚本进行演示,简单起见咱们只保留 deploy.ps1 和 template.json, 其它文件都删除掉。运维
若是咱们使用同一个订阅号进行部署,须要修改一下模板文件中 stroage account 的名称,否则的话会和已经存在的资源名称发生冲突。这里咱们在 template.json 文件中默认的 stroage account 名称前面添加 "check" 字样:编程语言
笔者在测试的过程当中碰到了一个很奇怪的依赖错误:测试
提示出现了循环引用,按照提示找到 template.json 文件中对应的行。查看以后感受模板文件应该是正确的,按理说不该该有这样的错误提示。可是尝试了好几回都是相同的错误,索性删除提示出错的行:spa
把红框中的行删除,不要忘记删除前面的一个逗号。而后重试,错误消失。按理说新建的 networkinterfaces 和虚机有依赖关系是没有问题的,可是却出问题了,估计是个 bug。命令行
在执行 PowerShell 脚本进行部署前,咱们还须要肯定几个参数。首先是你的订阅号的 ID,这个参数决定你的资源被部署在哪一个订阅号的下面。还有就是新的 resource group 的名称和位置。最后须要给本次的部署起个名字:
-subscriptionId "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" -resourceGroupName "checkRG" -resourceGroupLocation "Korea Central" -deploymentName "testdeployment"
若是不在命令行中指定这些参数就须要在执行过程当中和用户交互。咱们但愿作到自动化的部署过程,因此应该事先准备好这些参数,从而避免执行过程当中的交互操做。所以最后咱们要执行的部署命令为:
./deploy.ps1 -subscriptionId "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" `
-resourceGroupName "checkRG" `
-resourceGroupLocation "Korea Central" `
-deploymentName "testdeployment"
执行上面的命令,咱们会获得一个名为 checkRG 的 resource group,其内容和母版 vmpool 几乎是同样的(storage account 的名称不同):
在 azure 上执行操做须要用户先进行登陆,那么在 PowerShell 脚本中该如何作呢(须要避免执行脚本的过程当中与用户交互)?
笔者在《Azure 基础:用 PowerShell 自动登陆》一文中有详细的介绍,有兴趣的朋友能够参考。
本文经过一个简单的 demo 演示了如何经过 PowerShell 和模板在 azure 上部署资源。与单纯的使用 PowerShell 脚原本建立全部的资源相比,使用模板能够简化整个部署的过程。而且模板使用的是 json 格式,与具体的编程语言无关。你可使用任何 Azure 支持的语言来部署模板中声明的资源。