azure 哂卹人厦 啨南€¦ · 1 垸 1 章 | azure 哂卹人厦啨南 1 哂卹人厦 啨南...

59
Azure 开发人员 指南 第二版

Upload: others

Post on 07-Aug-2020

36 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Azure 哂卹人厦 啨南€¦ · 1 垸 1 章 | Azure 哂卹人厦啨南 1 哂卹人厦 啨南 哔今对天件厫坞关嗸务坋需噾噳以哜任何时候奵墯吏,堤 奃种夑势只

Azure 开发人员

指南

第二版

Page 2: Azure 哂卹人厦 啨南€¦ · 1 垸 1 章 | Azure 哂卹人厦啨南 1 哂卹人厦 啨南 哔今对天件厫坞关嗸务坋需噾噳以哜任何时候奵墯吏,堤 奃种夑势只

发布者

Microsoft Press

Microsoft Corporation 的一个部门

One Microsoft Way Redmond, Washington 98052-6399

版权所有 © 2018 Microsoft Corporation

保留所有权利。未经发布者书面许可,不得以任何形式或任何方式复制或传播本书中的任何内容。

Microsoft Press 的书籍可通过世界各地的书商和分销商获得。如果你需要与本书相关的支持,请向

[email protected] 发送电子邮件来与 Microsoft Press 支持部门联系。请在

http://aka.ms/tellpress 中告诉我们你对本书的看法。

本书“按原样”提供,表达作者的观点和意见。本书中表达的观点、意见和信息(包括 URL 和其他

Internet 网站参考)可能会发生更改,恕不另行通知。

本书中提及的一些示例仅用于说明,纯属虚构。不存在任何实际关联或联系,请勿妄加推断。

Microsoft 和 http://www.microsoft.com 的“商标”网页上列出的商标是 Microsoft 集团公司的商标。

所有其他标记均为其各自所有者的财产。

Page 3: Azure 哂卹人厦 啨南€¦ · 1 垸 1 章 | Azure 哂卹人厦啨南 1 哂卹人厦 啨南 哔今对天件厫坞关嗸务坋需噾噳以哜任何时候奵墯吏,堤 奃种夑势只

ii 目录

目录第 1 章:Azure 开发人员指南 ..................................................................................................................... 1

简介 ............................................................................................................................................................................................... 1

信息技术作为实用工具,而不是负担 .......................................................................................................................... 2

计算即实用工具 ................................................................................................................................................................... 2

云计算部署类型 ........................................................................................................................................................................ 4

公有云 ...................................................................................................................................................................................... 4

私有云 ...................................................................................................................................................................................... 4

混合云 ...................................................................................................................................................................................... 4

云计算类型揭秘 ........................................................................................................................................................................ 4

基础架构即服务 ................................................................................................................................................................... 5

平台即服务 ............................................................................................................................................................................. 5

功能即服务 ............................................................................................................................................................................. 6

软件即服务 ............................................................................................................................................................................. 6

为何选择 Azure? .................................................................................................................................................................... 6

Azure 在全球运营 ................................................................................................................................................................ 8

Azure 非常有弹性 ................................................................................................................................................................ 8

Azure 几乎适合所有行业 .................................................................................................................................................. 8

Azure 关注面向开发人员的功能 .................................................................................................................................... 8

Azure 是开放的,支持你选择的框架 ........................................................................................................................... 9

你可以在旅途中监控 Azure 服务 ................................................................................................................................... 9

我们乐于为你提供帮助 .......................................................................................................................................................... 9

第 2 章:Azure 入门 .................................................................................................................................. 10

欢迎使用你的 IDE 和编辑器 .............................................................................................................................................. 10

使用 Azure 命令行接口编写脚本 .................................................................................................................................... 10

在 Azure 上运行任何内容 .................................................................................................................................................. 10

成本如何? .......................................................................................................................................................................... 10

选择合适的 Azure 服务 ....................................................................................................................................................... 11

Page 4: Azure 哂卹人厦 啨南€¦ · 1 垸 1 章 | Azure 哂卹人厦啨南 1 哂卹人厦 啨南 哔今对天件厫坞关嗸务坋需噾噳以哜任何时候奵墯吏,堤 奃种夑势只

iii 目录

应用程序的托管位置 ....................................................................................................................................................... 11

使用内容及使用时间 ....................................................................................................................................................... 16

加快应用程序运行速度 ....................................................................................................................................................... 17

Azure 内容交付网络 ........................................................................................................................................................ 17

Azure Redis 缓存 .............................................................................................................................................................. 17

Azure 流量管理器 ............................................................................................................................................................. 18

数据的存储位置 ..................................................................................................................................................................... 19

第 3 章:向应用程序中添加智能 ............................................................................................................... 23

Azure 搜索 ............................................................................................................................................................................... 23

Azure 认知服务 ...................................................................................................................................................................... 24

Azure 机器人服务 ................................................................................................................................................................. 24

在应用程序中使用事件和消息 ......................................................................................................................................... 24

Azure 服务总线 ................................................................................................................................................................. 24

Azure 事件中心 ................................................................................................................................................................. 25

Azure IoT 中心 ................................................................................................................................................................... 26

Azure 事件网格 ................................................................................................................................................................. 26

使用内容及使用时间 ....................................................................................................................................................... 27

第 4 章:保护应用程序的安全 ................................................................................................................... 28

Azure Active Directory ........................................................................................................................................................ 28

Azure API 管理................................................................................................................................................................... 28

Azure 密钥保管库 ............................................................................................................................................................. 29

Azure DDoS 保护 .............................................................................................................................................................. 29

Azure Web 应用程序防火墙 ......................................................................................................................................... 29

默认数据加密 ..................................................................................................................................................................... 29

第 5 章:部署 Azure 服务的位置和方式 ................................................................................................... 30

DevOps 理念 ........................................................................................................................................................................... 30

Azure 资源管理器模板 ................................................................................................................................................... 30

Azure Service Fabric ........................................................................................................................................................ 31

Azure 中的容器 ................................................................................................................................................................. 31

Azure Stack ......................................................................................................................................................................... 32

部署位置和部署时间 ............................................................................................................................................................ 32

第 6 章:Azure 演练 .................................................................................................................................. 33

演练 #1:Azure 门户 ........................................................................................................................................................... 33

Azure 门户中的磁贴 ........................................................................................................................................................ 33

创建新虚拟机 ..................................................................................................................................................................... 35

演练 #2:在 Azure 中用 MongoDB 开发 Node.js Web 应用 .............................................................................. 39

使用 Azure 门户创建 Web 应用和数据库 ............................................................................................................... 39

Page 5: Azure 哂卹人厦 啨南€¦ · 1 垸 1 章 | Azure 哂卹人厦啨南 1 哂卹人厦 啨南 哔今对天件厫坞关嗸务坋需噾噳以哜任何时候奵墯吏,堤 奃种夑势只

iv 目录

演练 #3:使用 Azure 创建移动应用的后端 ................................................................................................................ 46

通过 Azure 门户创建移动应用 .................................................................................................................................... 47

其他功能和移动到生产环境 ......................................................................................................................................... 51

第 7 章:使用 Azure Marketplace ........................................................................................................... 52

Azure Marketplace 如何帮助开发人员? .................................................................................................................... 52

Azure 解决方案 ................................................................................................................................................................. 52

摘要及后续操作 ..................................................................................................................................................................... 53

使用 Azure 免费帐户继续学习 ......................................................................................................................................... 53

关于作者 ...................................................................................................................................................... 54

Page 6: Azure 哂卹人厦 啨南€¦ · 1 垸 1 章 | Azure 哂卹人厦啨南 1 哂卹人厦 啨南 哔今对天件厫坞关嗸务坋需噾噳以哜任何时候奵墯吏,堤 奃种夑势只

1 第 1 章 | Azure 开发人员指南

1

开发人员指南当今对软件和相关服务的需求比以往任何时候都要大,而且这种趋势只

会继续下去并呈指数增长,因为各种各样的应用程序越来越多地成为我

们日常生活的一部分。作为开发人员,你是为用户带来这一数字化革命

的“魔术师”,这并不容易。除了创建你的软件可提供的独特而切实的

功能外,还需要注意许多幕后元素:你的应用程序需要在全球各地都高

度可用且性能良好、在各种设备上均可无缝运行、安全且能够以合理的

价格大规模运行。这些挑战在大多数软件和大多数行业中都很常见。但

这些解决方案是我们不断改造的临时性事物,而且构建和维护起来可能

很困难,成本也很高。

我们创建《Azure 开发人员指南》旨在帮助你完成云迁移之旅,无论你是刚刚考虑迁移到云,还是已经

决定并正在迁移,均可参考本指南。本电子书由开发人员面向同行编写。它专门为开发人员提供有关

Azure 到底是什么、它能为你和你的组织提供哪些功能以及如何利用这些功能的基本知识。

本指南的后半部分将演练诸如访问 Azure 门户和创建虚拟机之类的方案。我们还将讨论如何开发和部署

使用 Node.js 和 MongoDB 的 Web 应用程序。其中涵盖了典型任务,例如 CI/CD(持续集成和持续部

署)、过渡环境、缩放、日志记录和监视。最后,我们为你的移动应用程序创建一个包括身份验证和脱

机同步的后端。

简介

有大量介绍云计算优点的书籍、文章、论文、博客帖子等,你会发现从技术角度阐释云计算的大量有价

值信息。但在阅读这些内容之前,你需要问几个简单的问题:我为什么应该迁移到云?这将给我、我的

团队、我的公司带来什么好处?

Page 7: Azure 哂卹人厦 啨南€¦ · 1 垸 1 章 | Azure 哂卹人厦啨南 1 哂卹人厦 啨南 哔今对天件厫坞关嗸务坋需噾噳以哜任何时候奵墯吏,堤 奃种夑势只

2 第 1 章 | Azure 开发人员指南

信息技术作为实用工具,而不是负担

云计算是指“计算即实用工具”。这是什么意思?为了形象地说明这一点,可以将它想象为生活中无处

不在的东西:电。

今天谁会认为在每个家庭和企业之外拥有一个微型发电站是高效的配电模型呢。我们习惯了轻轻一按开

关便打开灯,然后去做我们需要做的事情;你绝对不会梦想着去购买、安装并维护家庭或办公室照明所

需的全部设备。相反,你只需向当地电力公司支付每月耗电量的费用,从来不必考虑发电的物理学原

理、处理资本支出、维护设备、在风暴后修理设备 — 全部都不需要。只需轻按开关,然后就可以高效

处理其他事情了。

正如你从来不需要也不希望确切知道电是如何配送至你家的,你也不需要确切知道你在云中使用的计算

能力和服务是如何提供给你的。其他人会帮助你处理这一切。因此,首要任务是将你的计算、存储和网

络迁移到云中,以便于使用,就像打开一盏灯一样。你只需为所用资源付费,就像你只需支付家庭用电

费用一样。

当然,除了我们的类比之外,云还能为你的 IT 运营带来许多更具体的好处,例如可伸缩性以及在应用

程序中使用智能服务(如搜索和人脸识别)的能力等等。

计算即实用工具

因此,最终你可将云服务(如 Azure)视为计算即实用工具。当然,Azure 提供产品和服务的方式远超

当地电力公司,因此有时很难明确地定义云计算。实际上,有人说云基本上只是使用别人的计算机,从

技术上说这是对的,但云的概念远不止于此:

云是一个系统,它在无限、弹性、全球范围内提供强大、具有弹性、智能的服务和计算资源。

下面我们来进一步细分一下:

云和 Azure 提供的服务可以帮助你完成许多任务:既包括普通任务(例如向应用程序中添加“搜索”功

能),也包括独特任务(例如实现持续集成 (CI) 和持续部署 (CD) 工作流)。你可以自动优化数据库,

或快速、轻松地设置到移动设备的推送通知。这些只是开发人员反复为他们自己创建、但现在作为服务

提供的一些常见内容的示例。这让你能够非常轻松地使用这些服务 — 就像轻按电灯开关一样简单!然

后,你可以重点关注应用程序中使其变得独特的各个部分;即,为用户提供真正附加值的功能。

除了服务之外,云还以虚拟机 (VM)、容器、数据库等形式提供计算资源。你可以使用这些资源来托管

应用程序或为用户提供完整的基础架构。

如前所述,云的威力在于服务和资源异常强健且有弹性。它们不大可能出现无法运行的情况。因为云很

聪明。它具有自我修复功能,与 Azure 一样,世界各地都有数据中心,其中拥有成千上万的服务器。如

果一台服务器出现故障,另一台服务器将接管。如果整个数据中心出现故障(不太可能出现的情况),

另一个数据中心将接管。由于云的规模巨大,所有这一切都有可能发生。

支持云的最有说服力的论据之一是,你几乎可以无限地扩展你的服务和资源,当然在一定程度上,这是

你使用本地资源无法实现的,除非你准备花费大量资金投入设备和人员来进行管理。而且,你可以在全

球范围内进行扩展。你可以将服务放在世界上的任何地方,这样无论你的用户身在何处,你都可以为其

提供卓越的体验。它还意味着你可以将数据保存在需要的位置。

但最重要的一点可能是,当你使用云资源时,可在需求降低时缩减你的服务和资源。我们还使用电力公

司类比进行说明,如果你邀请很多朋友和亲戚来家里参加聚会,你会打开房子内外的许多盏灯、频繁使

Page 8: Azure 哂卹人厦 啨南€¦ · 1 垸 1 章 | Azure 哂卹人厦啨南 1 哂卹人厦 啨南 哔今对天件厫坞关嗸务坋需噾噳以哜任何时候奵墯吏,堤 奃种夑势只

3 第 1 章 | Azure 开发人员指南

用微波炉、播放一些音乐,这通常会增加用电量。但是,当聚会结束、客人离开后,你的用电量将恢复

正常,你的账单也一样。当你使用云和 Azure 时,道理与之相同:你只对使用的资源付费,而不对使用

量高时可能的需求量付费。

详细信息 要了解有关 Azure 门户和创建第一台虚拟机的信息,请访问

https://docs.microsoft.com/azure/virtual-machines/windows/quick-create-portal。

除了大规模的可伸缩性、现成的智能服务和按使用量付费外,云还可提供更高的安全性。

全球有数百万人全天候使用云;当然,也有很多人攻击云。像 Microsoft 这样拥有良好信誉且经验丰富

的云提供商了解普通用户与恶意操作者的使用模式。这意味着,它知道如何针对最常见和最独特的攻击

提供保护。智能监控工具、机器学习算法和人工智能使云提供商能够实时检测攻击并阻止攻击。

在安全领域和大规模流量领域数十年的经验与顶级的行业安全专业知识相结合,使云成为比任何本地数

据中心都更加安全的环境。

详细信息 要了解 Azure 如何保护应用程序和数据的安全,请转至 Azure 安全中心如何使用网络威胁情报检测 DDoS 攻击、Azure 安全概述和 Microsoft 如何处理网络犯罪。

我们已经简要地探讨了你为什么要迁移到云和 Azure。现在,我们将介绍云的主要组件、它们的功能以

及它们在宏大蓝图中的作用。

Page 9: Azure 哂卹人厦 啨南€¦ · 1 垸 1 章 | Azure 哂卹人厦啨南 1 哂卹人厦 啨南 哔今对天件厫坞关嗸务坋需噾噳以哜任何时候奵墯吏,堤 奃种夑势只

4 第 1 章 | Azure 开发人员指南

云计算部署类型

云提供了若干个级别的产品和服务,例如基础架构即服务 (IaaS) 和平台即服务 (PaaS),但在讨论这些内

容之前,我们先回顾一下云平台的三种基本类型:公有、私有 和混合。这些平台类型已经迅速成为现

代技术流行词。让我们来揭开它们的神秘面纱吧。

公有云

在公有云模型中,你不拥有任何硬件;你的云供应商负责购买和维护所有硬件。公有云包含你自己不拥

有但可从云提供商那里使用的所有服务和计算资源。提供商负责使所有服务和计算资源保持运行并遵守

服务级别协议 (SLA)。你只为使用的资源付费,而不为拥有的资源付费。

私有云

使用私有云时,你拥有全部硬件,或至少对硬件拥有完全控制权。运行服务并托管数据的硬件位于本地

数据中心的某个位置。当然,这种完全控制权是有代价的:你必须购买并维护一切硬件。你为拥有的资源付费,而不是为使用的资源付费。

但是,如何在传统的本地数据中心中设置私有云平台?幸运的是,Azure 专为在此环境中工作而设计了

独特的解决方案:Azure Stack。简而言之,Azure Stack 是你可以在本地数据中心内的系统中运行的你

自己的 Azure 私有实例。

在私有云中运行服务与在本地数据中心中运行服务不同。Azure Stack 在本地数据中心的范围内提供

Azure 的所有优点,包括可在应用程序中使用的智能服务。因此,如果出于特殊的安全或监管原因,你

需要在本地数据中心中使某些操作“离家近一些”,你仍可尽享 Azure 和云范例提供的所有好处。

