笔者在前文中介绍了如何使用 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. Servlet第三篇【request和response简介、response的常见应用】

    response.request对象 Tomcat收到客户端的http请求,会针对每一次请求,分别创建一个代表请求的request对象.和代表响应的response对象 既然request对象代表ht ...

  2. 云计算之路-阿里云上:访问阿里云CDN上的图片,自动跳转到百度首页

    昨天有用户向我们反馈一篇博文(一条语句导致CPU持续100%)中的部分图片不能显示,我们的图片访问用的是阿里云CDN,原以为是某个CDN节点不稳定的问题,但在排查时发现这些图片不能显示竟然是因为请求时 ...

  3. 《Java I/O 从0到1》 - 第Ⅱ滴血 “流”

    前言 <Java I/O 从0到1>系列上一章节,介绍了File 类,这一章节介绍的是IO的核心 输入输出.I/O类库常使用流这个抽象概念.代表任何有能力产出数据的数据源对象或者是有能力接 ...

  4. C3P0 WARN: Establishing SSL connection without server's identity verification is not recommended

    c3p0的出现,是为了大大提高应用程序和数据库之间访问效率的. 它的特性: 编码的简单易用 连接的复用 连接的管理 今天在配置C3p0的时候出现了这个warn   原因是因为要验证SSL Wed Se ...

  5. JS中this到底指哪个对象

    忘了原作者是谁了   自己也添加了一些东西  勉强可以观看一下 元素就不写了   可以自己添一下试试 先看这段代码 target.onclick = function(){ console.log(t ...

  6. 强大的桌面用 PDF 重排工具:K2pdfopt 简明教程

    用 Kindle 阅读 PDF 一直以来都遭到小伙伴们的无限吐槽,在那 Kindle 还能越狱的时代,我们有 Koreader 之类优秀的 Kindle 第三方插件实现 PDF 文档的实时重排,但是随 ...

  7. Java并发/多线程系列——线程安全篇(1)

    创建和启动Java线程 Java线程是个对象,和其他任何的Java对象一样.线程是类的实例java.lang.Thread,或该类的子类的实例.除了对象之外,java线程还可以执行代码. 创建和启动线 ...

  8. Python实战之IO多路复用select的详细简单练习

    IO多路复用 I/O多路复用指:通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作. select   它通过一个select()系统调用来 ...

  9. python contextlib 上下文管理器

    1.with操作符 在python中读写文件,可能需要这样的代码 try-finally读写文件 file_text = None try: file_text = open('./text', 'r ...

  10. 索引节点inode详解

    Inode(index node),索引节点.Linux系统中,分区要进行格式化,创建文件系统.在每个Linux存储设备或存储设备的分区(可以是硬盘,软盘,U盘等)被格式化为ext3文件系统后,一般分 ...