笔者在前文中介绍了如何使用 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. JSP第五篇【JSTL的介绍、core标签库、fn方法库、fmt标签库】

    什么是JSTL JSTL全称为 JSP Standard Tag Library 即JSP标准标签库. JSTL作为最基本的标签库,提供了一系列的JSP标签,实现了基本的功能:集合的遍历.数据的输出. ...

  2. iOS开发者的管理工具-CocoaPods安装

    1. 安装 Ruby 对于iOS开发者,CocoaPods是最方便使用的第三方管理工具了,但是怎么安装CocoaPods呢,安装CocoaPods之前,要确保mac已经安装上Ruby,但在安装Ruby ...

  3. 使用gc、objgraph干掉python内存泄露与循环引用!

    Python使用引用计数和垃圾回收来做内存管理,前面也写过一遍文章<Python内存优化>,介绍了在python中,如何profile内存使用情况,并做出相应的优化.本文介绍两个更致命的问 ...

  4. oracle sql 树操作

    语法:select-start with-connect by-prior 主要有两点 1)prior放在子节点端,则表示扫描树是以start with指定的节点作为根节点从上往下扫描.可能对应一个或 ...

  5. Java的类加载器

    一.类加载器的概念 类加载器(class loader)用来加载 Java 类到 Java 虚拟机中.一般来说,Java 虚拟机使用 Java 类的方式如下:Java 源程序(.java 文件)在经过 ...

  6. poj3468(一维)(区间查询,区间修改)

    A Simple Problem with Integers You have N integers, A1, A2, ... , AN. You need to deal with two kind ...

  7. 关于form表单或者Ajax向后台发送数据时,数据格式的探究

    最近在做一个资产管理系统项目,其中有一个部分是客户端向服务端发送采集到的数据的,服务端是Django写的,客户端需要用rrequests模块模拟发送请求 假设发送的数据是这样的: data = {'s ...

  8. http://codeforces.com/contest/349

    A. Cinema Line time limit per test 2 seconds memory limit per test 256 megabytes input standard inpu ...

  9. 在项目中创建单元测试时junit的配置和使用

    首先配置项目中AndroidMainfest.xml文件,加入 <instrumentation android:name="android.test.InstrumentationT ...

  10. 实战之elasticsearch集群及filebeat server和logstash server

    author:JevonWei 版权声明:原创作品 实战之elasticsearch集群及filebeat server和logstash server 环境 elasticsearch集群节点环境为 ...