混合云

顾名思义,混合云模型是公有云和私有云的混合。你使用的公有云服务可以使用私有云中的资源,反之

亦然。在 Azure 中,你可以在使用 Azure Hybrid Connections 连接至本地数据库的 Azure Web App 中

运行应用程序。这就提供了许多可能性。你既可以控制应用程序和数据的位置,同时仍可以获得使用智

能云服务的好处。

Azure 可为所有云计算部署类型提供解决方案。这使企业可以更自由地在需要的位置、以需要的方式使

用 Azure。他们还可以确定他们希望对其应用程序和数据拥有多大程度的控制权。

云计算类型揭秘

在云计算领域,我们可以将服务和资源分类为多种类型。有许多不同的云计算类型定义。类型之间的差

异在于你拥有的控制权和责任,而不是你在为公司或客户带来业务价值时可以花费的时间和精力。图 1-1

和图 1-2 说明了我们如何为 Azure 定义云计算类型。

Page 10: Azure 哂卹人厦 啨南€¦ · 1 垸 1 章 | Azure 哂卹人厦啨南 1 哂卹人厦 啨南 哔今对天件厫坞关嗸务坋需噾噳以哜任何时候奵墯吏,堤 奃种夑势只

5 第 1 章 | Azure 开发人员指南

图 1-1:云计算类型说明

图 1-2:基于云的产品示例

基础架构即服务

