1.文档简介html
微软公司为其在境外由微软运营的 Azure 服务(如下简称为 “境外 Azure”),建立和部署云应用程序,提供了相应工具。java
在中国,由世纪互联运营的 Microsoft Azure (如下简称为 “中国区 Azure”)是独立的服务平台,由世纪互联公司提供并运营,其数据中心位于中国大陆(不包括香港特别行政区、澳门特别行政区和中国台湾地区)。所以,建立和部署应用程序时,开发人员需先了解中国区 Azure 和境外 Azure 的主要区别,而后再设置编程环境,编写应用程序,部署在中国托管的服务。python
本文档概述了这两种服务的区别,并为中国 Azure 门户提供补充信息。同时,官方信息也会经过多个途径发布,例如 Azure 海报以及博客。本文目标读者为在中国部署、托管数据中心的合做伙伴及开发人员。mysql
有关中国区 Azure 服务功能的更新,请访问中国 Azure 门户。有关当前 Azure 内容信息,请参阅本文档附录。git
2.开发人员指南github
目前微软公司提供的大部分英文技术文档中,应用程序都针对境外 Azure 开发,而非中国区 Azure,所以开发人员必须了解二者主要区别:web
首先,二者存在功能差别,境外 Azure 的某些功能在中国不可用。sql
其次,中国区 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。
步骤以下:
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 服务。
步骤以下:
新建一个 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
目前须要开发者使用 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 订阅中的资源。
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> " />
用户可经过 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 和服务总线
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.考虑变量设置的级别。 对于整个计算机、单个用户或运行单个应用程序的环境,其环境变量设置的含义都不相同。
2.以适当的级别设置如下环境变量:
RELAYHOST=servicebus.chinacloudapi.cn
STSHOST=accesscontrol.chinacloudapi.cn
RELAYENV=Custom
Warning
经过 csdef 文件中的 <environment> 标记为 Web 角色添加环境变量时,此选项不可用。 Web 角色在 w3wp.exe 的上下文中运行。 环境变量不会传播到 w3wp.exe 环境。 请参阅 Web 角色的选项 3。
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 文件时,该文件不存在。
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 China Cloud:
azure
login
-e
AzureChinaCloud
在命令提示符下键入如下命令,登陆 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 数据库服务器,可使用此配置:
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 的英文内容,不提供本地化内容 |