笔者在前文中介绍了如何使用 PowerShell 脚本在 Azure 上创建虚拟主机。正如你所看到的,整个创建过程还是有点繁琐的,因为我们需要使用 PowerShell 脚本创建并关联所有相关的组件。其实 Azure 为运维人员提供了效率更高的操作方式:模板。我们可以通过声明式的语法来创建模板,然后通过模板来简化部署操作。
Azure 提供了强大的模板功能,不仅支持用户创建模板,还可以从当前的配置中导出模板。本文暂不关注创建模板的细节,只是把前文脚本创建的资源中导出为模板,并通过导出的模板创建新的资源。

从现有的资源导出模板

MS 建议我们尽量把同一个项目中的资源放置在同一个 resource manager 中管理,所以前文中我们在常见虚拟主机的同时创建了一个新的名为 vmpool 的 resource manager:

所有创建的资源都属于这个 resource manager。接下来我们就把这个 resource manager 中的所有资源都导出到模板中。如下图所示,先选择 "Automation script",然后点 "Download" 就可以了:

打开下载到的压缩包,里面的文件如下:

Azure 默认支持通过 PowerShell, shell, ruby 和 C# 部署模板,并提供了相应的脚本文件。也就是说我们只需要执行下载到的 PowerShell 脚本就可以部署一个和 vmpool 一模一样的 resource group 了!

接下来我们使用 powershell 脚本进行演示,简单起见我们只保留 deploy.ps1 和 template.json, 其它文件都删除掉。

修改模板中默认的名称

如果我们使用同一个订阅号进行部署,需要修改一下模板文件中 stroage account 的名称,不然的话会和已经存在的资源名称发生冲突。这里我们在 template.json 文件中默认的 stroage account 名称前面添加 "check" 字样:

依赖问题

笔者在测试的过程中碰到了一个很奇怪的依赖错误:

提示出现了循环引用,按照提示找到 template.json 文件中对应的行。查看之后感觉模板文件应该是正确的,按理说不应该有这样的错误提示。但是尝试了好几次都是相同的错误,索性删除提示出错的行:

把红框中的行删除,不要忘记删除前面的一个逗号。然后重试,错误消失。按理说新建的 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 支持的语言来部署模板中声明的资源。

Azure 基础 : 使用 template 简化部署的更多相关文章

  1. 免费电子书:微软Azure基础之Azure Automation

    (此文章同时发表在本人微信公众号"dotNET每日精华文章") Azure Automation是Azure内置的一项自动化运维基础功能,微软为了让大家更快上手使用这项功能,特意推 ...

  2. Azure 基础:使用 powershell 创建虚拟网络

    什么是虚拟网络 虚拟网络是您的网络在 Azure 云上的表示形式.您可以完全控制虚拟网络的 IP 地址.DNS 的设置.安全策略和路由表.您还可以更进一步,把虚拟网络划分为多个子网.然后用它们连接您的 ...

  3. ASP.NET Core在Azure Kubernetes Service中的部署和管理

    目录 ASP.NET Core在Azure Kubernetes Service中的部署和管理 目标 准备工作 注册 Azure 账户 AKS文档 进入Azure门户(控制台) 安装 Azure Cl ...

  4. Azure vm 扩展脚本自动部署Elasticsearch集群

    一.完整过程比较长,我仅给出Azure vm extension script 一键部署Elasticsearch集群的安装脚本,有需要的同学,可以邮件我,我给你完整的ARM Template 如果你 ...

  5. Azure 镜像市场支持一键部署到云

    本视频教程介绍了Azure 镜像市场和一键部署到云. Azure 镜像市场(AMP)由世纪互联运营,是一个联机应用程序和服务市场,它通过独立软件服务商(ISV)能够成为 Azure 客户(Custom ...

  6. Azure Terraform(三)部署 Web 应用程序

    一,引言 上一节关于 Terraform 的文章讲到 Terraform 使用到的一些语法,以及通过演示使用 Terraform 在Azure 上部署资源组,极大的方便了基础设施实施人员,也提高了基础 ...

  7. Azure 基础:Blob Storage

    Azure Storage 是微软 Azure 云提供的云端存储解决方案,当前支持的存储类型有 Blob.Queue.File 和 Table. 笔者在前文中介绍了 Table Storage 的基本 ...

  8. Azure 基础:使用 powershell 创建虚拟机

    在进行与 azure 相关的自动化过程中,创建虚拟主机是避不开的操作.由于系统本身的复杂性,很难用一两条简单的命令完成虚拟主机的创建.所以专门写一篇文章来记录使用 PowerShell 在 azure ...

  9. Azure 基础 : 使用 Automation 定时开机

    不知何时 Azure 为虚机提供了自动关机的功能.这是一个很棒的功能,可以帮助我们定时关闭虚机并释放掉资源以节省开支.如果某台虚机在夜间不需要提供服务,我们就可以把它配置为晚上的某个时间点自动关机: ...

随机推荐

  1. Python学习笔记009_构造与析构

    >>> # 魔法方法>>> >>> # 魔法方法总是被双下划线包围,例如 __init__>>> # 魔法方法是面向对象的Pyt ...

  2. 百度编辑器不能插入html标签解决方法

    找到此方法: me.addInputRule(function (root) { var allowDivTransToP = this.options.allowDivTransToP; var v ...

  3. 全栈工程师带你开发 ,node开发人脸识别门禁系统

    效果图:       知识点: 人脸识别SKD部署,  webRTC视频流处理,URL构建blob对象,Canvas映射截图,ajax数据交互,Node图像处理,跨域与413处理,base64解码,p ...

  4. String类的构造方法(2)

    写了常见的几个而已. 1:new 一个String类的时候系统会自动传一个空构造 public String(); 注意: 当对象初始化是 null时 和 对象是 "" 时,两者是 ...

  5. node.js express mvc轻量级框架实践

    本文记录的是笔者最近抽私下时间给朋友做的一个时时彩自动下注系统,比较简单,主要也是为了学习一下node.js. 其实逻辑没什么可以深谈的,主要是想说说这套代码结构.结构如下图: js的代码比较难以维护 ...

  6. [js高手之路] html5 canvas系列教程 - 认识canvas以及基本使用方法

    canvas是html5中引入的一个新元素,俗称画布,既然是画布,当然是用来画图的.canvas技术指的是利用javascript操作canvas元素绘制图形的技术,要使用canvas,一定要浏览器支 ...

  7. [AHOI2001]质数和分解

    [AHOI2001]质数和分解 题目描述 任何大于 1 的自然数 n 都可以写成若干个大于等于 2 且小于等于 n 的质数之和表达式(包括只有一个数构成的和表达式的情况),并且可能有不止一种质数和的形 ...

  8. 第6章 Overlapped I/O, 在你身后变戏法 ---被激发的 Event 对象 -4

    以文件 handle 作为激发机制,有一个明显的限制,那就是没办法说出到底是哪一个 overlapped 操作完成了.如果每个文件 handle 只有一个操作等待决定,上述问题其实并不成为问题.但是如 ...

  9. 【转】NoClassDefFoundError和ClassNotFoundException

    调试Hadoop源码时,一运行就报这个错误,后来发现是maven配置时,scope配置的问题, MAVEN Scope使用  相关链接:http://acooly.iteye.com/blog/178 ...

  10. Linux入门之常用命令(13) date

    在linux shell编程中,经常用到日期的加减运算 以前都是自己通过expr函数计算,很麻烦 其实date命令本身提供了日期的加减运算 非常方便.例如:得到昨天的时间date +%Y%m%d -- ...