使用基础架构即服务(IaaS [发音为“eye-as”)时,你负责除 硬件之外的一切。Azure 负责处理所有

硬件,如固态驱动器 (SSD)、网络布线、路由器、电源、备用发电机、冷却系统等。属于此类别的服务

包括 Azure 虚拟机、Azure 虚拟网络和 Azure 容器。

你负责其他所有事宜。你的应用程序、修补操作系统 (OS)、逻辑网络配置,甚至是使计算机上的防病

毒程序保持最新。这意味着你对这些元素保持完全控制权。但这也意味着,你需要花费大量时间和精力

来使服务和资源保持运行状态,从而减少用来为核心应用程序产品增加商业价值的时间。

平台即服务

使用平台即服务(PaaS [发音为“pahz”])模型时,你负责你的应用程序及其配置;Azure 提供操作系

统和硬件。如图 1-1 所示,PaaS 是比 IaaS 高的抽象级别。与 IaaS 相比,你承担的责任要少得多,但对

硬件资源的直接控制也更少。属于 PaaS 类别的服务包括 Azure App Service、Azure SQL 数据库、Azure

Redis 缓存 和 Azure Batch。

使用 PaaS 时,你可以托管你的应用程序,但此级别还提供其他开箱即用的功能,例如通过 Azure

Mobile App 向移动设备推送通知,以及在 Azure SQL 数据库中自动优化数据库。

Page 11: Azure 哂卹人厦 啨南€¦ · 1 垸 1 章 | Azure 哂卹人厦啨南 1 哂卹人厦 啨南 哔今对天件厫坞关嗸务坋需噾噳以哜任何时候奵墯吏,堤 奃种夑势只

6 第 1 章 | Azure 开发人员指南

你负责部署应用程序并对其进行配置。你还执行基本的服务器配置,例如缩放定价层或运行应用程序的

实例数。你的应用程序仍在某处的服务器上运行,但你不对该服务器负责(也不对其拥有任何控制

权),这意味着你可以花更多时间专注于增加应用程序的商业价值,而用更少的时间来使服务器保持运

行状态。

试试看 在位于 https://docs.microsoft.com/azure/app-service/app-service-web-tutorial-

nodejs-mongodb-app 的演练中使用 MongoDB on Azure 创建 Node.js 应用程序。

功能即服务

在功能即服务(FaaS [发音为“fahz”])中,你只对你的应用程序和业务逻辑负责。你不必担心缩放、

操作系统或任何硬件。FaaS 有时被称为无服务器计算。FaaS 类别中的服务包括 Azure Functions、

Azure Logic Apps 和 Azure Event Grid。

在 FaaS 中,你只需创建应用程序或将业务逻辑编织在一起并运行。缩放会自动进行。FaaS 的一个更值得

注意的好处是,你只需为运行逻辑时使用的资源付费,而不必为始终运行、等待用户使用的服务付费。

但 FaaS 的功能不限于托管你的应用程序;它会将你的逻辑连接到触发器和源。外部源(如 Azure 存储队

列或 WebHook)可以启动 Azure Functions 或 Logic Apps,并向它们提供要处理的数据。你无需编写激

活逻辑或设置用于连接外部数据存储或服务的管道,这意味着你可以专注于逻辑和面向客户的功能。

软件即服务

使用软件即服务(SaaS [发音为“sass”])时,你只需关注软件的配置 — 不必关心所有其他事宜。实

际上,SaaS 是云计算类型的最高抽象级别。SaaS 类别中的服务包括 Azure 认知服务和 Azure IoT 套件。

Office 365 是另一个 Azure SaaS 应用程序套件示例,可提供可靠的业务应用程序,如 Microsoft Word、

Excel、PowerPoint 等。不必安装或维护任何软件,即可使用所有这些应用程序。

有了 SaaS,软件随时可供使用。你只需按自己的喜好对软件进行配置,然后便可开始使用。你不需要

编写软件,也不必考虑部署、缩放、操作系统和硬件。

为何选择 Azure?

你会认为云正是你需要的,它可帮助你的公司创建令人难以置信的软件产品,并可交付客户期望的价值

和用户体验。当然,Azure 云平台可以帮助你达成这一目标。借助其丰富的资源和强大的计算能力,以

及广泛的智能服务,你可以构建高度可缩放的动态应用,并且只需为你使用的资源付费。但当今有许多

云供应商,每个供应商均可提供独特的功能和产品。同样的问题,为什么选择 Azure 呢?

使用 Azure,你将获得 Microsoft 的深入知识和专业技能,40 多年来,Microsoft 在个人和企业级计算

及 IT 解决方案领域始终处于领先地位。几十年来,Microsoft 一直在为自身的目的而设计、构建和运行

大规模数据中心操作和网络。这些经验和专有技术已经整合到 Azure 的结构中。这正是它的核心所在。

谁在使用 Azure?

Adobe、Jet.com、Geico、GeekWire 和 DocuSign 只是在全球范围内依靠 Azure 平台来实现业务目标并为客户提供更多价值的一部分客户示例。其中一些目标包括提供应用程序服务以实现无服务器计算、提供人工智能实现 Azure IoT,甚至是媒体流式处理。我们来看看客户使用 Azure 平台来满足业务需求的一些有趣方法。

Page 12: Azure 哂卹人厦 啨南€¦ · 1 垸 1 章 | Azure 哂卹人厦啨南 1 哂卹人厦 啨南 哔今对天件厫坞关嗸务坋需噾噳以哜任何时候奵墯吏,堤 奃种夑势只

7 第 1 章 | Azure 开发人员指南

韩国工业巨头三星生产包括手机、电视、洗衣机、主要厨房电器和空调在内的各种设备。该公司决定通过使用 Azure 执行远程监控和维护来提高空调的效率和稳健性。该公司使用 Azure IoT 中心收集嵌入空调中的传感器所发送的大量数据,这些传感器负责监控机器及其运行环境的状态。此数据在

Azure SQL 中捕获,用于进行实时分析。然后,工程师可以使用他们提取的信息来调节空调的运行,从而可为客户平均节能 15-18%。

可口可乐公司是世界上最知名的品牌之一,该公司在 1886 年首次推出了同名的软饮料,并从此成为全球领导者。2012 年,该公司推出了 Coco-Cola Journey,这是一个宏伟的项目和网站,其目的是帮助可口可乐更好地与新一代客户建立联系,新一代客户越来越多地从非传统的营销渠道获取购买线索。该公司希望利用社交媒体和名为 How-Old.net 的 Microsoft 服务为用户打造有趣且吸引人的互动体验,同时深入了解其客户。以认知服务技术为基础,How-Old.net 对从面部图像中提取的数据进行分析,以确定个体的年龄和性别。但是可口可乐公司要求 Microsoft 团队将这个项目在面部识别的基础上再进一步,即,使用机器学习模型检测图片中的各个对象。该网站邀请用户提交自己和一个带可见徽标的可口可乐瓶的照片,看看会发生什么,活动持续一个月。如果网站应用程序检测到瓶子,则会显示该瓶子的年龄,并且页面会变红。然后,该网站鼓励可乐迷们在社交媒体上分享他们的体验,并进一步探索 Coca-Cola Journey 网站,以了解有关这款悠久的可口可乐经典玻璃瓶的更多信息。

CarMax 是美国最大的二手车零售商,它使用 Azure 平台服务对其网站进行了重新设计,从而可针对每月 1,600 万的访问量提供更快速的响应。CarMax 不是将网站直接迁移至 Azure IaaS 环境,而是选择使用 Azure PaaS 产品重建网站。这使得 CarMax 能通过全新云功能实现网站现代化,使其实现

100% 的移动友好,最重要的是,使其转变为动态的 DevOps 开发范例。CarMax 正在向微服务体系结构快速转变,这使得该公司能够独立地缩放和更新应用程序的各个部分。虽然这个过程需要几年的时间来完成,但选择 Azure 作为开发基础将有助于这家汽车零售商更快速地获得微服务。

NBC Sports 与 Microsoft 协作提供大量广播活动。2016 年,这两家公司协作转播了里约热内卢的夏季奥运会。NBC 利用 Azure 媒体服务同时流式传输来自 50 多场奥运赛事的内容,提供 1080p 模式,覆盖高达 10 亿唯一用户,这些用户通过各种外形规格的设备使用了 27.1 亿分钟的内容。媒体服务提供了可伸缩性和稳健性,从而向观看者完美呈现内容。

Azure 使大型和小型企业、政府组织、教育机构以及 IT 服务的任何用户都能够更容易、更经济高效地管

理他们自己及其客户的数字世界。下面简要介绍具体方法:

提供跨平台的软件体验,如移动、桌面、Web 和混合体验:Azure 提供了可用于实现这些方案的“开

箱即用”服务,如 Azure 应用程序服务,包括 Web App 和移动应用,以及用于提供和管理所有应用

程序类型的 Mobile Center 和 Visual Studio Team Services。

可在任何需要的地方提供服务:Azure 的独特之处在于部署选项的多样性:公有云、混合解决方案

以及你自己数据中心中的 Azure 本地部署(通过 Azure Stack)。所有这些选项都可以实惠的价格

提供大规模数据,同时将数据保留在需要的位置。

提供智能、大规模的数据平台:Azure 有许多服务可用于捕获、存储、分析和显示数据。这些服务

包括 Azure SQL 数据库、Data Lake Store 和数据湖分析、HDInsight、事件中心、认知服务等。所

有这些服务都可以创建一个实惠、智能、可大规模扩展的数据平台,该平台可为企业提供工具来从

当今的大量数据中提取有价值的见解。

快速交付高品质的软件:你需要经常测试并从失败中快速抽身,以交付高质量的软件。使用 Azure

时,你可以通过集成的 CI 和 CD 机制直接在服务(如 Web App)中或通过 Visual Studio Team

Services 来交付高品质软件。应用服务部署槽等功能使你可以实现快速交付,而不会造成停机。而

且,为了了解你的应用在生产环境中是否按预期工作,Azure 还提供了监控服务(如 Application

Insights),让你能够准确了解应用的运行情况以及可以改进的环节。

Page 13: Azure 哂卹人厦 啨南€¦ · 1 垸 1 章 | Azure 哂卹人厦啨南 1 哂卹人厦 啨南 哔今对天件厫坞关嗸务坋需噾噳以哜任何时候奵墯吏,堤 奃种夑势只

8 第 1 章 | Azure 开发人员指南

Azure 在全球运营

Azure 的数据中心遍布全球 42 个以上的国家和地区,这一令人难以置信的覆盖面能带来很多好处。首

先,它可以减少在整个数据中心出现故障时(不太可能出现的情况)你的应用程序可能经历的停机时

间,因为应用程序可以故障转移到其他数据中心,并像什么事情都没有发生那样继续运行。这还可以降

低你的灾难恢复成本。

如果你使用内容交付网络 (CDN) 来减少延迟,则很有可能在客户所在位置以及需要交付其内容的位置

附近存在 Azure 数据中心。Azure 在如此多的位置拥有如此多设施的另一个好处是,在数据存储方面为

你提供更多选择。这有助于确保你的公司遵守有关数据主权的本地或区域性法规和法律。

Microsoft 将通过开源硬件开发和新颖的数据中心解决方案(例如来自 Natick 项目的水下数据中心)继续对数据中心基础架构和创新技术进行大量投资。

Azure 非常有弹性

Azure 是一个可自我监控、自行恢复的智能平台,你可以依靠它来使应用程序启动、可用并正常运行。

为了支持这一目标,所有 Azure 服务都在用特定术语定义其性能的综合 SLA 下运行。SLA 的正常运行时

间范围从 99.9%(三个九)到 99.99%(四个九)。这意味着 Azure 服务极其有弹性,极其可靠。如果

你的服务未达到相关 SLA 中规定的要求,你可能有资格享受 Azure 发票上服务成本最多 100% 的折扣。

为了确保你的服务一直保持最佳性能,Microsoft 将监控世界各地每个数据中心中每个 Azure 服务的服

务运行状况。公共 Azure 状态页面上的这些指标也可供你监控。

如前所述,自 1989 年以来,Microsoft 一直在运营数据中心并提供大规模 IT 服务。它在这段时间内积累

了大量知识。现在,Microsoft 拥有 IT 行业一些最优秀的人才,他们不断致力于启动和运行 Azure,使你

可以依赖它来托管服务和存储数据。这也是所有 Azure 服务都使用 SLA 来支持这一目标的原因所在。

Azure 几乎适合所有行业

Azure 提供了最全面的合规性产品集,其他云提供商望尘莫及。合规性列表很长,并且不断增大。

Azure 符合的一些标准包括 ISO 27001、HIPAA 和 SOC 3。区域特定的合规性标准包括欧盟–美国隐私盾

和中国 DJCP。

例如,通过符合 ISO 27001 认证,Microsoft 保证它实现、监控、维护并不断改进用于其全球数据中心

网络和 Azure 中的各个服务的安全标准。

详细信息 有关合规性声明的完整列表,请访问

https://www.microsoft.com/trustcenter/compliance/complianceofferings。

Azure 甚至有一个面向美国政府客户的特定产品,称为 Azure Government,该产品基本上是“特殊版

本”的 Azure 云,可满足政府实体的独特需求。Azure Government 独立于 Azure 公有云、在自己的实例 中运行,这意味着它在完全分离且独立的基础架构上的单独且专用服务器上运行。

Azure 关注面向开发人员的功能

Azure 通过提供大量“管道”来提高开发人员的工作效率,否则开发人员将需要自行构建这些管道。通

过诸如自动缩放和身份验证/授权工具等功能,你只需做少量工作或无需做任何工作,即可向应用程序中

添加高级特性和功能。你可以集成 Azure 搜索或认知服务等既可以增强应用程序又能取悦用户的服务。

Page 14: Azure 哂卹人厦 啨南€¦ · 1 垸 1 章 | Azure 哂卹人厦啨南 1 哂卹人厦 啨南 哔今对天件厫坞关嗸务坋需噾噳以哜任何时候奵墯吏,堤 奃种夑势只

9 第 1 章 | Azure 开发人员指南

Azure 是开放的,支持你选择的框架

在 JavaScript 中编写应用程序并将它们部署到 Web App。或者在你首选的 Ruby、Django、Java、PHP

或 .NET 环境中编写应用程序。Azure 可对多种语言提供广泛支持。你可以提供现有应用程序或从头开

始编写应用程序,这些应用程序均将在 Azure 中运行。

此外,你还可以选择自己喜欢的生态系统。Azure 支持大多数操作系统,例如 Linux 和 Windows,如果

需要,你可以使用 Bash 编写任何脚本。你还可以按照自己喜欢的方式运行应用程序,使用容器、Azure

Service Fabric、应用程序服务、Azure Stack 等。

在了解了如何将 Azure 与一个工具集结合使用之后,便可将其与任何其他工具集结合使用。服务和

Azure 门户的工作方式对于所有内容都是一样的。

你可以在旅途中监控 Azure 服务

你是那种喜欢密切关注运行状况的人吗?使用 Azure,你可以监视服务的执行情况,并可借助 Azure 移

动应用来解决可能出现的问题。即使你不在办公桌上的主计算机旁,这个有用的应用也能让你查看资源

的情况。您可以处理诸如重新启动 Web 应用和停止虚拟机之类的任务。它还通过 Cloud Shell 提供完整

的命令行接口 (CLI) 体验,使你基本可以完成通过 Azure 门户可以完成的所有操作。

此外,Azure 中还有一些服务可为你的服务执行智能检测和建议,并向你发送相关警报。这些警报包含

检测到 Web 应用的运行速度比平常慢,或通知你应用程序服务已自动扩展。Azure 安全中心和 Azure

Monitor 是一些可以向你发送相关提醒的服务,以免你错过任何重要内容。

我们乐于为你提供帮助

如果需要,你可以通过多种途径来获取 Azure 帮助。

你可以购买支持计划,该计划使你可以联系 Azure 技术支持团队,并且还会提供其他服务,例如,基于

最佳实践的云设计指导或协助制定迁移计划。根据需要,你可以购买保证技术支持团队在 15 分钟内做

出响应的支持计划。

此外,你还可以通过许多渠道获得免费的全天候帮助。你可以通过推特联系 @AzureSupport,或通过

MSDN 论坛、StackOverflow、Reddit 或 Microsoft 技术社区与支持团队取得联系。

Page 15: Azure 哂卹人厦 啨南€¦ · 1 垸 1 章 | Azure 哂卹人厦啨南 1 哂卹人厦 啨南 哔今对天件厫坞关嗸务坋需噾噳以哜任何时候奵墯吏,堤 奃种夑势只

10 第 2 章 | Azure 入门

2

入门在经过深思熟虑后,你已加入 Azure 社区,现在你希望开始构建应用程

序。你需要什么?需要的东西并不多。最重要的事情是连接到 Azure 以部

署你的应用。你可以使用自己选择的工具、应用程序和框架。

欢迎使用你的 IDE 和编辑器

无论你在本地环境中创建或编辑应用程序时使用的是哪种工具,均可将其与 Azure 结合使用。从记事本

到 Visual Studio Code、Sublime Text、Visual Studio 一直到 Azure 门户中的代码编辑器,任你选择。

决定权在你!

为所有常用 IDE 提供了插件,使你能够执行诸如直接发布到 Azure 之类的操作。即使你更喜欢使用诸如

“记事本”这样的基本工具,仍可使用持续集成 (CI)/持续交付 (CD) 做法自动完成到 Azure 的部署。

使用 Azure 命令行接口编写脚本

Azure 提供了一个功能强大的命令行接口 (CLI),通过该接口基本上可在 Azure 中执行任何操作。你可以

使用 Azure CLI 启动和停止虚拟机 (VM)、将应用程序部署到 Azure Web App 中的应用、创建新资源以

及其他所有操作。该接口对于自动执行任务以及在你的 CI/CD 管道中运行任务也非常有用。

你可以在 Azure Cloud Shell 中使用 Azure 门户提供的 Azure CLI,也可以通过 Azure CLI 工具在机器本地

使用该接口。另一个优点是你可以在 Azure CLI 中应用现有的 Bash 或 Windows PowerShell 专业技能。

在 Azure 上运行任何内容

Azure 是 Web 应用程序和 API 的出色选择。它也很适合作为桌面和移动应用程序的主机。例如,你可

以使用它来对桌面应用程序中的用户进行身份验证,或向移动应用发送推送通知。不管你设想出什么方

案,Azure 都能为其增值。

成本如何?

很显然,了解 Azure 中的成本是非常重要的。为了帮助你了解成本,Microsoft 提供了 Azure 定价计算器。

借助这个便捷工具,你可以选择要使用的服务并指定预期使用量,计算器将显示月度和年度帐单。该帐单

与你将使用的数据量共同决定着你的成本。

Page 16: Azure 哂卹人厦 啨南€¦ · 1 垸 1 章 | Azure 哂卹人厦啨南 1 哂卹人厦 啨南 哔今对天件厫坞关嗸务坋需噾噳以哜任何时候奵墯吏,堤 奃种夑势只

11 第 2 章 | Azure 入门

注意 Azure 定价计算器可为即用即付订阅估算成本。还有其他付款选项可用于企业、合作伙伴和 MSDN 订户,这些付款选项会影响服务成本。

你还可以使用 Azure 计费 API 和定价提醒来持续关注成本。你可以利用这些工具来洞察成本和支出趋

势,以便控制成本。

选择合适的 Azure 服务

Azure 提供了许多服务来帮助你构建和运行应用程序。实际上,服务如此之多,以致于有时你在为场景

选择合适的服务时会感觉有些混乱。作为开发人员,你应该选择哪些服务呢?我们来探讨一下其中的部

分选项。

应用程序的托管位置

你需要做的第一个选择就是在哪里托管你的应用程序。Azure 提供了多个托管选项。

虚拟机

托管应用程序的方式之一是在 Azure 虚拟机内的虚拟机中托管。这使你可对应用程序的托管方式进行许

多控制,但你需要负责维护环境,例如修补操作系统 (OS) 和使防病毒程序保持最新。

例如,你可以使用虚拟机来测试 Visual Studio 的最新预览版本,而不让计算机“变脏”。

Azure Batch

如果需要在虚拟机上运行大型批处理或高性能计算 (HPC) 应用程序,可以选择 Azure Batch。Batch 可

以创建和管理多达数千个虚拟机的集合,安装要运行的应用程序,并在虚拟机上安排作业。你不需要部

署和管理单个虚拟机或服务器群集。Batch 可以安排、管理和自动缩放作业,因此只使用所需的虚拟机

即可。Batch 是一项免费服务;你只需为使用的底层资源付费,如虚拟机、存储和网络。

Batch 非常适合大规模运行并行工作负载,如财务风险模型、媒体转码、VFX 和 3D 图像渲染、工程模

拟以及许多其他计算密集型应用程序。使用 Batch 可以扩展已经在工作站或本地群集上运行的应用程序

或脚本,或者开发使用 Batch 作为计算平台的 SaaS 解决方案。

试试看借助这些分步教程在五分钟内快速启动并运行 Azure Batch。

容器

容器的量级比虚拟机轻得多,只需几秒钟即可启动和停止容器。容器还可提供极大的可移植性,这使其

成为在计算机本地开发应用,然后在云中、在测试环境中以及稍后在生产环境中托管应用的理想选择。

你甚至可以在本地或其他云中运行容器 — 你在开发计算机上使用的环境将与你的容器一起移动,因此

你的应用将始终在同一生态系统中运行。

与虚拟机一样,容器允许你对环境进行许多控制。你可以安装运行应用程序所需的内容。但你同样需要

负责修补和维护在容器中运行的操作系统,同时还要负责防病毒程序等辅助程序。

Page 17: Azure 哂卹人厦 啨南€¦ · 1 垸 1 章 | Azure 哂卹人厦啨南 1 哂卹人厦 啨南 哔今对天件厫坞关嗸务坋需噾噳以哜任何时候奵墯吏,堤 奃种夑势只

12 第 2 章 | Azure 入门

用 Azure 容器实例托管容器

你可以使用 Azure 容器实例来托管容器。使用此服务,你可以快速启动容器,而不需要容器协调程序

(如 Kubernetes),也不必管理托管容器的资源。

容器实例服务按秒、按虚拟 CPU、按 GB 或内存计费。

详细信息 要了解有关容器实例的详细信息,请转至 Azure 容器实例入门。

用 Azure 容器服务托管容器

托管容器的另一种方式是使用 Azure 容器服务。借助此服务,你可以使用 Mesosphere DC/OS、Docker

Swarm 或 Kubernetes 等协调程序来缩放和管理容器。此服务是开始向云中迁移容器的不错方式。

详细信息 要了解有关容器服务的详细信息,请转至 Azure 容器服务入门。

Azure 函数

使用 Azure 函数,你可以只编写解决方案所需的代码,而不必构建完整的应用程序或用于运行它的基础架

构。函数是由 HTTP 请求或其他 Azure 服务中的事件触发或基于时间表触发的代码逻辑单元。输入和输出

绑定会使用最少的代码将你的函数代码连接至其他服务,如 Azure Blob 存储、Azure Cosmos DB 和 Azure

服务总线。使用函数,你可以快速构建小块功能,并在自动管理缩放的弹性环境中托管这些功能。

Azure 函数的另一个特别之处是,你可以选择只为运行的函数付费,而不必使计算实例整月运行。这也

称为无服务器,因为它只需要你创建应用程序,而不处理任何服务器,甚至是服务器的缩放。

你可以用 C#、F#、Node.js、Java、PHP 和越来越多的语言编写 Azure 函数。

使用函数的一个应用程序示例是,每次有新图像文件上载到 Azure Blob 存储时都激活一个函数。然

后,该函数将调整图像的大小并将其写入另一个 Blob 存储帐户。此示例的函数签名如下所示(在 C# 脚

本中):

public static void Run(Stream myBlob, string name, TraceWriter log, BlockBlob outputBlob) { }

触发函数的 Blob 中的数据将作为 myBlob 参数传递给该函数,该参数中包括 Blob URL。可以使用

outputBlob 输出绑定参数来指定要将结果写入到的 Blob。无需编写用于连接到 Blob 存储的管道,只需

进行配置即可。

试试看 使用 Azure 门户创建第一个 Azure 函数。

Azure 逻辑应用

你可以使用逻辑应用来安排业务逻辑,自动完成业务流程或与软件即服务 (SaaS) 应用程序集成。与在

Azure 函数中相似,逻辑应用可由外部源激活;例如,Azure 存储队列中的新消息。你可将对连接器的

API 调用编织在一起,创建一个涉及云中以及本地资源的(可能很复杂的)工作流。逻辑应用具有许多

可用的 API 连接器,如用于连接 Azure SQL 数据库、SalesForce、SAP 等的连接器。你还可以将自己的

API 或 Azure 函数公开为要在逻辑应用中使用的连接器,以便轻松地对工作流中的外部系统执行操作,

或者让你的逻辑应用被其中一个外部系统激活。

与 Azure 函数一样,逻辑应用是无服务器的,可自动缩放,并且只有在其运行时才需付费。

Page 18: Azure 哂卹人厦 啨南€¦ · 1 垸 1 章 | Azure 哂卹人厦啨南 1 哂卹人厦 啨南 哔今对天件厫坞关嗸务坋需噾噳以哜任何时候奵墯吏,堤 奃种夑势只

13 第 2 章 | Azure 入门

以下是逻辑应用中的工作流示例:

1. 逻辑应用被一封电子邮件激活,该电子邮件包含 Office 365 中收到的发货单。

2. 逻辑应用使用电子邮件中的数据在 SQL Server 中检查订购项目的可用性。

3. 逻辑应用使用 Twilio 向客户的手机发送一条短信(电话号码也在电子邮件中),指明已收到订单并

已发货。

试试看 Azure 逻辑应用入门。

Azure 应用服务

你可以在 Azure 中的核心服务产品之一中托管你的应用程序:Azure 应用服务。Azure 应用服务是共享

特性和功能的托管和协调服务的集合。例如,所有应用服务都能够使用 Azure Active Directory 来确保

应用程序的安全,并且都可以使用自定义域。

Azure 应用服务包括以下内容:

Web App:Web App 是使用最广泛的 Azure 服务之一。你可以使用它来托管你的 Web 应用程序或

API。Web App 基本上是 Web 服务器的抽象化,与你托管 HTTP 驱动的应用程序时所用的 Internet

Information Services (IIS) 或 Tomcat 相似。

Web App 可以托管用 .NET、Node.js、PHP、Java 或 Python 编写的应用程序,还可以使用扩展来

运行更多语言。

试试看 我们将在示例部分中向你演示 Node.js 和 MongoDB 应用示例。

面向容器的 Web App:面向容器的 Web App 可帮助你轻松地大规模部署和运行容器化 Web 应

用。只需从 Docker 中心或私有 Azure 容器注册表中拉入容器映像,面向容器的 Web App 将使用你

首选的依赖项在几秒内将容器化应用部署到生产环境中。平台会自动处理操作系统修补、容量调配

和负载均衡。

试试看 我们将在示例部分演练用 Docker 格式的容器来部署 Web 应用。

移动应用:移动应用可为你的移动应用程序提供后端。你在移动应用中托管 API,你的移动应用程

序可通过跨平台的客户端 SDK 与该 API 连接。这适用于 iOS、Android、Windows、Xamarin for

iOS 以及 Android 和 Xamarin 形式。移动应用提供了离线同步和推送通知等独特功能,可帮助你创

建现代化、高性能且安全的移动体验。

你可以在 .NET 或 Node.js 中编写移动应用后端。

试试看 我们将在示例部分中演练如何创建移动后端。

Page 19: Azure 哂卹人厦 啨南€¦ · 1 垸 1 章 | Azure 哂卹人厦啨南 1 哂卹人厦 啨南 哔今对天件厫坞关嗸务坋需噾噳以哜任何时候奵墯吏,堤 奃种夑势只

14 第 2 章 | Azure 入门

Azure 应用服务特性

Azure 应用服务是 Azure 中可用来托管应用程序的关键服务之一。每项服务均提供独特的功能,但它们

也具有一些共同的特性:

缩放

Azure 应用服务按应用服务计划运行,这些计划是来自虚拟机的抽象。有一台或多台虚拟机运行你的

Azure 应用服务,但你无需知道具体是哪几台,因为 Azure 会处理它们。但你可以缩放运行 Azure 应用

服务的资源。你可以选择更高的定价层(从免费到高级)或增加正在运行的应用程序实例数。你甚至可

以让 Azure 应用服务根据计划或指标(如 CPU、内存或 HTTP 队列长度)自动为你缩放实例数。

部署槽

这是 Azure 应用服务的一个非常有用的特性。你可以将应用程序的新版本部署到部署槽中,在此可以测

试新版本是否能按预期工作,然后将其移动到生产槽中。你甚至可以使用 Azure 的在生产中测试 功能

将一定百分比的流量从生产应用路由到部署槽。例如,你可以将 10% 的用户分流至部署槽中的新版本

应用,以确定新特性是否按预期工作,以及用户是否实际使用这些特性。

你对新版应用程序在部署槽中的执行情况感到满意之后,可以执行交换,即,将部署槽中的应用与生产槽中的应用进行交换。你也可以从开发槽交换到过渡槽,然后再交换到生产槽,如图 2-1 所示。在执行此操

作之前,交换操作会验证网站的新版本是否已预热并准备就绪。得到确认后,交换操作将切换槽,你的用

户会看到应用的新版本,并且无停机时间。如果需要,你还可以交换回来,同时还原新版本的部署。

图 2-1:交换部署槽

可在部署、测试或生产等环境内 使用部署槽。你不能将部署槽用作 环境,因为它们都位于同一应用服

务计划中,并且你由于安全性、缩放、计费和性能原因希望将其分离。

可以通过 Azure 命令行接口 (CLI) 和 Azure 管理 API 手动交换部署槽。这样 Visual Studio Team Services

之类的工具便可在发布期间执行交换操作。

部署槽是 Azure 应用服务(如 Web App)的另一个元素,它与原始的 Azure 应用服务在同一 Azure 应

用服务计划中运行,并且就在该应用服务旁边。由于部署槽与你的原始 Azure 应用服务在同一 Azure 应

用服务计划中运行,因此不会产生任何额外的使用开销。

Page 20: Azure 哂卹人厦 啨南€¦ · 1 垸 1 章 | Azure 哂卹人厦啨南 1 哂卹人厦 啨南 哔今对天件厫坞关嗸务坋需噾噳以哜任何时候奵墯吏,堤 奃种夑势只

15 第 2 章 | Azure 入门

持续交付

要将应用程序发布到应用服务,可以使用外部服务,如 Visual Studio Team Services、Jenkins 或 Octopus

Deploy。还可以使用应用服务中的持续交付 (CD) 功能。这使你可以直接在应用服务中创建生成–测试–发

布管道。该流程会执行以下操作:

1. 从你指示的存储库中检索最新源代码

2. 根据你选取的模板(ASP.NET、Node.js 等)生成代码

3. 在过渡环境中部署应用并对其进行负载测试

4. 在经过审批后将应用部署到生产(可以指明是否要使用部署槽)

连接到本地资源

你可以将外部资源(如数据存储)连接到应用服务。这些资源不需要位于 Azure 中;它们可以位于你自

己的数据中心中的任何位置,如本地。可以通过多种机制连接到本地服务,具体取决于你的要求。你可

以使用 Azure 混合连接、Azure 虚拟网络和 Azure ExpressRoute 连接本地资源。

自定义域和 Azure 应用服务证书

当你在 Azure 应用服务中启动应用时,它会公开一个 URL – 例如

https://myazurewebsite.azurewebsites.net。更有可能的情况是,你要使用自己的自定义域,这可以通

过将该域名映射到应用服务来实现。以下是具体做法。

此外,你还可以使用安全套接字层 (SSL) 证书确保通过 HTTPS 来提供应用程序。你可以自带证书或直接

从 Azure 门户购买证书。在从 Azure 门户购买 SSL 证书时,你会购买 Azure 应用服务证书,可将其配置

为供自定义域绑定使用。

试试看 在此演练中了解如何购买和配置证书。

应用服务环境

在多层 Web 应用程序中,通常有数据库或服务可供 Web App 中的应用使用。理想情况下,你希望这些

服务仅向应用公开,而不向互联网公开。当然,如果应用可为用户提供入口点,则应用本身通常是面向

互联网的。

要将这些支持服务与互联网隔离,你可以使用 Azure 虚拟网络。此服务会包装你的支持服务,并将其连

接到你在 Web App 中的应用,以使支持服务仅向该应用公开,而不向互联网公开。本文更详细地介绍

了此服务并演示了其使用方法。

有时,你可能需要更多控制。你可能希望将应用包装在虚拟网络中,以控制对它的访问。你可能希望它

被 Web App 中的其他应用调用,并使其成为后端的一部分。对于此情景,你可以使用 Azure 应用服务

环境。这将为你提供非常大的规模,并使你能够对隔离和网络访问进行控制。但请注意,该应用服务环

境仅适用于高级定价层中的应用服务。

注意 应用服务环境当前不适用于面向容器的 Web App。

Page 21: Azure 哂卹人厦 啨南€¦ · 1 垸 1 章 | Azure 哂卹人厦啨南 1 哂卹人厦 啨南 哔今对天件厫坞关嗸务坋需噾噳以哜任何时候奵墯吏,堤 奃种夑势只

16 第 2 章 | Azure 入门

使用内容及使用时间

尽管应用服务、函数和逻辑应用通常会配合使用,但每一项在设计时均考虑了特定的应用程序需求。

表 2-1 简要概述了你可能拥有的需求类别的用途。

表 2-1:应该使用哪项应用服务以及具体使用时间

类别 用途 Azure 应用服务类型

托管应用程序 托管 Web 应用程序和 API 来自应用服务的 Web App

和/或面向容器的 Web App

为移动应用托管后端 来自应用服务的移动应用

编排流程 编排流程中的步骤 功能

编排整个流程 逻辑应用

Page 22: Azure 哂卹人厦 啨南€¦ · 1 垸 1 章 | Azure 哂卹人厦啨南 1 哂卹人厦 啨南 哔今对天件厫坞关嗸务坋需噾噳以哜任何时候奵墯吏,堤 奃种夑势只

17 第 2 章 | Azure 入门

加快应用程序运行速度

在 Azure 中启动并运行应用程序后,你希望尽量提高其性能。Azure 提供了一系列可以帮助你实现此目

标的服务。

Azure 内容交付网络

有助于加快应用程序速度的一项 Azure 服务是 Azure 内容交付网络。你可以将静态文件(视频、图像、

JavaScript、CSS,甚至是静态 HTML 文件)上载到数据存储(如 Azure Blob 存储),然后将 Azure 内

容交付网络连接至该数据存储。内容交付网络随后将获取这些静态文件并将其复制到全球数以百计的网

络节点 (PoP)。你只需在应用中将对静态文件的引用更改为不同的 URL。例如,引用以前可能是

~/images/image.png,现在将是 https://example.azureedge.com/image.png。这很容易做到,并可通

过以下方式改进应用程序的性能:

无需再从应用程序提供内容。现在由内容交付网络提供内容,从而可腾出你的应用程序的处理周期

它通过将静态内容分发至世界各地的 PoP,使静态内容与用户的物理距离更近

不仅是在 Web 应用程序中,在移动和桌面应用程序中,同样可以受益于内容交付网络。

使用内容交付网络的一个示例是为移动应用提供视频。视频可能很大,你不想(你的用户也不想)在移

动设备上存储这些视频。使用内容交付网络时,会从 PoP 提供视频,这还能够改进性能,因为 PoP 距

离用户很近。

试试看 Azure 内容交付网络入门。

Azure Redis 缓存

每个现代应用程序都使用数据。在从数据存储(如数据库)中检索数据时,通常需要扫描远程服务器上

的多个表或文档,将结果组合在一起,然后将结果发送到提出请求的设备。这当然需要时间,并且会让

你的用户受挫和恼火。

为了消除其中一些“往返”,你可以缓存不经常更改的数据。这样你就不必每次查询数据库,而是可以

从缓存(例如 Azure Redis 缓存)中检索一些数据。缓存的好处在于,它以简单格式(如键–值)存储

数据。你不需要运行复杂查询来获取此数据,只需知道键即可检索值。这样可以显著改进应用程序的性

能。以下是此工作流的工作方式:

1. 应用需要一些数据并尝试从缓存中检索数据。

2. 如果数据不在缓存中,则从数据库获取数据并将该数据存储在缓存中。

3. 下次应用查找该特定数据块时,它将在缓存中找到数据,从而不必访问数据库。

Azure 通过 Redis 缓存提供了缓存即服务。该服务基于开源 Redis 项目,现在由 Microsoft 工程师和 SLA

提供支持。其性能很高,并且拥有高级选项,如群集和异地复制。

试试看 Azure Redis 缓存入门。

Page 23: Azure 哂卹人厦 啨南€¦ · 1 垸 1 章 | Azure 哂卹人厦啨南 1 哂卹人厦 啨南 哔今对天件厫坞关嗸务坋需噾噳以哜任何时候奵墯吏,堤 奃种夑势只

18 第 2 章 | Azure 入门

Azure 流量管理器

许多现代应用程序都拥有位于世界各地的用户。至少可以说,为每个人提供高性能体验极具挑战性。你

需要处理的最明显的问题是延迟。延迟是信号或请求到达用户所需的时间。用户距离你的应用程序越

远,他们经历的延迟时间就越长。

Azure 流量管理器可跨区域进行缩放,这样无论用户身在何处,均可减少延迟并为用户提供高性能体

验。流量管理器是一个智能的路由机制,可将其放在全球的 Web App 应用程序之前。Web App 充当终

结点,Azure 流量管理器会监视它的运行状况和性能。如图 2-2 所示,当用户访问你的应用程序时,流

量管理器会将她路由到附近性能最高的 Web App 应用程序。

在你的体系结构中包括流量管理器是改进应用程序性能的极好方法。

图 2-2:Azure 流量管理器将流量引向性能最高的异地终结点

Page 24: Azure 哂卹人厦 啨南€¦ · 1 垸 1 章 | Azure 哂卹人厦啨南 1 哂卹人厦 啨南 哔今对天件厫坞关嗸务坋需噾噳以哜任何时候奵墯吏,堤 奃种夑势只

19 第 2 章 | Azure 入门

数据的存储位置

数据是任何现代应用程序的一个重要方面,有多种形式和大小。Azure 提供了多种类型的数据存储,可

以帮助你在任何情况下维护和检索数据。

表 2-2 显示了 Azure 中可用的存储选项。

表 2-2:Azure 中的存储选项

SQ

L 数据库

MySQ

L

Po

stgre

SQ

L

Co

smo

s DB

Blo

b

队列

文件

磁盘

Data

Lake S

tore

SQ

L 数据仓库

关系数据 X X

对象–关系数据 X

非结构化数据 X X

半结构化数据 X

队列消息 X

磁盘上的文件 X

磁盘上的高性能文件 X

存储大型数据 X X X X X

存储小型数据 X X X X X X X X

地理数据复制 X X

注意 本部分中提到的所有存储选项几乎均可用作 Azure Functions 的激活器和绑定。

让我们仔细看看每个存储选项。

Azure SQL 数据库

如果要使用具有列和行的表来存储数据,Azure SQL 数据库是个不错的选择。它是一个与本地 Microsoft

SQL Server 相似的关系数据库系统。因为 SQL 数据库在云中运行,所以它是完全托管的,具有高性能、

可缩放、可自动备份,并且有许多高级功能。

你可以将 SQL 数据库与你喜欢的工具(包括 SQL Server Management Studio 和 Entity Framework)结

合使用。

下面是其中一些更高级的功能:

异地复制,可将数据实时复制到其他地理区域(异地复制入门)

动态数据掩码,可在运行时动态屏蔽某些用户的敏感数据(动态数据掩码入门)

Page 25: Azure 哂卹人厦 啨南€¦ · 1 垸 1 章 | Azure 哂卹人厦啨南 1 哂卹人厦 啨南 哔今对天件厫坞关嗸务坋需噾噳以哜任何时候奵墯吏,堤 奃种夑势只

20 第 2 章 | Azure 入门

审核,提供对数据发生的所有操作的完整审核跟踪(Azure SQL 数据库审核入门)

SQL 数据库中的数据库非常可靠、稳健,提供可保证 99.99% 正常运行时间的服务级别协议 (SLA)。

Azure Database for MySQL

MySQL 是可供数百万应用程序(例如 WordPress、Joomla 和 Drupal)使用的开源关系数据库系统。现在,

MySQL 可用作 Azure Database for MySQL 服务中的托管数据库服务。这意味着你可以快速启动并运行,无

需设置或维护服务器。Azure 将为你执行一切操作。你可以获得现成的安全性和可伸缩性。此外,

Database for MySQL 服务与 SQL 数据库具有相同的可靠性,可提供行业领先的 99.99% 正常运行时间 SLA。

与 SQL 数据库和 Azure Database for PostgreSQL 一样,每五分钟执行一次增量备份,每小时执行一次

完整备份,可通过这些备份将数据恢复到最多 35 天前的早期状态。

试试看 创建并连接至 Azure 中的 MySQL 数据库。

Azure Database for PostgreSQL

基于常用 PostgreSQL 数据库技术的 Azure Database for PostgreSQL 提供了对象关系数据库服务。这与

关系数据库服务稍有不同,区别在于对象关系数据库可以存储更复杂的数据类型(如嵌套数据类型),

因此更接近于我们在应用程序中使用的面向对象的编程语言。

Database for PostgreSQL 是一个托管服务,与 Database for MySQL 具有相同的特性。你可以对其进行

扩展和缩减,它高度可用 (99.99% SLA) 并且可自动备份。

试试看 使用 Azure CLI 创建 Azure Database for PostgreSQL。

Azure Cosmos DB

Azure Cosmos DB 是 DocumentDB 的新版本和重新命名 – 而且不仅如此,Cosmos DB 是真正为云而打

造的新型数据库。下面是它的一些关键特性:

99.99% 的 SLA,其中包括低延迟(读取时少于 10 毫秒;写入时少于 15 毫秒)。

异地复制,可将数据实时复制到其他地理区域(如何使用 Azure Cosmos DB 在全球范围内分发数据)。

流量管理,可将用户发送到距离最近的数据副本。

无限的全球规模;你只对自己需要的吞吐量和存储付费。

数据的自动索引。不再需要维护或优化数据库。

除了上述所有特性之外,Cosmos DB 还提供了可用于存储和检索数据的不同 API,包括 SQL、JavaScript、

Gremlin、MongoDB 和 Azure 表存储。不同 API 处理数据的方式不同。你可以将文档用作数据,还可以使

用非结构化表、图形、blob 等。你使用可满足你需要的 API,Cosmos DB 负责处理其余事务。你可以从云

级性能、可伸缩性和可靠性中受益,并且仍然可以使用你熟悉的编程模型。

试试看 Azure Cosmos DB DocumentDB API 入门。

Page 26: Azure 哂卹人厦 啨南€¦ · 1 垸 1 章 | Azure 哂卹人厦啨南 1 哂卹人厦 啨南 哔今对天件厫坞关嗸务坋需噾噳以哜任何时候奵墯吏,堤 奃种夑势只

21 第 2 章 | Azure 入门

Azure 存储

用于存储数据的另一个选项是 Azure 存储。这是 Azure 中最古老、最可靠、性能最高的服务之一。Azure

存储提供了五种存储类型,它们都受益于以下共有特性:

异地冗余可将数据复制到不同的数据中心,这样在灾难导致单个数据中心失败的情况下,你可以恢

复数据

运行时对数据加密

自定义域

四种 Azure 存储类型为 Blob、队列、文件 和磁盘(图 2-3)。

图 2-3:Azure 存储服务概述

Blob 存储

可以使用 Azure Blob 存储来存储大型非结构化数据 – 字面意思是数据 blob。这可以是视频、图像、音

频或文本,甚至是用于虚拟机的虚拟硬盘驱动器 (VHD) 文件。

Blob 有两种类型:页和块 Blob。页 Blob 针对随机读写操作进行了优化。这些 Blob 非常适合存储

VHD。块 Blob 针对高效上载大量数据进行了优化。它们非常适合存储不经常变化的大型视频文件。

试试看 Azure Blob 存储入门。

队列存储

Azure 队列存储是一种不常见的存储类型,因为它用于存储小型数据消息,但主要用途是用作队列。你

将消息放在队列中,其他进程会选取消息。此模式可从消息处理器中分离消息发件人,并提高性能和可

靠性。Azure 队列存储基于早期 Windows 版本中提供的 Microsoft 消息队列。

试试看 Azure 队列存储入门。

文件存储

你可以使用 Azure 文件存储作为驱动器来共享文件。它使用服务器消息块 (SMB) 协议,这意味着你可以

将其与 Windows 和 Linux 一起使用,并且可从云或本地系统中进行访问。与其他 Azure 存储类型相

似,文件存储可缩放且价格低廉。

试试看 Azure 文件存储入门。

Page 27: Azure 哂卹人厦 啨南€¦ · 1 垸 1 章 | Azure 哂卹人厦啨南 1 哂卹人厦 啨南 哔今对天件厫坞关嗸务坋需噾噳以哜任何时候奵墯吏,堤 奃种夑势只

22 第 2 章 | Azure 入门

磁盘存储

Azure 磁盘存储与文件存储相似,但专门用于实现高 I/O 性能。它非常适合在需要高性能的虚拟机(如

运行 SQL Server 的虚拟机)中用作驱动器。但请注意,磁盘存储仅在 Azure 存储的高级定价层中可用。

Azure Data Lake Store

以前的数据存储用于常规应用程序用途或用于虚拟机。Azure Data Lake Store 用于存储大数据应用程

序。可以使用它来以原生格式存储大量数据:结构化、非结构化或介于两者之间的数据格式。Data Lake

Store 的要点是保存原始数据,以便于对其进行分析、转换和移动。以下是 Azure 数据湖的主要特征:

无限的存储容量。单个文件可以大于 1 PB,此大小比其他云提供商提供的文件大 200 倍。

可缩放性能可适应大规模的并行分析。

可以任何格式存储数据,而不采用架构。

此方法与传统数据仓库完全不同,在传统数据仓库中需要预先定义数据架构。

例如,可以使用 Data Lake Store 来存储你从收集温度数据的物联网 (IoT) 设备中获取的所有数据。你可

以将数据保留在存储区中,然后对数据进行筛选,并创建每小时或每周的数据视图。在 Data Lake Store

中存储数据相当实惠,因此可以极低的成本保留多年的数据。

试试看 使用 Azure 门户的 Azure Data Lake Store 入门。

Azure SQL 数据仓库

当你需要完全托管、大小可缩放、高性能且安全的传统数据仓库解决方案时,可使用 Azure SQL 数据

仓库。你将数据存储在预定义的架构中,并使用熟悉的 SQL Server SQL 方言对其进行查询。

因为 SQL 数据仓库在 Azure 中运行,所以你可以使用自动威胁检测等高级功能,自动威胁检测使用机

器学习来了解工作负载的模式并用作警报系统来提醒你潜在的违规行为。

使用 SQL 数据仓库的一个示例是,你知道要向用户显示哪些报表并知道这些报表的数据架构。然后,

你可以在 SQL 数据仓库中创建架构并用数据填充该架构,以使用户可以浏览数据。

试试看 创建 Azure SQL 数据仓库。

Page 28: Azure 哂卹人厦 啨南€¦ · 1 垸 1 章 | Azure 哂卹人厦啨南 1 哂卹人厦 啨南 哔今对天件厫坞关嗸务坋需噾噳以哜任何时候奵墯吏,堤 奃种夑势只

23 第 3 章 | 向应用程序中添加智能

3

向应用程序中添加智能托管你的应用程序和数据并使其具有可缩放性、安全性和高性能已经很棒

了,但如果能向其中添加智能功能,是不是更完美呢?

Azure 搜索

搜索是大多数应用程序中的常见功能,但以往该功能实施起来通常很困难。Azure 搜索提供许多用于执

行搜索的“管道”。你可以启动 Azure 搜索实例、创建索引来帮助执行搜索,并用数据填充索引 — 就

是这样。可以使用许多选项来调整 Azure 搜索,还有许多出色的特性可使用户能够更方便地进行搜索:

地理搜索使用户能够根据搜索结果与物理位置的接近度来探索数据。

来自 Lucene 的语言分析器以及 Microsoft 的自然语言处理器 (NLP) 提供 56 种语言,用于以智能方

式处理语言特定的语言学,包括动词时态、性、不规则名词复数(例如,“mouse”与

“mice”)、复合词、分词(用于不含空格的语言)等。

监视和报告,告知你搜索内容以及搜索速度和成功程度。

用户体验功能,例如对搜索结果排序和分页、智能筛选和提供搜索建议。

你可以实现 Azure 搜索,以帮助用户在电子商务应用程序中搜索你的产品目录。

试试看 在门户中创建你的第一个 Azure 搜索索引。

Page 29: Azure 哂卹人厦 啨南€¦ · 1 垸 1 章 | Azure 哂卹人厦啨南 1 哂卹人厦 啨南 哔今对天件厫坞关嗸务坋需噾噳以哜任何时候奵墯吏,堤 奃种夑势只

24 第 3 章 | 向应用程序中添加智能

Azure 认知服务

通过 Azure 认知服务,可向应用程序中添加不可思议的智能功能。认知服务是可用来完成神奇任务的

API 的集合。视觉、语音、语言、知识和搜索类别中有 25 个以上的 API。下面简要介绍你可以使用的

API:

使用人脸 API,你可以执行人脸识别和标识,甚至可在人员佩戴眼镜的情况下确定眼睛的颜色。

情感 API 可确定个人在图片中表现出的情感。

语言理解智能服务 API(或称 LUIS)可以根据用来训练它的模型实际理解文字。

语音翻译 API 可将语音转换为文字,并实时为你提供翻译。

认知服务通过机器学习和人工智能获得智慧,可通过自己的数据集对其进行训练。这些服务简直太神奇

了,开启了几年前我们几乎无法想象的可能性。

Azure 机器人服务

Azure 机器人服务便于你创建机器人 – 可以自动、自主地与用户交互的软件。

创建机器人是一项复杂任务。你需要跟踪与用户交互的上下文,并且必须准备响应可能的多种交互参

数。机器人服务可通过以下方式为你提供帮助:

它可以帮助你跟踪交互上下文,并为你提供从 Bot Framework 开始的模板。

它与认知服务紧密集成,从而更容易让机器人变得“聪明”。

它可以帮助你集成 Facebook、Slack、Microsoft Teams、Telegram 等服务。

它提供了 Azure 中的托管服务的所有好处:大规模、内置持续交付 (CD),并且只需为使用的资源

付费。

可以用机器人服务构建的机器人示例是向用户提供常见问题解答的机器人。机器人的界面可以是网站上

的一个聊天框。

试试看 使用 Azure 机器人服务的聊天机器人入门。

在应用程序中使用事件和消息

全球分布式的现代应用程序通常必须处理传入的大量消息,设计时还需考虑分离和缩放。Azure 提供了

多项服务来帮助处理事件接收、分析和消息传递模式。

Azure 服务总线

Azure 中消息传递的核心是 Azure 服务总线。服务总线服务包含可用于消息传递模式的服务集合,其中

最重要的是 Azure 服务总线队列和主题。

试试看 Azure 服务总线队列和主题入门。

Page 30: Azure 哂卹人厦 啨南€¦ · 1 垸 1 章 | Azure 哂卹人厦啨南 1 哂卹人厦 啨南 哔今对天件厫坞关嗸务坋需噾噳以哜任何时候奵墯吏,堤 奃种夑势只

25 第 3 章 | 向应用程序中添加智能

Azure 服务总线队列

使用 Azure 服务总线队列可将系统彼此分离。下面是一个示例:Web 应用程序收到来自用户的订单,并需要调用 Web 服务来处理该订单。Web 服务将花费很长时间(最长可能五分钟)来完成该订单的处理。当然,让 Web 应用程序在用户下单和显示反馈之间等待五分钟是不可接受的。解决这一问题的好方法是使用队列将 Web 应用程序与 Web 服务分离。

Web 应用程序接收订单并在 Azure 服务总线队列的消息中写入该订单。完成此操作后,它会通知用户订单正在处理中。Web 服务从队列中逐个接收消息,并对其进行处理。当 Web 服务处理完一个订单后,它会向用户发送电子邮件通知,告知用户商品已被订购。

通过分离系统,Web 应用程序可从 Web 服务中以不同的速度工作,两者都可以根据应用程序的需要单独进行缩放。

服务总线队列是一种简单的机制。多个应用程序均可向队列中放入消息,但一个应用程序一次只能处理一条队列消息。它有一些巧妙功能用于处理队列中的消息,如重复检测和死信子队列,消息在无法得到正确处理时将被移至死信子队列。

Azure 服务总线主题

与服务总线队列相似,Azure 服务总线主题是一种形式的应用程序分离。以下是队列与主题之间的区别:

使用队列时,多个应用程序向队列中写入消息,但一次只有一个应用程序 可以处理消息。

使用主题时,多个应用程序向主题中写入消息,多个应用程序 可以同时处理一条消息。

服务总线主题的工作方式与队列相似,多个应用程序可以处理同一消息。应用程序可以在主题中创建订

阅,以指示它们感兴趣的消息类型。与队列相似,主题也具有重复检测和死信子队列等功能,消息在无

法得到正确处理时将被移至死信子队列。

比较服务总线队列和 Azure 存储队列

存在服务总线队列,但也存在 Azure 存储队列。它们的功能基本相同,但又存在细微差别。表 3-1 列出

了这些差别。

表 3-1:服务总线队列与存储队列之比较

Azure 服务总线队列 Azure 存储队列

消息生存期 > 7 天 消息生存期 < 7 天

保证(先进先出)经过排序 队列大小 > 80 GB

重复检测 事务日志

消息大小 ≤1 MB 消息大小 ≤64 KB

Azure 事件中心

在这个软件无处不在的世界中,数据正不断地从许多应用程序、设备和位置中产生。当今,企业捕获大

量数据并对其进行分析、转换和移动以备日后使用的情况越来越常见。Azure 事件中心有助于应对这一

情况。

Page 31: Azure 哂卹人厦 啨南€¦ · 1 垸 1 章 | Azure 哂卹人厦啨南 1 哂卹人厦 啨南 哔今对天件厫坞关嗸务坋需噾噳以哜任何时候奵墯吏,堤 奃种夑势只

26 第 3 章 | 向应用程序中添加智能

事件中心专为大规模数据接收而设计。你每秒可以向其中放入数百万条消息,它将轻松地为你处理这些

数据。它最多可将消息保留七天,或通过使用事件中心捕获功能将消息写入数据存储区来无限期地保留

消息。

你可以使用事件中心在数据进入时通过查询筛选数据,并将其输出到数据存储区,如 Azure Cosmos DB。

你甚至可以在需要时重播消息。

试试看 开始在 .NET Standard 中向 Azure 事件中心发送消息。

Azure IoT 中心

与事件中心相似,Azure IoT 中心是为大规模数据接收而构建。它专门用来处理来自物联网(IoT;请参

考第 1 章“谁在使用 Azure?”中的侧栏,以获取示例)设备(如智能调温器或传感器)的海量数据消

息。它与事件中心有许多相同的属性,例如最多能将消息保留七天并可重播消息。

IoT 中心的独特之处在于,它除了能接收来自设备的消息外,还可以向设备发送消息。它能够管理你的

整个 IoT 基础架构。你可以使用 IoT 中心注册设备并报告其状态,通过保护设备、重新启动设备和向设

备发送数据来管理设备。

试试看 使用 .NET 将设备连接至 IoT 中心。

Azure 事件网格

Azure 事件网格提供了不同类型的消息。事件网格提供了一个完全托管的发布/订阅服务,它几乎可以

挂钩到 Azure 中的每项服务并可挂钩到自定义发布服务器和订阅者。

这与使用服务总线队列和主题不同,你需要轮询队列或主题来查看新消息。事件网格会自动将消息推送

给订阅者,使其成为实时的重新激活事件服务。

Azure 内外的服务均可发布事件(例如,在添加新 Blob 或向 Azure 订阅中添加新用户时)。Azure 事件

网格可以检测这些事件并将其提供给事件处理程序和订阅这些事件的服务(图 3-1)。事件处理程序可

以是 Azure Functions 或 Azure Logics Apps 等组件,然后它们可对事件中的数据执行操作。

图 3-1:Azure 事件网格概述

Page 32: Azure 哂卹人厦 啨南€¦ · 1 垸 1 章 | Azure 哂卹人厦啨南 1 哂卹人厦 啨南 哔今对天件厫坞关嗸务坋需噾噳以哜任何时候奵墯吏,堤 奃种夑势只

27 第 3 章 | 向应用程序中添加智能

事件网格的另一个重要方面在于它是无服务器的。这意味着,与 Azure Logic Apps 和 Azure Functions

类似,事件网格可自动缩放,不需要部署它的实例。你只需对其进行配置,即可使用。而且,你只需在

使用时付费,不必为拥有而付费。

下面是 Azure 事件网格的用法示例:

每当在 MailChimp 中向邮件列表添加用户或删除用户时,你都希望收到电子邮件通知。

Azure 事件网格用于在 Azure 逻辑应用中激活应用,并配置为侦听 MailChimp 邮件列表的更改。下一步

是发送一封电子邮件,其中包含已添加或删除用户的名称以及所执行的操作(添加或删除)。现在,在

向邮件列表中添加新用户时,事件网格将向逻辑应用发送信号,即发送电子邮件。

试试看 用 Azure 事件网格和逻辑应用监视虚拟机更改。

使用内容及使用时间

Azure 提供了多个选项来执行消息传递和分离应用程序。你应该使用哪个选项以及具体使用时间?表 3-2

总结了这些差异,以帮助你进行挑选。

表 3-2:用于消息和事件的 Azure 服务以及具体使用时间

事件网格 事件中心 IoT 中心 主题

服务总线

队列 存储队列

事件接收 X X X

设备管理 X

消息传递 X X X X X X

多个用户 X X X X

多个发件人 X X X X X X

用于分离 X X X X X

用于发布/订阅 X

最大消息大小 64 KB 256 KB 256 KB 1 MB 1 MB 64 KB

Page 33: Azure 哂卹人厦 啨南€¦ · 1 垸 1 章 | Azure 哂卹人厦啨南 1 哂卹人厦 啨南 哔今对天件厫坞关嗸务坋需噾噳以哜任何时候奵墯吏,堤 奃种夑势只

28 第 4 章 | 保护应用程序的安全

4

保护应用程序的安全当今,对于任何应用程序而言,安全都是最重要的方面之一,实现安全性

并不是一件简单的事情。幸运的是,Azure 提供了许多服务来帮助保护你

的应用程序。在本章中,我们将介绍其中部分服务。

Azure Active Directory

应用程序安全性的一个重要部分是,在用户使用应用程序之前先对用户进行身份验证。身份验证实现起

来并不容易。你需要在某处存储用户标识和凭据、实施密码管理、创建安全的身份验证握手等。

Azure Active Directory 提供了上述全部内容,并且多数是立即可用的。你将用户标识存储在 Azure

Active Directory 中并根据这些标识对用户进行身份验证,仅在通过身份验证后才将用户重定向到你的

应用程序。Azure Active Directory 负责密码管理,包括诸如“我忘记了密码”之类的常见情形。

每天有数百万个应用程序在使用 Azure Active Directory,其中包括 Azure 门户、Outlook.com 和

Office 365。因此,Azure Active Directory 能够更容易地检测到恶意行为并对其采取行动。例如,如果

用户从欧洲的某个位置登录某个应用程序,一分钟后又从澳大利亚登录,则 Azure Active Directory 会

将此行为标记为恶意行为,并通过多重身份验证请求用户提供附加凭据。

Azure API 管理

API 应该是安全的。无论是你自行创建的 API,还是你使用的来自第三方的 API 均应如此。为了帮助确

保 API 的安全,你可以使用 Azure API 管理。这基本上是一个代理,你将其放在自己的 API 或来自第三

方供应商的 API 之前,可增加缓存、限制以及身份验证/授权等功能。

你可以借助 API 管理通过要求用户创建 API 订阅来确保 API 的安全。这样,调用应用程序需要先进行身

份验证,然后才能使用你的 API。可以使用各种身份验证方法,如访问令牌、基本身份验证和证书。此

外,你还可以跟踪 API 的调用方并阻止不需要的调用方。

Page 34: Azure 哂卹人厦 啨南€¦ · 1 垸 1 章 | Azure 哂卹人厦啨南 1 哂卹人厦 啨南 哔今对天件厫坞关嗸务坋需噾噳以哜任何时候奵墯吏,堤 奃种夑势只

29 第 4 章 | 保护应用程序的安全

试试看 Azure API 管理入门。

Azure 密钥保管库

作为安全体系结构的一部分,你需要一个安全的地方来存储证书、密钥和其他机密信息。Azure 密钥保

管库便可提供此功能。使用密钥保管库,你便有了一个中心位置来存储应用程序使用的机密信息。

这些可以是应用程序使用的 connectionstring 中的凭据。你的应用程序将从密钥保管库而不是从配

置系统中获取 connectionstring。这样,管理员就可以控制机密,而开发人员从来不需要处理这些

信息。

你还可以使用密钥保管库来存储证书,如安全套接字层 (SSL) 证书,该证书用来确保通过 HTTPS 往来应

用程序的通信安全。

试试看 Azure 密钥保管库入门。

Azure DDoS 保护

应用程序遭遇分布式拒绝服务 (DDoS) 攻击的情况你已经在新闻中听到过很多次,你当然不希望它出现

在你的企业中。这些类型的攻击变得越来越常见,会使应用程序不堪重负,以致于无法再使用。

Azure 通过 Azure DDoS 保护层来保护你,使你免受 DDoS 攻击。这是 Azure 物理网络中客户无法访问

的一层。它是 Azure 平台的一部分,可与所有服务一起免费获取它。你不需要执行任何操作或配置任何

内容,即可使用该保护。它始终在那里保护你的安全。

详细信息 阅读有关 Azure DDoS 保护的详细信息。

Azure Web 应用程序防火墙

你需要针对许多可能的威胁来保护应用程序,包括开放式 Web 应用程序安全项目 (OWASP) 规范中定义

的威胁,如 SQL 注入和跨站点脚本 (XSS)。Azure Web 应用程序防火墙可以帮助你应对这些威胁。Web

应用程序防火墙是 Azure 应用程序网关服务的一项功能,可为你的应用程序提供实时保护。

它可以检测 OWASP 核心规则集中定义的恶意攻击,并阻止这些攻击到达你的应用程序。它还会报告已

尝试或正在进行的攻击,以便你查看哪些威胁正试图攻入你的应用程序。这增加了一层安全防护以保护

你的应用程序。

默认数据加密

你通过准备好安全的 connectionstrings 和防火墙规则来保护数据存储。但如果攻击者能够通过某

种途径访问你的数据,你希望通过加密使数据变得无用。

默认情况下,当在 Azure SQL 数据库、Azure SQL 数据仓库、Azure Database for MySQL、Azure

Database for PostgreSQL、Azure 存储、Azure Cosmos DB 或 Azure Data Lake Store 中存储数据时,会

对数据加密。这一切都会自动完成;你在使用时无需进行任何配置,也无需加密或解密数据。

Page 35: Azure 哂卹人厦 啨南€¦ · 1 垸 1 章 | Azure 哂卹人厦啨南 1 哂卹人厦 啨南 哔今对天件厫坞关嗸务坋需噾噳以哜任何时候奵墯吏,堤 奃种夑势只

30 第 5 章 | 部署 Azure 服务的位置和方式

5

部署 服务的位置和方式你选择使用的 Azure 服务决定了你的部署选项,反之亦然。因此,了解

Azure 中的部署选项以及它们的影响非常重要。

DevOps 理念

快速交付、快速迭代是打造出色软件的关键。因此,应将你的新代码与团队的代码合并,并尽量快速、

频繁地部署和测试代码,以确定软件运行是否正常、你构建的内容是否能满足用户需求。

到目前为止,我们在本书中介绍的许多 Azure 服务都能够自动接收交付的代码,通常是通过你在服务中

设置的持续交付 (CD) 管道。

除了 Azure 服务的本机功能外,你还可以使用 Visual Studio Team Services 来生成、测试和部署应用程

序。你在 Visual Studio Team Services 中可以轻松创建新的生成和部署管道,还可以执行自动完成负载

测试以及将部署插槽交换到生产环境中等操作。

试试看 Visual Studio Team Services 入门。

Azure 资源管理器模板

本指南中介绍的所有 Azure 服务都以 Azure 资源管理器为基础。我们可以使用资源管理器模板将环境脚

本编写为基础架构即代码 (IaC)。这些模板是 JSON 文件,用于描述要部署的内容及其参数。

可以使用 Azure 资源组项目模板在 Visual Studio 和 Visual Studio Code 中创建资源管理器模板。还可以

通过单击“自动化脚本”按钮(在 Azure 门户中每个资源的菜单栏上提供)从 Azure 门户中生成资源管

理器模板。这将为给定资源生成资源管理器模板,甚至可以生成用于使用 Azure 命令行接口 (CLI)、

Windows PowerShell、.NET 和 Ruby 创建资源的代码。

拥有资源管理器模板后,可以使用 Windows PowerShell、Azure CLI 或 Visual Studio 将其部署到 Azure。

你也可以使用 Visual Studio Team Services 在 CD 管道中自动完成其部署。

Page 36: Azure 哂卹人厦 啨南€¦ · 1 垸 1 章 | Azure 哂卹人厦啨南 1 哂卹人厦 啨南 哔今对天件厫坞关嗸务坋需噾噳以哜任何时候奵墯吏,堤 奃种夑势只

31 第 5 章 | 部署 Azure 服务的位置和方式

使用资源管理器模板可以部署要在 Azure 平台上的公有云中或 Azure Stack 内部运行的应用程序。

使用资源管理器将资源部署到云的一个极佳示例是可在许多 GitHub 存储库中找到的“部署到 Azure”

按钮,如图 5-1 所示。

图 5-1:在 GitHub 中使用资源管理器模板一键部署 Azure 逻辑应用

Azure Service Fabric

运行应用程序的另一种方法是在 Azure Service Fabric 上运行它们。Service Fabric 是 Microsoft 用来运

行许多 Azure 资源并使其高度可用、高性能且可自愈的基础。现在,你可以自行使用 Service Fabric 来

托管你自己的服务。

你可以使用 Azure Service Fabric SDK 来为 Service Fabric 创建应用程序。你还可以在 Service Fabric 中

运行任何可执行文件,甚至可以使用 Service Fabric 来托管容器。

Service Fabric 的非凡之处在于,它可使你的应用程序与许多 Azure 服务一样高性能、可靠且安全,你

可以在任意位置使用它:可以在 Azure 中、本地部署中、你自己的计算机上,甚至是其他云中的虚拟机

(VM) 上部署 Service Fabric。

在 Azure Service Fabric 中部署应用程序后,它可以为你带来以下好处:

负载均衡

自动缩放

高可用性

自愈

复制和故障转移

滚动升级

和自动回滚

Azure 中的容器

容器是新闻中常见的技术流行词之一。但容器不仅仅是流行词,容器实际上对于运行应用程序非常有

用。容器基本上是一个轻量级虚拟机,它的启动和停止速度比虚拟机快得多,因此在生产中开发、测试

和运行应用程序时更有用。

容器的主要优势在于,单个容器始终是相同的。你在开发应用时是在本地运行容器,而在云中或其他任

何地方都会使用相同的容器配置。整个团队都会使用完全相同的容器配置,因此你知道,基础架构对于

每个人都相同并且 在生产中也是相同的。使用容器时,年长的开发人员经常说的那句“在我的计算机

上正常工作”现在意味着在生产环境中同样能正常工作。

有许多用于运行容器的技术,Docker 是其中之一。Azure 可以通过 Azure 容器实例和 Azure 容器服务,

甚至 Services Fabric 和在 Linux 中运行的 Azure 应用服务来为你运行和管理容器。

Page 37: Azure 哂卹人厦 啨南€¦ · 1 垸 1 章 | Azure 哂卹人厦啨南 1 哂卹人厦 啨南 哔今对天件厫坞关嗸务坋需噾噳以哜任何时候奵墯吏,堤 奃种夑势只

32 第 5 章 | 部署 Azure 服务的位置和方式

表 5-1 显示了使用容器时可用于给定方案的服务。

表 5-1:选择要用于容器的 Azure 服务

Azure 容器服务 Azure 容器实例

Azure Service

Fabric

用于复杂系统(带有容器协调程序)的生

产部署 X

用于运行简单配置(可能没有协调程序) X

对于容器中长时间运行的工作负载 X

对于容器中短时间运行的工作负载 X

用于协调基于容器的系统 X X

使用开源协调程序(DC/OS、Docker

Swarm、Kubernetes)进行协调 X

用内置协调程序协调 X

注意 请记住,当你使用容器时,你实际上是在使用基础架构即服务 (IaaS) 产品,你需负责操作系统 (OS)、修补、负载均衡等。

Azure Stack

如果你需要将应用程序和数据保留在本地,但仍希望从 Azure 提供的功能中受益,那么 Azure Stack 是

适合你的产品。在业内独树一帜的 Azure Stack 是你在自己的环境中托管的 Azure 的扩展。它本质上是

开箱即用的 Azure。

Azure Stack 的使用方式与 Azure 相同,具有相同的 Azure 门户体验和相同的 API,可通过这些 API 来

使用 Azure CLI、Windows PowerShell 或你喜欢的 IDE。

可在 Azure Stack 中运行类似 Azure 应用服务和 Azure 虚拟机之类的服务。所有的一切都与在公有云中

完全相同,只是现在你是在本地运行它。如果你决定迁移到公有云,只需将服务从 Azure Stack 推送到

Azure。

部署位置和部署时间

表 5-2 总结了用于 Azure 的部署选项。请注意,只有将公有云与资源管理器模板结合使用或在本地使用

Azure Stack 时,才能使用本指南中讨论过的平台即服务 (PaaS) 服务。

表 5-2:比较 Azure 部署选项

IaaS PaaS

本地部署 Azure Stack

容器

Service Fabric

Azure Stack

Service Fabric

公有云 容器

Service Fabric

Service Fabric

资源管理器模板

Page 38: Azure 哂卹人厦 啨南€¦ · 1 垸 1 章 | Azure 哂卹人厦啨南 1 哂卹人厦 啨南 哔今对天件厫坞关嗸务坋需噾噳以哜任何时候奵墯吏,堤 奃种夑势只

33 第 6 章 | Azure 演练

6

演练现在,你已经了解了 Azure 是什么以及它提供的服务,让我们开始使用

它吧。

演练 #1:Azure 门户

最重要的 Azure 工具之一是 Azure 门户,可在 https://portal.azure.com/ 中找到它。这是 Azure 中心,

在这里你可以用 Azure 完成你要完成的所有任务。你在 Azure 门户中可以执行的大多数操作也可通过

Azure API、Azure 命令行接口 (CLI) 和 Azure PowerShell 来执行。

通过访问 https://preview.portal.azure.com 可以使用 Azure 门户的预览。该预览中已包含尚未公开发布

但你可以尝试并提供反馈的功能。本指南的其余部分将重点介绍门户公开发布版本,而不是预览版。

你将在 Azure 门户中看到的第一项内容是带有磁贴的仪表板。你可以创建和自定义仪表板,并与团队成

员共享仪表板或仅将其留作自己使用。

Azure 门户中的磁贴

仪表板包含显示服务信息或充当服务快捷方式的磁贴。你可以在整个门户中、在所有服务的页面中找到

图 6-1 所示的磁贴。这些磁贴对于获取服务工作方式的快速概览很有帮助。

图 6-1:Azure 门户中的信息磁贴

例如,默认情况下,Application Insights 服务显示的磁贴会指明是否有任何警报处于活动状态、是否有

任何实时数据进来、在过去 24 小时处于活动状态的用户数、可用性情况等等。这是用可用格式表示的

非常有用的信息。你可以自定义磁贴的大小和信息。还可以通过调整图表的日程表、让它们以不同格式

(如折线或条形)显示数据来自定义图表的外观。

你还可以直接将磁贴固定在仪表板上(图 6-2),使其成为你进入门户后看到的第一项内容。例如,你

可以固定来自你关注的所有服务指标的磁贴,以创建要与团队分享或要在团队会议室的监视器上显示的

监控仪表板。

Page 39: Azure 哂卹人厦 啨南€¦ · 1 垸 1 章 | Azure 哂卹人厦啨南 1 哂卹人厦 啨南 哔今对天件厫坞关嗸务坋需噾噳以哜任何时候奵墯吏,堤 奃种夑势只

34 第 6 章 | Azure 演练

图 6-2:可将磁贴固定到仪表板上

查找服务

Azure 服务是 Azure 门户的中心主题。你可以通过多种方式添加和查找这些服务。

要创建新服务,请在门户窗口的左上角单击加号(“+”)。此时将打开商城的搜索框,其中会显示包

括 Web App 和 Linux 服务器在内的所有服务,如图 6-3 所示。

图 6-3:Azure 门户中的“新建资源”按钮

找到所需服务(图 6-4)后,向导将指导你完成配置和部署过程。

图 6-4:资源搜索结果

当你拥有一些资源时,可以通过搜索找到这些资源。可以使用门户顶部的搜索框(图 6-5)搜索所有资

源并直接访问所需资源。

Page 40: Azure 哂卹人厦 啨南€¦ · 1 垸 1 章 | Azure 哂卹人厦啨南 1 哂卹人厦 啨南 哔今对天件厫坞关嗸务坋需噾噳以哜任何时候奵墯吏,堤 奃种夑势只

35 第 6 章 | Azure 演练

图 6-5:Azure 门户中的收藏夹菜单

门户左侧的窗格中是收藏夹菜单。此菜单显示资源类别(用图标表示),如 Azure 应用服务。可以通过

上下拖动来重新排列图标。你还可以通过展开收藏夹菜单并单击这些类别对应的星形图标来选择要查看

的图标。

了解边栏选项卡

Azure 中的页面也称为边栏选项卡。边栏选项卡无处不在,甚至可将其固定在仪表板上。当你打开 Web

应用时,首先看到的是概述边栏选项卡。这个特定的边栏选项卡提供了用于停止、启动和重新启动 Web

应用的工具,还显示了包含指标(如请求数和错误数)的磁贴。当你选择其他菜单项时,将打开一个新

的边栏选项卡。边栏选项卡总是在上下文中打开。因此,如果你打开“部署槽”边栏选项卡并单击“创

建新部署槽”按钮,则会在“部署槽”边栏选项卡右侧显示新的边栏选项卡,保留你所处的上下文。

创建新虚拟机

下面我们使用 Azure 门户创建一个运行 Red Hat Linux 的新虚拟机 (VM)。创建后,我们将演示如何关闭

和删除该虚拟机,这样你便不必再为其付费。

关于资源组的简单说明

虚拟机将在资源组 中部署。所有 Azure 资源都驻留在资源组中。资源组是保存资源的逻辑容器。你可以管理资源组的安全性,还可以查看组中资源的成本。常见做法是将相关服务捆绑在一个资源组中,以便于保证其安全,并可轻松确定其成本。

1. 在 Azure 门户的左上角,单击“创建新服务”按钮。

2. 在搜索框中键入 Linux 虚拟机。

你会得到许多搜索结果,包括 Red Hat Enterprise Linux。让我们来试用一下它的最新版本。

3. 单击最新版本的 Red Hat Enterprise Linux。

Page 41: Azure 哂卹人厦 啨南€¦ · 1 垸 1 章 | Azure 哂卹人厦啨南 1 哂卹人厦 啨南 哔今对天件厫坞关嗸务坋需噾噳以哜任何时候奵墯吏,堤 奃种夑势只

36 第 6 章 | Azure 演练

4. 单击“创建”。

将打开“创建虚拟机向导”。

a. 为虚拟机选择一个名称。

b. 选择驱动器类型。SSD 提供的虚拟机速度更快,但成本也更高。对于此演练,请选择 SSD。

c. 键入用户名。

d. 对于身份验证类型,请选择“密码”。

e. 键入密码并确认。

f. 在“资源组”框中,键入新名称。

g. 选择虚拟机的位置,然后单击“确定”。

5. 选择虚拟机的大小。

虚拟机的性能决定了需要为其支付的费用。虚拟机有许多大小选项,有些很小,有些异常地大。你可

以使用向导来选择所需的内核数和内存量,并据此来选择选项。此外,大小选项还附带其他特性:

a. 硬盘驱动器类型(SSD 或普通 HDD)。

b. 最大 IOPS 量(每秒的输入/输出操作数)。这对虚拟机的性能有很大影响,尤其是当你运

行的应用程序从硬盘驱动器进行大量读写时。

c. 可在虚拟机中安装的数据驱动器的数量。

d. 实现负载均衡的能力。

e. 虚拟机中安装的显卡。如果你需要做大量的图形渲染工作或繁重的计算工作,此特性很

有用。

6. 选择大小后,可以配置其他设置,如虚拟网络和 IP 地址以及在计算机上安装扩展。现在,将所有内

容保持原样并单击“确定”。

7. 查看摘要,同意条款,然后单击“购买”。

现在将部署虚拟机。此过程通常只需要几分钟的时间。

使用安全外壳连接到虚拟机

现在,你已经创建了包含 Red Hat Linux 的虚拟机,接下来可以连接到它并开始使用它。可以使用各种

工具,如安全外壳 (SSH),甚至可以通过远程桌面连接到虚拟机。我们将使用 SSH 通过 Azure 门户中的

Cloud Shell 连接到虚拟机。

Cloud Shell 是浏览器中的 Azure CLI,不必再在你的电脑上安装任何内容。Cloud Shell 使用 Azure CLI

2.0 版。你可以使用 Cloud Shell 中的 Bash 或 PowerShell 来与 Azure 资源进行交互。

要启动 Cloud Shell,请在 Azure 门户的右上角单击此处显示的按钮:

Page 42: Azure 哂卹人厦 啨南€¦ · 1 垸 1 章 | Azure 哂卹人厦啨南 1 哂卹人厦 啨南 哔今对天件厫坞关嗸务坋需噾噳以哜任何时候奵墯吏,堤 奃种夑势只

37 第 6 章 | Azure 演练

要连接到虚拟机,你需要它的 IP 地址。在 Azure 门户中查找该虚拟机(通过搜索或导航)。在该虚拟

机的“概述”边栏选项卡的左上角,单击连接按钮(请参见图 6-6)。单击该按钮时,边栏选项卡将显

示用于连接虚拟机的 IP 地址,如图 6-6 所示。复制该 IP 地址。

图 6-6:在 Azure 门户中连接到虚拟机

现在,你可以直接在 Cloud Shell 中使用此命令:只需粘贴该命令并按 Enter 即可。你将看到一个警告,

指出没有身份验证密钥。这是因为我们选择了改用密码。选择“是”,键入你的密码,便可进入了!现

在你已经连接到 Red Hat Linux 企业版,可以开始使用它了。图 6-7 显示,我们已通过 Cloud Shell 登录

虚拟机并且正在遍历文件系统:

图 6-7:在 Azure 门户中使用 Cloud Shell 遍历 Linux 文件系统

Page 43: Azure 哂卹人厦 啨南€¦ · 1 垸 1 章 | Azure 哂卹人厦啨南 1 哂卹人厦 啨南 哔今对天件厫坞关嗸务坋需噾噳以哜任何时候奵墯吏,堤 奃种夑势只

38 第 6 章 | Azure 演练

向虚拟机中添加其他存储

如果你使用虚拟机作为数据库服务器,则通常需要有额外的存储空间来处理数据库数据。通过在 Azure

门户中添加附加驱动器可以创建额外存储空间。

1. 转到虚拟机,选择“磁盘”选项卡,然后单击“添加数据磁盘”,如图 6-8 所示。

图 6-8:Azure 门户中虚拟机的“磁盘”选项卡

因为我们没有要附加的现有磁盘,所以请选择“创建磁盘”。

2. 将打开“创建托管磁盘向导”。使用此向导可创建托管驱动器(而不是非托管驱动器)。

托管磁盘完全由 Azure 管理;你不需要为它们创建和维护基础存储帐户。或者,你也可以选择驱动

器的大小及其上面应存储的内容,但我们会将所有选项保留原样。键入名称,然后单击“创建”。

现在,你有一个附加到虚拟机的额外驱动器。

你还可以使用以下命令通过 Cloud Shell 或 Azure CLI 创建并附加新驱动器:

az vm disk attach -g myResourceGroup --vm-name myVM --disk myDataDisk --new --size-gb 50

如果需要有关 Azure CLI 的帮助,可以键入 az -h。所有 Azure CLI 命令都遵循同一结构:az noun(s)

(例如,vm)verb(例如,attach)选项。

在为虚拟机创建新驱动器后,你需要在 Linux 中将其初始化。本文档将指导你完成此过程。

为获得额外的虚拟机存储空间而创建附加驱动器的过程很简单。之后的步骤可能会更复杂,具体取决于

你使用的操作系统。

清理演练资源

如果你已用完虚拟机,则可以通过删除创建虚拟机时创建的资源组来关闭并删除该虚拟机。这包含虚拟

机以及自动创建的所有其他资源。删除资源组后,你将不再为你在本演练中使用的任何资源付费。

Page 44: Azure 哂卹人厦 啨南€¦ · 1 垸 1 章 | Azure 哂卹人厦啨南 1 哂卹人厦 啨南 哔今对天件厫坞关嗸务坋需噾噳以哜任何时候奵墯吏,堤 奃种夑势只

39 第 6 章 | Azure 演练

演练 #2:在 Azure 中用 MongoDB 开发 Node.js

Web 应用

在此演练中,我们将部署一个与 MongoDB 连接的简单 Node.js 应用程序,并在 Azure 中托管该应用程

序。我们将在 Azure Web App 中托管该应用程序并使用 Azure Cosmos DB 作为我们的数据库,因为它

有一个 MongoDB 接口。

接下来,你需要在计算机上安装 Azure CLI(v2.0 或更高版本)、Git(v2 或更高版本)、Node.js 和

NPM(v6 或更高版本)以及 MongoDB(3.4 或更高版本)。

我们将使用采用 MEAN.js Web 框架的示例应用程序。

使用 Azure 门户创建 Web 应用和数据库

为托管 Node.js 应用程序,我们将在 Azure Web App 中创建一个新 Web 应用。

1. 在 Azure 门户中,单击“创建新服务”按钮。

2. 搜索 Web App。“Web App”边栏选项卡将打开。单击“创建”开始创建。

3. “Web App 创建”边栏选项卡将打开。

a. 键入 Web App 的名称。

b. 通过提供名称来创建一个新资源组。

c. 选择要运行的操作系统(Windows 或 Linux)。

d. 选择或创建应用服务计划,然后单击“创建”。

Web App 在应用服务计划上运行

应用服务(如 Web App)在 Azure 应用服务计划上运行。应用服务计划是资源和功能(如 CPU 和内存)的抽象,在定价层中表示。应用服务计划还会绑定到你选择的特定地理区域。例如,你可以在定价层 S1 的应用服务计划中运行 Web App 应用程序(请参见图 6-9),该应用服务计划有 1 个核心和 1.75 GB RAM。

图 6-9:Azure 应用服务计划说明

只要你认为自己需要在所有应用服务之间共享资源,便可以按自己的意愿在应用服务计划中运行尽可能多的应用服务。

Page 45: Azure 哂卹人厦 啨南€¦ · 1 垸 1 章 | Azure 哂卹人厦啨南 1 哂卹人厦 啨南 哔今对天件厫坞关嗸务坋需噾噳以哜任何时候奵墯吏,堤 奃种夑势只

40 第 6 章 | Azure 演练

为托管数据库,我们将创建一个使用 MongoDB API 的 Cosmos DB 数据库。此数据库的工作方式与

MongoDB 完全相同,并且它拥有 Cosmos DB 的所有优点。

1. 在 Azure 门户中,单击“创建新服务”按钮。

2. 搜索 Cosmos DB。Cosmos DB 边栏选项卡将打开。单击“创建”开始。

a. 键入数据库帐户的名称 (ID)。

b. 选择 MongoDB API。

c. 选择你已为该 Web 应用创建的资源组。

d. 选择位置。首选位置是与 Web 应用相同或接近的位置。

e. 单击“创建”。

在本地运行 Node.js 应用程序和 MongoDB 数据库

在 Azure 中运行该应用之前,我们先在本地运行它。

如果你尚未安装 MongoDB Community 版,请先安装它:

1. 在计算机上打开命令提示符,导航到 MongoDB 安装的 bin 目录。它可能类似于 C:\Program Files\

MongoDB\Server\3.4\bin。

2. 键入 mongo 以连接到本地 MongoDB 服务器。

3. 如果连接失败,请确保你的 MongoDB 数据库已启动。通常,你需要通过运行 mongod 来启动该数据库。

下面要克隆 Node.js 初学者应用程序并运行它:

4. 在命令窗口中,导航到要将应用程序源下载到的目录。

5. 运行 git clone https://github.com/Azure-Samples/meanjs.git 以克隆应用程序。

6. 通过运行以下命令来启动应用程序:

cd meanjs npm install npm start

7. 完全加载后,你将看到一条包含应用程序 URL 的消息。打开浏览器并导航到服务器地址(类似于

http://localhost:3000)。它应该与图 6-10 相似。

图 6-10: Mean.JS 样本应用程序

8. 在菜单栏上,单击“注册”,然后尝试创建新用户。如果有效,应用将可以访问本地 MongoDB 数据库,它将在该数据库中写入用户。

Page 46: Azure 哂卹人厦 啨南€¦ · 1 垸 1 章 | Azure 哂卹人厦啨南 1 哂卹人厦 啨南 哔今对天件厫坞关嗸务坋需噾噳以哜任何时候奵墯吏,堤 奃种夑势只

41 第 6 章 | Azure 演练

将 Node.js 应用程序部署到 Azure

现在,你有一个正在本地运行的工作应用程序。让我们将其部署到 Azure。我们首先将该 Node.js 应用程序部署到之前在 Web App 内创建的 Web 应用中。

我们将使用 Azure CLI 将应用程序从 Git 推送到 Azure。确保你的计算机中已安装 Azure CLI 2.0 或更新版本。安装完成后,你需要运行以下 az login 命令来登录你的 Azure 订阅。此时将打开一个网站,在这里你可以通过 CLI 对 Azure 订阅的使用进行身份验证和授权。

对于 FTP 和本地 Git,必须在服务器上配置部署用户,以对你的部署进行身份验证。此部署用户是帐户级别的,与你的 Azure 订阅帐户不同。此部署用户只需进行一次配置。在 Azure CLI 中,运行以下命令,其中 username 和 password 是你确定和填充的值(不包括 < 或 > 字符):

az webapp deployment user set --user-name <username> --password <password>

接下来,通过运行以下命令将本地 Git 存储库与 Web 应用相关联:

az webapp deployment source config-local-git --name <app_name> --resource-group <resource_group_name>

此命令将返回以下形式的 URL:

https://<username>@<app_name>.scm.azurewebsites.net:443/<app_name>.git

现在,我们将使用此 URL 将应用程序推送到 Azure。首先,我们通过 remote 命令将 Azure 添加到本地

Git 存储库中。通过 cd 命令转到应用程序源代码的 meanjs 目录。现在运行:

git remote add azure <url_for_deployment>

要部署该应用,请运行 git push azure master。系统将提示你输入先前创建的凭据。部署可能需

要一段时间。完成后你会收到通知。

完成后,你可以使用 http://<app_name>.azurewebsites.net 浏览到应用程序。

现在,应用程序已被部署到 Web 应用,我们正使用 MongoDB API 运行一个 Cosmos DB 数据库,但两者尚未连接。下面,我们将其连接起来。

连接应用程序和数据库

要将应用程序连接到数据库,应用程序需要知道数据库的位置。我们可以通过在 Web 应用中设置环境

变量 MONGODB_URI 来确定该位置。可以使用 Azure CLI 通过运行以下命令来完成此操作:

az webapp config appsettings update \ --name <app_name> \ --resource-group myResourceGroup \ --settings MONGODB_URI="mongodb://<cosmosdb_name>:<primary_master_key>@<cosmosdb_name>.documents.azure.com:10250/mean?ssl=true"

你可以在 Azure 门户中找到需要用于 MONGODB_URI 值的 Cosmo DB 连接字符串。在那里,你可以在

Cosmos DB 帐户的“连接字符串”菜单中找到它。

在使用 Azure CLI 运行该命令之后,Web 应用的应用程序设置将类似于图 6-11。

Page 47: Azure 哂卹人厦 啨南€¦ · 1 垸 1 章 | Azure 哂卹人厦啨南 1 哂卹人厦 啨南 哔今对天件厫坞关嗸务坋需噾噳以哜任何时候奵墯吏,堤 奃种夑势只

42 第 6 章 | Azure 演练

图 6-11:Azure Web App 的应用程序设置

你也可以使用 Azure 门户添加该设置,而不是运行 Azure CLI 命令。

现在,再次使用 http://<app_name>.azurewebsites.net 导航到 Web 应用。尝试注册新用户。成功后,

应用程序将与数据库进行通信。现在,你有一个 Node.js 应用程序和一个使用 MongoDB API 的 Azure

Cosmos DB。

使用 GitHub 设置持续交付

到目前为止,我们已经将代码从本地 Git 存储库推送至 Azure。如果你独自工作,这样就可以了。但如

果你在团队中工作,则需要其他类型的源代码管理,如 Visual Studio Team Services 或 GitHub。

我们将使用 GitHub 来推送我们的代码并将其链接到 Web 应用,以便在持续交付 (CD) 管道中自动部署

更改。

1. 访问 https://github.com/ 并创建一个新存储库。

你需要登录或创建新帐户才能执行此操作。

2. 通过访问 https://github.com/new 创建新存储库。

a. 键入存储库的名称。

b. 将其他设置保留原样(公有存储库,不要创建自述文件)

c. 创建存储库。此时将生成一个类似于图 6-12 的屏幕

图 6-12:GitHub 中的存储库链接

3. 使用 URL 为本地 Git 存储库设置远程目标。你可以在命令窗口中执行此操作。

a. 通过 cd 命令转到应用程序源代码的 meanjs 目录。

b. 运行以下命令:

git remote add github https://github.com/bmaluijb/test.git

c. 运行以下命令以将代码推送到 GitHub:

git push github

现在,我们的代码在 GitHub 中,你可以将其与你的团队共享。接下来,我们来设置 CD。我们将通过

Azure 门户使用 Web App 的“部署选项”功能。我们本来还可以在 Web App 中使用持续交付功能,但

这需要一个 Visual Studio Team Services 帐户,我们力求简单。

Page 48: Azure 哂卹人厦 啨南€¦ · 1 垸 1 章 | Azure 哂卹人厦啨南 1 哂卹人厦 啨南 哔今对天件厫坞关嗸务坋需噾噳以哜任何时候奵墯吏,堤 奃种夑势只

43 第 6 章 | Azure 演练

1. 在 Azure 门户中,转到托管 Node.js 应用程序的 Web 应用。

2. 在菜单栏上,单击“部署选项”。

3. 可能已经为本地 Git 存储库配置了部署选项。如果是这样,你需要单击“断开连接”。

4. 在“选择源”中,选择 GitHub。

5. 在“授权”部分中,通过单击“授权”并授予权限来授权 Azure 使用 GitHub。

6. 在“选择项目”部分中,选择你刚创建的 GitHub 存储库。

7. 将分支设置为“主”

8. 单击“确定”并等待几秒钟。

返回“部署选项”菜单。现在,你会看到它已连接。从此时开始,只要向 GitHub 推送源代码的新版

本,它便会自动生成并部署到 Web 应用,如图 6-13 所示。还可以通过单击“同步”按钮来强制执行此

过程。

图 6-13:Web App 的“部署选项”边栏选项卡

设置过渡环境

使用 Web App,你可以设置用来测试新应用程序版本的过渡槽。可将部署槽用于此用途。部署槽本身

就是完整的应用服务,可用来在将代码升级到下一个插槽之前对代码进行测试。

可将部署槽用于过渡、负载测试和生产(这始终是原始应用服务,因此在我们的案例中为 Node.js Web

应用)。实际上,你可以根据需要拥有任意多个部署槽,而不会产生任何额外成本。部署槽都在同一个

应用服务计划中运行,你只需为应用服务计划付费。你应该记住,在应用服务计划中拥有额外部署槽会

消耗 CPU 和内存等资源。

可以从 Web 应用的“部署槽”菜单项中创建新部署槽。确保你在标准或高级定价层中运行 Web 应用,

因为免费计划不附带任何部署槽。

在你创建的每个部署槽中,都可以像以前一样配置部署选项,以便自动部署代码。甚至可以为不同环境

处理不同的源代码分支,并自动将特定分支部署到特定部署槽。

此外,还可以在部署槽中测试最终版本,测试满意后,再将其与生产槽交换。这样可以在交换之前先预

热应用程序,从而使部署无需停机。

我们先创建部署槽并切换至该槽。

1. 在 Azure 门户中,转到托管 Node.js 应用程序的 Web 应用。

2. 在菜单栏上,单击“部署槽”。将打开部署槽边栏选项卡。

Page 49: Azure 哂卹人厦 啨南€¦ · 1 垸 1 章 | Azure 哂卹人厦啨南 1 哂卹人厦 啨南 哔今对天件厫坞关嗸务坋需噾噳以哜任何时候奵墯吏,堤 奃种夑势只

44 第 6 章 | Azure 演练

3. 单击加号 (+) 以创建新部署槽。

a. 键入插槽的名称(例如,过渡)。

b. 选择 Node.js Web 应用作为配置源(此操作会将应用程序设置复制到新插槽中)。

c. 单击“确定”以创建插槽。

4. 在创建插槽后,它与原始 Web 应用类似。

a. 为该插槽设置 CD,过程与之前为 Web 应用设置的过程相同。

b. 在原始的 Node.js Web 应用中断开 CD 连接。这样,当你推送新代码时,它只能交付到过

渡槽中

5. 对 Node.js 应用程序进行更改。

a. 在 home.client.view.html 文件中更改一些文本(可在 meanjs\modules\core\client\views

文件夹中找到该文件)。

b. 将其提交至 Git 并推送至 GitHub,与部署 Node.js 应用时的过程相同。

新版本现在位于过渡槽中,而不是原来的 Web 应用中(我们称之为生产槽)。你可以通过导航到 Node.js

Web 应用的 URL 和过渡槽的 URL 来验证这一点(可在插槽的概述边栏选项卡中找到,与 Web 应用概述

边栏选项卡相似)。

我们将新版本投入生产。

1. 在 Azure 门户中,转到 Node.js Web 应用。

2. 在菜单栏上,单击“部署槽”以打开部署槽边栏选项卡。

3. 单击“交换”按钮以打开“交换”边栏选项卡。

a. 将所有设置保留原样。

b. 单击“确定”启动交换。

交换完成后,新版本的 Node.js Web 应用将位于生产环境中(可通过导航到 Node.js Web 应用的 URL

来测试这一点)。以这种方式使用部署槽非常有帮助,因为你可以在新版本进入生产环境之前对其进行

测试,然后再将其部署到生产环境中,而不会造成停机。

具有诊断日志的其他诊断

当应用程序运行时,了解它的执行情况非常重要。监视应用的一个出色方法是使用诊断日志查看来自

Web 应用的实时诊断日志记录。甚至可以通过管道将日志连接到控制台窗口中。要执行此操作,请在

Azure CLI 中运行以下命令:

az webapp log tail --name <app_name> --resource-group myResourceGroup

当你在 Web 应用中使用应用程序生成一些流量时,你会看到一些日志记录。

如何设置复杂的监视和警报

跟踪应用程序执行情况的另一种极好的方法是使用 Application Insights。这是 Azure 中的监视工具,通

过它可以了解应用程序中的一切情况,如使用你的应用程序的访问者数量、发生的异常数量以及异常在

代码中的位置。与诊断日志不同,Application Insights 会产生小额费用。

Page 50: Azure 哂卹人厦 啨南€¦ · 1 垸 1 章 | Azure 哂卹人厦啨南 1 哂卹人厦 啨南 哔今对天件厫坞关嗸务坋需噾噳以哜任何时候奵墯吏,堤 奃种夑势只

45 第 6 章 | Azure 演练

你可以在 Azure 门户中通过 Web 应用来设置 Application Insights。

1. 转到 Azure 门户,然后转到托管 Node.js 应用程序的 Web 应用。

2. 在菜单栏上,单击 Application Insights。

3. 选择“创建新资源”。

a. 为 Application Insights 实例键入名称并选择位置。

b. 单击“确定”。现在,Application Insights 将被部署并开始收集应用程序数据。

你需要对应用程序进行配置,以便开始向 Application Insights 发送数据。对于我们的示例 Node.js 应用

程序,你需要执行以下操作:

1. 在命令提示符处,通过 cd 转到 Node.js 应用程序的 meanjs 文件夹。

2. 运行 npm install applicationinsights –save。

3. 转到 Azure 门户并检索 Application Insights 检测密钥。

你将在 Application Insights 实例中的“属性”下找到此密钥。

4. 打开 Node.js Web 应用的 server.js 文件。

5. 在该行之前 添加以下三行 JavaScript 代码:

var app = require('./config/lib/app'); const appInsights = require("applicationinsights"); appInsights.setup("<instrumentation_key>"); appInsights.start();

6. 将更改推送到 GitHub 并启动自动部署。在命令提示符处运行以下命令:

git commit -a -m "added Application Insights support"

7. 运行 git push github,更改将被推送至 GitHub 并自动部署至 Web 应用。

部署完成后,应用程序将向 Application Insights 发送数据。

默认情况下,Application Insights 会执行智能检测。这是一个非常智能的功能,可以检测到什么时候将

会出现问题,并在出现问题时提醒你。它可以检测到失败请求突然增加以及应用程序运行异常缓慢的情

况。你还可以在 Application Insights 的“警报”菜单中为各种指标和条件创建自己的自定义事件,如图

6-14 所示。

图 6-14:Application Insights 警报

现在,转到 Azure 门户,查找 Application Insights 资源并单击它。在此处你将看到概述,其中显示基

本指标,如服务器响应时间、页面视图加载时间以及服务器请求和失败请求的数量。如果你在这里看到

一些数据,则表明 Application Insights 正在工作。

注意 通过遵循本指南可以收集要发送给 Application Insights 的其他信息。

Page 51: Azure 哂卹人厦 啨南€¦ · 1 垸 1 章 | Azure 哂卹人厦啨南 1 哂卹人厦 啨南 哔今对天件厫坞关嗸务坋需噾噳以哜任何时候奵墯吏,堤 奃种夑势只

46 第 6 章 | Azure 演练

缩放 Web 应用

当你有许多用户时,需要对 Web 应用进行扩展来容纳通信。当不繁忙时,需要缩减以节省成本。可以

使用应用服务的自动缩放功能来实现这一点。请注意,你需要在标准或高级定价层中运行 Web App 才

能使用此功能。

Web 应用有一个名为“扩展”的菜单项,如图 6-15 所示。你可以使用此菜单项进行手动或自动扩展。

图 6-15:通过 Azure 门户缩放 Web 应用

“扩展”表示添加更多应用程序实例来处理负载。当你自动扩展或缩减时,可以根据指标(如 CPU 或

内存的使用百分比)、按计划(每天下午 5 点)或将两者结合来进行。很容易进行设置和监视。

为生产做好准备!添加安全套接字层

现在,应用已经为生产做好准备,你应确认它是安全的。除了身份验证和授权之外,通过 HTTPS 提供

Web 应用程序是你可以做的最重要的事情之一。因为如果没有 HTTPS,入侵者就能看到你的资源之间

的通信并将其用于恶意用途(如登录到你的应用程序)。此外,HTTPS 是服务工作线程等先进功能所必

需的。

通过将 SSL 证书导入 Web 应用并将其绑定到你的(自定义)域名之一,可以通过安全套接字层 (SSL) 向

Web 应用提供通信。你可以导入你或你公司购买的自己的 SSL 证书,或通过 Azure 应用服务证书购买

一个新证书,这样便于你购买和验证证书。导入证书后,将其连接到 Web 应用的一个域名绑定。上述

所有操作均可在 Web 应用的“SSL 证书”菜单中完成。

演练 #3:使用 Azure 创建移动应用的后端

现在几乎每个人都有移动设备。大多数应用程序的通信主要来自移动设备,并且这种趋势将会继续增

长。为公司构建移动应用是一回事,但提供强健而可靠的体验是另一回事。Azure 可通过 Azure 应用服

务移动应用提供高级后端,从而帮助解决这一问题。

Azure 移动应用应用程序由两部分组成:

可提供用于与数据库通信的 API 并执行诸如身份验证、脱机同步和推送通知等操作的后端

可供各种平台轻松连接后端的 SDK

Page 52: Azure 哂卹人厦 啨南€¦ · 1 垸 1 章 | Azure 哂卹人厦啨南 1 哂卹人厦 啨南 哔今对天件厫坞关嗸务坋需噾噳以哜任何时候奵墯吏,堤 奃种夑势只

47 第 6 章 | Azure 演练

你可在 Node.js 和 C# 中为移动应用应用程序构建后端。客户端 SDK 基本上可用于正在使用的每个移

动平台。用于跨平台、本机和混合移动应用,例如,它适用于 Android、Cordova、iOS、Windows、

Xamarin.Android、Xamarin.Forms 和 Xamarin.IOS。

在此演练中,我们将用 C# 创建一个新移动应用后端,此后端将用于用 Xamarin.Android 构建的 Android

应用。

接下来,你需要使用 Visual Studio 2017 安装程序来安装使用 .NET 工作负载的移动开发。这将安装适用

于 Android 的 Xamarin 工具和必要的 SDK。

当你在 Mac 上的 Visual Studio for Mac 中工作时,你可以执行相同操作。

通过 Azure 门户创建移动应用

轻松入门。我们先通过 Azure 门户为客户端创建移动后端和初学者应用程序。

1. 在 Azure 门户中,单击“创建新服务”,然后在“搜索”框中键入移动应用快速入门。

2. 选择“移动应用程序快速入门”结果,然后单击“创建”。

此时将打开“移动应用创建向导”。

a. 为你的移动应用键入名称。

b. 创建新资源组。

c. 创建要在其中运行移动应用的新应用服务计划。对此演练可以使用免费定价层。

d. 关闭 Application Insights 设置。

e. 单击“创建”。就这么简单!移动应用现已部署完成。

在部署移动应用后,便可以开始使用它。在 Azure 门户的移动应用中,单击“快速入门”菜单项,然后

选择“Xamarin.Android”。将打开“快速入门向导”。

步骤 1:连接到数据库

你需要连接数据库以存储数据。单击信息图标即可开始。在刚刚打开的“数据连接”选项卡上,单击

“创建新服务”。在打开的“添加数据连接向导”中,执行以下操作:

1. 对于“类型”,请选择“SQL 数据库”。

2. 创建具有新目标服务器的新数据库。

3. 将“连接字符串”保留原样。

4. 单击“确定”。

数据连接随即创建。

步骤 2:创建表 API

要与数据库通信,你需要一个 API。通过执行以下步骤可创建在移动应用中托管的 API 后端:

1. 在“步骤 2”区域中,选择“C#”,然后单击“下载”。此时将下载你要部署到移动应用的后端项目。

2. 解压你刚下载的文件,然后用 Visual Studio 2017 或 Visual Studio for Mac 打开该文件。

Page 53: Azure 哂卹人厦 啨南€¦ · 1 垸 1 章 | Azure 哂卹人厦啨南 1 哂卹人厦 啨南 哔今对天件厫坞关嗸务坋需噾噳以哜任何时候奵墯吏,堤 奃种夑势只

48 第 6 章 | Azure 演练

3. 在 Visual Studio 中,右键单击项目文件,然后选择“发布”。

4. 选择“应用服务”,然后选择“现有”,再单击“发布”。

5. 找到你的移动应用,然后单击“确定”开始发布。就这么简单!移动后端已启动并且正在运行。

离开“步骤 3”以创建新应用,并单击下载。

解压你刚下载的文件,然后用 Visual Studio 2017 或 Visual Studio for Mac 打开该文件。

按 F5 运行该应用程序。此时将启动 Android Emulator 并部署客户端应用。客户端应用是一个 todo 应

用程序。可以在文本框中添加一个项目,它将被写入你的移动应用后端。

向应用中添加身份验证

现在,你有了一个具有后端的可正常工作的移动应用,你应该确保它是安全的。我们来通过 Azure Active

Directory 添加身份验证。要完成此过程,你首先需要针对身份验证向 Azure Active Directory 注册移动应

用。(本教程演示了具体做法。)

Page 54: Azure 哂卹人厦 啨南€¦ · 1 垸 1 章 | Azure 哂卹人厦啨南 1 哂卹人厦 啨南 哔今对天件厫坞关嗸务坋需噾噳以哜任何时候奵墯吏,堤 奃种夑势只

49 第 6 章 | Azure 演练

保护应用程序

在后端 API 中,你需要定义要保护的 API。

1. 在 Visual Studio 2017 或 Visual Studio for Mac 中,转到你的移动应用后端项目。

2. 导航到“控制器”>“TodoItemController.cs”。

3. 将 [Authorize] 属性添加至 TodoItemController 类。

此属性将限制未经身份验证而使用此控制器。

4. 右键单击项目文件,然后将其发布到你的移动应用。

向移动应用中添加身份验证

后端已受到保护。现在,你需要让移动应用了解这一点,以使你能够登录。我们需要要求用户先进行身

份验证,然后才能使用该应用。

1. 在 Visual Studio 中,转到 Xamarin 移动应用项目。

2. 将以下代码添加至 TodoActivity 类:

// 定义经过身份验证的用户。 private MobileServiceUser user; private async Task<bool> Authenticate() { var success = false; try { // 使用服务器托管流程登录 AAD。 user = await client.LoginAsync(this, MobileServiceAuthenticationProvider.WindowsAzureActiveDirectory); CreateAndShowDialog(string.Format("you are now logged in - {0}", user.UserId), "Logged in!"); success = true; } catch (Exception ex) { CreateAndShowDialog(ex, "Authentication failed"); } return success; } [Java.Interop.Export()] public async void LoginUser(View view) { // 仅在身份验证成功后加载数据。 if (await Authenticate()) { //在身份验证成功后隐藏按钮。 FindViewById<Button>(Resource.Id.buttonLoginUser).Visibility = ViewStates.Gone; // 加载数据。 OnRefreshItemsSelected(); } }

这将创建一个用于验证用户身份的新方法和用于新“登录”按钮的方法处理程序。

3. 在 OnCreate 方法中,删除或注释掉下面的代码行:

OnRefreshItemsSelected();

4. 在 Activity_To_Do.axml 文件中,将以下 LoginUser 按钮定义添加到现有的 AddItem 按钮之前:

<Button android:id="@+id/buttonLoginUser" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="LoginUser" android:text="@string/login_button_text" />

Page 55: Azure 哂卹人厦 啨南€¦ · 1 垸 1 章 | Azure 哂卹人厦啨南 1 哂卹人厦 啨南 哔今对天件厫坞关嗸务坋需噾噳以哜任何时候奵墯吏,堤 奃种夑势只

50 第 6 章 | Azure 演练

5. 将以下元素添加到 Strings.xml 资源文件中:

<string name="login_button_text">Sign in</string>

6. 运行应用程序。

现在,“登录”按钮会出现在“添加”按钮旁边。在不登录的情况下,你将无法添加任何项目,因为现

在对 TodoItemController 的所有操作都是安全的。单击“登录”时,你将被定向到 Azure Active

Directory 身份验证屏幕。在这里请使用你用来登录 Azure 门户的帐户。默认情况下,此帐户会被添加

至 Azure Active Directory。登录,你将看到你已成功登录(如图 6-16 所示)并可开始添加待办项目。

图 6-16:刚刚在移动应用的仿真程序中通过身份验证

向应用中添加脱机同步

在许多移动方案中,用户不会始终都能访问互联网。但即使在无法访问互联网时,用户也应该能够继续

工作。为了适应这一需要,他们可以使用 Azure 移动应用中的脱机同步功能。我们来为应用启用该功能:

1. 在 Visual Studio 2017 或 Visual Studio for Mac 中,转至 Xamarin Android 客户端应用。

2. 在 ToDoActivity 类中,取消注释以下行:

#define OFFLINE_SYNC_ENABLED

3. 就这么简单!运行应用以将其部署到 Android Emulator。

现在,该应用的工作方式与以前完全相同,但有一些变化。它使用 IMobileServiceSyncTable 而非

IMobileServiceTable 对象。它还使用 SQLite NuGet 包。这将在 Android 设备上启动一个 SQLite 数

据库,应用离线时将使用该数据库来保存数据。在恢复访问互联网后,本地 SQLite 数据库中的更改将被

推送到你的移动应用,在后端发生的潜在更改将同步到 Android 设备上的应用。我们来尝试以下操作:

1. 让应用在 Android Emulator 上运行。

2. 像以前一样登录。

3. 添加项目。

Page 56: Azure 哂卹人厦 啨南€¦ · 1 垸 1 章 | Azure 哂卹人厦啨南 1 哂卹人厦 啨南 哔今对天件厫坞关嗸务坋需噾噳以哜任何时候奵墯吏,堤 奃种夑势只

51 第 6 章 | Azure 演练

4. 断开与互联网的连接。在 Android Emulator 中,可在“扩展控件”中通过将“网络信号强度”设置

为“无”来实现此目的。

5. 添加另一个项目并对其进行检查以完成该项目。该应用将继续在本地 SQLite 数据库上工作。

可以通过连接到我们以前使用 SQL Server Management Studio 之类的工具创建的 Azure SQL 数据

库,来确认项目并未写入后端数据库。当你在 Azure 门户中导航到 Azure SQL 数据库时可以找到该

数据库的 connectionstring。

6. 再次将 Android 设备连接到互联网。在 Android Emulator 中,转到扩展控件,然后将“信号强

度”设置为“非常好”。

7. 在移动应用中,单击“刷新”按钮。现在,本地更改将同步到 Azure 移动应用。

检查 Azure SQL 数据库,以查看现在同步到后端的更改。

其他功能和移动到生产环境

使用移动应用设置应用并包括身份验证和脱机同步等高级功能很容易实现。

由于移动应用是一项 Azure 应用服务,它拥有与其他应用服务完全相同的功能。这意味着移动应用也可

以自动缩放,你可以使用相同的监视和警报,可以使用流式日志执行其他诊断,甚至可以包含应用程序

调试。

在将应用移至生产时,可以使用应用服务证书提供额外的安全性。你还可以设置 CD,与 Node.js 应用

程序的设置方法相同。你可以使用部署槽来进行部署,且无停机时间。

过去很难进行所有这些设置,但现在这个问题已经得到解决。让 Azure 替你做繁重的工作,这样你就能

专注地构建重要内容!

Page 57: Azure 哂卹人厦 啨南€¦ · 1 垸 1 章 | Azure 哂卹人厦啨南 1 哂卹人厦 啨南 哔今对天件厫坞关嗸务坋需噾噳以哜任何时候奵墯吏,堤 奃种夑势只

52 第 7 章 | 使用 Azure Marketplace

7

使用

Azure 生态系统不仅能帮助你更快速、有效地创建动态应用程序,借助

Azure Marketplace,你还能找到有助于你完成开发工作的各种解决方案。

然后,它可以帮助你将产品连接到全球各地的用户。

Azure Marketplace 如何帮助开发人员?

Azure Marketplace 可为你提供随时可运行的各种产品的安装程序,这些产品涵盖 Windows Server、

Octopus Deploy、Oracle 数据库、WordPress 实例、Minecraft 服务器等等。你只需单击一个解决方

案,对其进行配置、部署,然后便可以开始使用。应用商店充满了来自 Microsoft 和 Microsoft 合作伙

伴的产品和解决方案。其中还有许多开源解决方案。

应用商店的优势在于易用性。解决方案部署后随时可以运行,并且具有所有必需的要素。有时,这是一

个虚拟机,它安装了软件、配置了虚拟网络、安装了集成许可证或你自带的许可证。有时,这是你获得

的服务,如订阅企业版必应地图 API。可以使用应用商店轻松地测试新软件,也可通过它来使用企业级

解决方案。无论你的需求是什么,都可以在应用商店中找到解决方案。

Azure 解决方案

通过 Azure 解决方案,你可以向已成功使用 Azure 的公司学习。这些解决方案演示了用于常见 Azure 用

例(如数字营销、Azure 上的 SharePoint、业务线应用程序和移动应用程序)的产品文档、案例研究和

体系结构最佳实践。

对于开发人员来说,Azure 解决方案中最有价值的内容是解决方案体系结构。Azure 解决方案为你提供

了常见问题的参考体系结构,并说明了在特定情况下应使用特定产品的原因。

Page 58: Azure 哂卹人厦 啨南€¦ · 1 垸 1 章 | Azure 哂卹人厦啨南 1 哂卹人厦 啨南 哔今对天件厫坞关嗸务坋需噾噳以哜任何时候奵墯吏,堤 奃种夑势只

53 第 7 章 | 使用 Azure Marketplace

摘要及后续操作

在本指南中,我们介绍了 Azure 可为你的应用程序提供的强大功能。使用 Azure,你可以通过应用程序

做很多令人难以置信的事情 — 面部和语音识别、在云中管理物联网上的设备、按需进行缩放以及对所

用资源付费。

你已经看到,无论你使用哪种编程语言或为什么平台编写应用程序,Azure 都可以通过几乎适用于每种

方案的服务来帮助你。

我们希望你继续使用这本电子书,以更好地了解广泛的 Azure 服务,并确定哪些服务最适合你的方案。

必须亲自编写复杂“管道”的时代已经结束;现在,你可以利用大量预先构建的解决方案。把自己解放

出来,去做重要的事情,让 Azure 来处理已经解决的问题。

使用 Azure 免费帐户继续学习 注册 Azure 免费帐户并获取:

200 美元信用额度,可在任何 Azure 产品上使用,为期 30 天

在 12 个月内免费访问我们最受欢迎的产品,包括计算、存储、网络和数据库产品

超过 25 款永远免费的产品

Page 59: Azure 哂卹人厦 啨南€¦ · 1 垸 1 章 | Azure 哂卹人厦啨南 1 哂卹人厦 啨南 哔今对天件厫坞关嗸务坋需噾噳以哜任何时候奵墯吏,堤 奃种夑势只

关于作者Michael 和 Barry 对 Azure 充满热情,建议你在 Twitter 上与他们联系,询问有关这本书的问题。

Michael Crump 在 Microsoft 的 Azure 平台工作,是编码员、博主和有关各种云开

发主题的国际发言人。他热衷于以直接方式帮助开发人员了解云的优势。

你可以通过 Twitter @mbcrump 或关注他的博客 https://www.michaelcrump.net 与

他联系。

Barry Luijbregts 是一位独立的软件架构师和对云充满热情的开发人员。他也是一位

Pluralsight 作家。在过去的 10 年里,他曾效力于多家公司,并且他热衷于与社区

分享他的知识。他拥有关于 Microsoft 堆栈的广博而深厚的知识,对网站技术和云

特别感兴趣。Barry 是一个名为 .NET Zuid (South) 用户组的合伙人,该用户组重点

关注技术和软技能,他目前主要向人们讲述云的优势。他和他美丽的妻子及宝贝女

儿住在荷兰,他喜欢与他们的两只西伯利亚哈士奇一起玩耍。

你可以通过 Twitter @AzureBarry 和网站 https://www.azurebarry.com/ 来与 Barry

联系。