中国区 Azure 应用程序开发说明
1.文档简介
微软公司为其在境外由微软运营的 Azure 服务(以下简称为 “境外 Azure”),创建和部署云应用程序,提供了相应工具。
在中国,由世纪互联运营的 Microsoft Azure (以下简称为 “中国区 Azure”)是独立的服务平台,由世纪互联公司提供并运营,其数据中心位于中国大陆(不包括香港特别行政区、澳门特别行政区和中国台湾地区)。因此,创建和部署应用程序时,开发人员需先了解中国区 Azure 和境外 Azure 的主要区别,然后再设置编程环境,编写应用程序,部署在中国托管的服务。
本文档概述了这两种服务的区别,并为中国 Azure 门户提供补充信息。同时,官方信息也会通过多个途径发布,例如 Azure 海报以及博客。本文目标读者为在中国部署、托管数据中心的合作伙伴及开发人员。
有关中国区 Azure 服务功能的更新,请访问中国 Azure 门户。有关当前 Azure 内容信息,请参阅本文档附录。
2.开发人员指南
目前微软公司提供的大部分英文技术文档中,应用程序都针对境外 Azure 开发,而非中国区 Azure,因此开发人员必须了解两者主要区别:
首先,两者存在功能差异,境外 Azure 的某些功能在中国不可用。
其次,中国区 Azure 与境外 Azure 的服务功能存在操作差异,因此使用为境外 Azure 编写的英文文档时,开发人员应该根据需要,自定义示例代码和步骤。
3.中国数据中心
目前,中国区 Azure 有两个数据中心,在位置字段中显示为“中国北部”和“中国东部”。
4.在 Azure 上创建应用程序的区别
在中国区 Azure 上开发应用程序与在境外 Azure 上开发的主要区别在于,中国区 Azure 端点地址有不同的 URI。 例如,Azure 和 SQL 数据库 URI 通常以 windows.net 结尾。 URI 端点不同时,开发人员必须能够识别,然后配置所需的工具和应用程序,并使用适合的 URI。
5.设置开发计算机
Visual Studio 2015 支持在中国区 Azure 上开发,使用 Visual Studio 2015 update 3。
使用 Visual Studio 2015,连接中国区 Azure
步骤如下:
1.请使用以下注册表文件:
Azure.reg
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Microsoft\VSCommon\ConnectedUser]
"AadInstance"="https://login.chinacloudapi.cn/"
"adaluri"="https://management.core.chinacloudapi.cn"
"AzureRMEndpoint"="https://management.chinacloudapi.cn"
"AzureRMAudienceEndpoint"="https://management.core.chinacloudapi.cn"
"EnableAzureRMIdentity"="true"
"GraphUrl"="graph.chinacloudapi.cn"
若要将 Reg 值返回境外 Azure,请使用此处的注册表文件:
TargetProduction.reg
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Microsoft\VSCommon\ConnectedUser]
"Uri"=-
"AadInstance"=-
"adaluri"=-
"AzureRMEndpoint"=-
"AzureRMAudienceEndpoint"=-
"EnableAzureRMIdentity"=-
"GraphUrl"=-
"AadApplicationTenant"=-
[HKEY_CURRENT_USER\SOFTWARE\Microsoft\VisualStudio\14.0\MicrosoftAzureServices]
"Resource Management Audience Endpoint"=-
"Service Management Endpoint"=-
2.双击 Azure.reg 文件,同意弹出信息,允许注册表值更改;
3.注册表值更改后,Visual Studio 的登录信息连接到中国区 Azure 服务。
使用 Visual Studio 2017,连接中国区 Azure
Visual Studio 2017 刚刚发布,我们引入了新的方式来连接到中国区 Azure 服务。
步骤如下:
新建一个 JSON 文件 AadProvider.Configuration.json,文件内容如下:
{
"AuthenticationQueryParameters": null,
"AsmEndPoint": "https://management.core.chinacloudapi.cn",
"Authority": "https://login.chinacloudapi.cn/",
"AzureResourceManagementEndpoint": "https://management.chinacloudapi.cn/",
"AzureResourceManagementAudienceEndpoints": [ "https://management.core.chinacloudapi.cn/" ],
"ClientIdentifier": "872cd9fa-d31f-45e0-9eab-6e460a02d1f1",
"EnvironmentName": "Mooncake",
"GraphEndpoint": "https://graph.chinacloudapi.cn",
"MsaHomeTenantId": "f577cd82-810c-43f9-a1f6-0cc532871050",
"NativeClientRedirect": "urn:ietf:wg:oauth:2.0:oob",
"PortalEndpoint": "http://manage.windowsazure.cn",
"ResourceEndpoint": "https://management.core.chinacloudapi.cn/",
"ValidateAuthority": true,
"VisualStudioOnlineEndpoint": "https://app.vssps.visualstudio.com/",
"VisualStudioOnlineAudience": "499b84ac-1321-427f-aa17-267ca6975798"
}
连接到中国区 Azure 服务
1.确保已登出并关闭 Visual Studio。
2.删除 %temp%\servicehub 文件夹(详细路径为 C:\Users\%USERPROFILE%\AppData\Local\Temp\servicehub)。
3.把前面新建的 JSON 文件 (AadProvider.Configuration.json) 拷贝到 %localappdata%\.IdentityService\AadConfigurations(详细路径为 C:\Users\%USERPROFILE%\AppData\Local\.IdentityService\AadConfigurations, AadConfigurations 文件夹可能不存在,需要手动创建)。
4.重启 VS 并添加中国 Azure 账户即可。
切换回 Global Azure
1.确保已登出并关闭 Visual Studio。
2.删除文件夹。%localappdata%\.IdentityService\AadConfigurations
3.重启 VS 即可连接 Global Azure。
6Java 用户使用中国区 Azure
Java 用户使用 Eclipse 或 IntelliJ,连接中国区 Azure
目前需要开发者使用 Azure CLI 生成认证文件,在 Eclipse 或 IntelliJ 中选择基于文件的方式登陆,并上传此认证文件,即可完成连接 ( 参考 Azure SDK 相关页 )。
步骤如下:
1.请首先安装 Azure CLI,版本要求 2.0 及以上。
2.使用 Azure CLI 生成认证文件并保存至本地。
a. 使用 az cloud set --name AzureChinaCloud 连接中国区 Azure。
b. 使用 az login -u <account email> -p <account password> 替换其中的账号和密码,登陆 Azure。
c. 如果在中国区 Azure 有多个订阅账户 Subscription,使用 az account set --subscription <subscirption name> 选择用来生成认证信息的订阅账户。
d. 使用以下命令,生成认证文件 my.azureauth 并保存于本地。 curl -L https://raw.githubusercontent.com/Azure/azure-sdk-for-java/master/tools/authgen.py | python > my.azureauth
3.在 Eclipse 或 IntelliJ 中,选择基于文件的方式登陆,并上传步骤 2 中生成的认证文件。
a. 请确认已在 Eclipse 或 IntelliJ 中安装或更新至最新版本的 Azure Toolkit 插件。
b. 在 Azure Sign In 窗口选择 Automated 作为登陆方式,并上传步骤 2 中生成的认证文件 my.azureauth。
c. 点击登陆,即可连接中国区 Azure。如遇问题,可在 Azure Toolkit 相关页提出并标记 Mooncake 标签。
7.实用场景示例
云浏览器
1.按照说明输入认证信息;
2.输入登录信息;
3.从 Cloud Explorer 查看中国区 Azure 订阅中的资源。
发布 Web 应用程序
1.单机右键菜单,选择 “发布” 对话框;
2.选择 Microsoft Azure App Service;
3.从帐户选择器中选择 Azure 帐户;
4.编辑模板参数,继续部署。
其他功能的步骤与此类似。
8.中国区 Azure 资源端点URI (供应用程序代码使用)
中国区 Azure 的 URI 与境外 Azure 的 URI 存在差异。 用户需确保,在应用程序代码和配置文件使用适当字符串的前提下,再与中国区 Azure 端点连接。 请注意,如果 Visual Studio 连接到中国区 Azure 订阅,Visual Studio 生成的连接字符串会自动使用中国区 Azure URI,连接每个资源。
端点映射
下表指导用户将境外 Azure 资源端点映射到中国特定端点。
服务类型 | 在境外由微软运营的 Microsoft Azure URI | 由世纪互联运营的 Microsoft Azure URI |
---|---|---|
Azure - 常规 | *.windows.net | *.chinacloudapi.cn |
Azure - 计算 | *.cloudapp.net | *.chinacloudapp.cn |
Azure - Service Fabric Cluster | *.cloudapp.azure.com | *.cloudapp.chinacloudapi.cn |
Azure - 存储 |
*.blob.core.windows.net *.queue.core.windows.net *.table.core.windows.net *.file.core.windows.net |
*.blob.core.chinacloudapi.cn *.queue.core.chinacloudapi.cn *.table.core.chinacloudapi.cn *.file.core.chinacloudapi.cn |
Azure - 服务管理 | https://management.core.windows.net | https://management.core.chinacloudapi.cn |
Azure - 资源管理器 (ARM) | https://management.azure.com | https://management.chinacloudapi.cn |
SQL 数据库 | *.database.windows.net | *.database.chinacloudapi.cn |
Azure - 管理门户 |
http://manage.windowsazure.com https://portal.azure.com |
https://manage.windowsazure.cn https://portal.azure.cn |
SQL Azure 数据库管理 API | https://management.database.windows.net | https://management.database.chinacloudapi.cn |
服务总线 | *.servicebus.windows.net | *.servicebus.chinacloudapi.cn |
ACS | *.accesscontrol.windows.net | *.accesscontrol.chinacloudapi.cn |
HDInsight | *.azurehdinsight.net | *.azurehdinsight.cn |
MySQL Paas | - | *.mysqldb.chinacloudapi.cn |
Azure PowerShell Login (Classic, 旧的 Azure 服务管理) | Add-AzureAccount | Add-AzureAccount -Environment AzureChinaCloud |
Azure PowerShell Login (Azure 资源管理) | Add-AzureRmAccount | Add-AzureRmAccount -EnvironmentName AzureChinaCloud |
AAD | *.onmicrosoft.com | *.partner.onmschina.cn |
AAD PowerShell Login | Connect-msolservice | Connect-msolservice -AzureEnvironment AzureChinaCloud |
AAD Login | https://login.windows.net | https://login.chinacloudapi.cn |
AAD Graph API | https://graph.windows.net | https://graph.chinacloudapi.cn |
Azure 认知服务 | https://api.projectoxford.ai/face/v1.0 | https://api.cognitive.azure.cn/face/v1.0 |
SQL 数据库导入/导出服务映射端点 |
1. 中国东部:https://sh1prod-dacsvc.chinacloudapp.cn/dacwebservice.svc 2. 中国北部:https://bj1prod-dacsvc.chinacloudapp.cn/dacwebservice.svc |
|
Power BI Embedded | https://api.powerbi.com | https://api.powerbi.cn |
Power BI Embedded | https://embedded.powerbi.com | https://embedded.powerbi.cn |
O365 | https://login.microsoftonline.com | https://login.partner.microsoftonline.cn |
Device Login | https://aka.ms/devicelogin | https://aka.ms/deviceloginchina 或者 https://login.chinacloudapi.cn/common/oauth2/deviceauth |
Documentdb | documents.azure.com | documents.azure.cn |
Traffic Manager | *.trafficmanager.net | *.trafficmanager.cn |
Media Services resource | https://rest.media.azure.net | https://rest.media.chinacloudapi.cn |
Media Services Rest API | https://accountname.restv2.<location>.media.azure.net/api/ | https://accountname.restv2.<location>.media.chinacloudapi.cn/api/ |
存储端点
开发人员必须使用自定义存储端点。 默认设置指向 *.core.windows.net,其中 * 随着用户应用程序和存储位置的不同而不同。
例如,在 Cloud Services 应用程序的服务配置文件(.cscfg)中,设置自定义数据连接字符串,指向中国区 Azure 的 blob,队列和表存储 URI。 以下代码为自定义端点的示例,其中 <AccountKey> 变量必须由特定的存储帐户键替换。 字符串 mystorageaccount 是在订阅下创建的存储帐户示例。
<Setting name="DataConnectionString"
value="BlobEndpoint=https://mystorageaccount.blob.core.chinacloudapi.cn/;QueueEndpoint=https://mystorageaccount.queue.core.chinacloudapi.cn/;TableEndpoint=https://mystorageaccount.table.core.chinacloudapi.cn/;AccountName=mystorageaccount;AccountKey=<AccountKey> " />
在 Visual Studio 中创建自定义端点
用户可通过 Azure 云服务应用程序,为连接字符串创建自定义端点:
-
打开含一个或多个角色的 Azure 解决方案;
-
右键单击 Solution Explorer 中的任意角色,弹出该角色的配置;
-
单击 Settings;
-
单击 Add Setting;
-
为设置键入名称;
-
选择连接字符串的类型;
-
单击…弹出 Storage Account Connection String 对话框;
-
选择 Enter storage account credentials;
-
输入正确的存储帐户名和密钥;
-
选择 Use custom endpoints,然后为 blob、表和队列端点输入正确的 https 字符串;
-
单击 OK。
Visual Studio 在服务配置文件中创建自定义存储端点,开发人员可以从角色代码中使用此存储端点。
以下代码通过使用为中国区 Azure 特定的自定义 URL,以编程方式连接到存储帐户。
CloudStorageAccount Account = new CloudStorageAccount(
new StorageCredentialsAccountAndKey(ACCOUNTNAME, ACCOUNTKEY),
new Uri("http://ACCOUNTNAME.blob.core.chinacloudapi.cn/"),
new Uri("http://ACCOUNTNAME.queue.core.chinacloudapi.cn/"),
new Uri("http://ACCOUNTNAME.table.core.chinacloudapi.cn/")
);
CloudBlobClient BlobClient = Account.CreateCloudBlobClient();
9.Azure 云服务应用程序中的端口绑定
端口绑定同样使用以 .cloudapp.net 结尾的 DNS 名称。用户必须更改这些名称,指向 .chinacloudapp.cn。以下显示了包括端口说明的部分服务定义文件:
<Sites>
<Site name="MySite" physcalDirectory="..\WebSite1">
<Bindings>
<Binding name="My" endpointName="HttpIn" hostHeader="WebSite1.mysite.Chinacloudapp.cn" />
</Bindings>
</Site>
<Site name="Web">
<Bindings>
<Binding name="HttpIn" endpointName="HttpIn" />
</Bindings>
</Site>
</Sites>
10.连接 SQL 数据库服务器
SQL 数据库服务器名称将由 *.database.windows.net 更改为 *.database.chinacloudapi.cn。 所有客户端应用程序或工具都必须使用新名称命名其连接字符串,连接到数据库。 对于未在中国区 Azure 运行的应用程序,可参照 SQL 数据库服务器的值,该值可以是服务定义文件中的 DataConnectionString 值,或 .NET 其它配置文件中的值。 例如:
<configuration>
<connectionStrings>
<add name="SQLAzure" connectionString="Server=tcp:yourserver.database.chinacloudapi.cn,1433;
Database=Test;User ID=login@server;Password=yourPassword;
Trusted_Connection=False;Encrypt=True;"/>
</connectionStrings>
</configuration>
11.Active Directory 和服务总线
Active Directory
Azure Active Directory(AAD)可以为本地部署和云应用程序提供身份和访问功能。开发人员利用 AAD 功能,可为企业应用程序和软件即服务(SaaS)供应商实现单点登录和单点注销;可通过使用图形 API 查询和管理云目录对象;还可以与本地 Active Directory 整合,将目录数据同步到云端。
中国区 Azure 包含 Azure AD。然而从设计角度讲,仍存在一些影响开发人员体验的差异,以下会展开介绍。
中国区 Azure 是个自定义产品,虽然与境外 Azure 有许多共同特性,但自定义仍会导致以下差异,对开发人员使用 AAD 造成影响:
-
中国区 Azure 不包含访问控制(Access Control)命名空间。要集成应用程序以及与 Azure 身份验证服务同步的目录,需要使用 Azure 中的 Active Directory。在 Azure 经典管理门户中,单击" Active Directory”。
-
ACS 管理门户仅适用于服务总线命名空间。
-
除了这些自定义带来的差异,中国区 Azure 中的 Azure AD 设计与境外 Azure 全部一致。
Note
中国区 Azure 在预览期间,其创建的访问控制命名空间既不能操作,也不能访问。 但是,类似的功能可在 Azure 管理门户的 Active Directory 中使用。
服务总线配置
如果使用共享访问签名(SAS)连接服务总线,只需在项目配置文件中更改端点即可。
如果使用访问控制服务(ACS)连接服务总线,可以采取以下任一选项,将使用服务总线的应用程序重定向到特定端点:
-
选项 1:使用环境变量重定向单个或全部应用程序。
-
选项 2:使用 ServiceBus.config 文件重定向单个应用程序。
-
选项 3:使用 ServiceBus.config 文件重定向全部应用程序。
如果 EXE 文件或工作人员角色处于运行状态,任一选项均可用。 如果使用 Web 角色,仅选项 3 可用。
无论选择哪种选项,端点名称都将按照下表进行更改。
服务总线端点 | 等效的中国 Azure 服务总线端点 |
servicebus.windows.net | servicebus.chinacloudapi.cn |
accesscontrol.windows.net | accesscontrol.chinacloudapi.cn |
选项1:使用环境变量进行重新定向
1.考虑变量设置的级别。 对于整个计算机、单个用户或运行单个应用程序的环境,其环境变量设置的含义都不相同。
2.以适当的级别设置以下环境变量:
RELAYHOST=servicebus.chinacloudapi.cn
STSHOST=accesscontrol.chinacloudapi.cn
RELAYENV=Custom
Warning
通过 csdef 文件中的 <environment> 标记为 Web 角色添加环境变量时,此选项不可用。 Web 角色在 w3wp.exe 的上下文中运行。 环境变量不会传播到 w3wp.exe 环境。 请参阅 Web 角色的选项 3。
选项 2:使用 ServiceBus.config 文件重定向单个应用程序:
1.创建如下的 ServiceBus.config 文件,其中包含适当的主机信息。
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<Microsoft.ServiceBus>
<relayHostName>servicebus.chinacloudapi.cn</relayHostName>
<stsHostName>accesscontrol.chinacloudapi.cn</stsHostName>
</Microsoft.ServiceBus>
</configuration>
2.将 ServiceBus.config 文件与服务总线 / ACS应用程序的 .exe 文件放置在同一目录中。
此选项不适用于 Azure 云服务 Web 角色,因为它们在 w3wp.exe 的上下文中运行。 因此,系统在 %Windir%\ System32 \ inetsrv \ 中查找 servicebus.config 文件时,该文件不存在。
选项 3:使用 ServiceBus.config 文件重定向全部应用程序:
1.在 .NET Framework 配置目录中查找现有的 ServiceBus.config 文件。 .NET Framework 配置目录取决于 32 位或 64 位的操作系统版本,以及已安装的框架版本,以下为常用位置。
Microsoft .NET Framework 版本 | 操作系统版本 | 目录 |
2.0 至 3.5 | 32 位 | %Windir%\Microsoft.NET\Framework\v2.0.50727\CONFIG |
2.0 至 3.5 | 64 位 | %Windir%\Microsoft.NET\Framework64\v2.0.50727\CONFIG |
4.0 | 32 位 | %Windir%\Microsoft.NET\Framework\v4.0.30319\Config |
4.0 | 64 位 | %Windir%\Microsoft.NET\Framework64\v4.0.30319\Config |
2.如果目录中存在现有的 ServiceBus.config 文件,必须编辑该文件,添加选项 2(使用 ServiceBus.config 重定向单个应用程序)列出的 XML 配置。 如果该配置添加后,与 ServiceBus.config 文件中的现有信息产生冲突,则不能使用此选项。 必须使用选项 1 或选项 2。
开发人员只有了解角色使用的框架,才能指向特定的框架目录。 但是,以下脚本概括了使用 Web 角色的复制过程。 如果 servicebus.config 文件存在,该脚本会将此文件复制到每个 .NET 目录中。
@echo off
pushd .
cd %windir%\Microsoft.Net\Framework64\
REM set copylocal=true on servicebus.config so its present in bin dir
for /f %%i in ('dir /s /b config') do copy /y %~dp0servicebus.config %%~fi
popd
12.使用服务管理 API
通过服务管理 API,开发人员可以对 Azure 中运行的托管服务进行部署管理。 事实上,境外 Azure 和中国区 Azure 的管理门户都使用服务管理 API。
境外 Azure 编写代码使用的路径为:https://management.core.windows.net。中国区 Azure 编写代码使用的路径为:https://management.core.chinacloudapi.cn。
13.重定将自定义域名定位到中国区 Azure 的托管服务中
如果用户使用的自定义域名被转发到境外 Azure 中运行的托管服务,并将该托管服务移至中国区 Azure,必须更新转发域,指向新的中国特定终端点。
例如,如果要将 www.contoso.com 重定向到运行在 contoso.cloudapp.net 的 web 角色中,那么现在就必须将其重定向到 contoso.chinacloudapp.cn 中。
14.使用 Azure 诊断
Azure 诊断通过使用开发计算机上的本地存储或中国区 Azure 存储帐户,存储诊断信息。
在* .cscfg 文件中添加以下配置信息:
<ConfigurationSettings>
<Setting name="Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString" value="<YourStorageString>" />
</ConfigurationSettings>
<YourStorageString> 的值是个自定义端点,将URI并入中国区 Azure。
为 HTTPS 端点重新发布证书
15.使用自定义域名时无需更改证书。
如果任一现有应用程序使用 HTTPS 端点,并将证书绑定到 https://*.cloudapp.net(其中 * 是服务的名称),则必须为*.chinacloudapp.cn 重新发布证书。 在中国部署服务时,必须使用这些新证书。
16.使用 Azure PowerShell
在 PowerShell 控制台键入以下命令,登录 Azure China Cloud:
ASM 模式:
Add-AzureAccount -Environment AzureChinaCloud
ARM 模式
Login-AzureRmAccount -EnvironmentName AzureChinaCloud
17.使用 Azure CLI
Azure CLI 1.0
在命令提示符下键入以下命令,登录 Azure China Cloud:
azure
login
-e
AzureChinaCloud
Azure CLI 2.0
在命令提示符下键入以下命令,登录 Azure China Cloud:
az
cloud
set
--name
AzureChinaCloud
az
login
18.为 Node.js 使用 Azure SDK
如果要在中国区 Azure 中使用 SDK,需从管理门户或 CLI 中提供连接字符串。
存储、服务总线和通知总线
存储、服务总线和通知中心都接受各自的连接字符串,可通过管理门户或使用 CLI 获取该值。
var tableService = azure.createTableService(storageConn);
var blobService= azure.createBlobService(storageConn);
var queueService = azure.createQueueService(storageConn);
var serviceBusService = azure.createServiceBusService(sbConn);
var notificationHubService = azure.createNotificationHubService(nhConn);
SQL
要管理 SQL 数据库服务器,可以使用此配置:
var sqlManagementService = azure.createSqlManagementService(subscriptionId, authentication, hostOptions);
19.附录:Azure 的内容库
以下列出了 Azure 当前可用的所有内容资产,并指明该资产是否专门针对中国区 Azure。
资产 | 内容是否专为中国创建 | 说明 |
azure.microsoft.com | 否 | 在境外由微软运营的 Microsoft Azure 官网。 |
azure.cn | 是 | 由世纪互联运营的 Microsoft Azure 官网 |
境外客户案例 | 否 | http://azure.microsoft.com/zh-cn/case-studies/ |
中国客户案例 | 是 | https://www.azure.cn/partnerancasestudy/case-studies/ |
P&P 丛书 | 否 |
|
MVP 的著作 | 否 | |
MSDN 库 | 是/否 | https://msdn.microsoft.com/library/azure/ |
Azure 团队的博客 | 是/否 | http://blogs.msdn.com/b/azchina/ |
MSDN Azure 门户 | 否 | http://msdn.microsoft.com/zh-cn/ff380142 |
MSDN 杂志 | 否 | |
虚拟实验室 | 否 | |
视频 | 否 | 第 9 频道的视频讨论境外服务,与优酷上的中国视频 (http://www.youku.com/playlist_show/id_19321941.html)相同 |
Azure 培训包 | 否 | Github 中的本地化培训包用于境外服务 |
MSDN 代码库 | 否 | http://code.msdn.microsoft.com/windowsazure/ |
Github | 否 | 仅在此处托管 azure.cn 的英文内容,不提供本地化内容 |