导出 (0) 打印
全部展开

为 Azure 设置云服务

更新时间: 2014年10月

若要设置云服务,则必须创建服务模型。服务模型提供了云服务的定义设置和这些设置的配置值。当云服务在 Azure 中运行时,你无法更改其定义。尽管你可以更改正在运行的云服务的服务模型的配置,但是,若要更改服务模型的定义设置,则必须使用 VIP 交换对云服务进行升级。

note备注
可以使用 Visual Studio 创建和配置服务模型文件。有关更多信息,请参见使用 Visual Studio 配置 Azure 应用程序

可使用以下信息开始创建、配置和更改云服务的服务模型:

服务模型包含一个 ServiceDefinition.csdef 文件和一个 ServiceConfiguration.cscfg 文件。在准备云服务的应用程序以进行部署时,会将定义文件与角色二进制文件一起打包。ServiceConfiguration.cscfg 文件与应用程序包一起部署,Azure 将使用该文件确定应用程序的运行方式。

ServiceDefinition.csdef 文件将指定 Azure 用于配置云服务的设置。Windows Azure 服务定义架构(.csdef 文件) 提供了服务定义文件的允许格式。下面的示例演示可为 Web 角色和辅助角色定义的设置:


<?xml version="1.0" encoding="utf-8"?>
<ServiceDefinition name="MyServiceName" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition">
<WebRole name="WebRole1" vmsize="Medium"> 
   <Sites>
      <Site name="Web">
         <Bindings>
            <Binding name="HttpIn" endpointName="HttpIn" />
         </Bindings>
      </Site>
   </Sites>
   <Endpoints>
      <InputEndpoint name="HttpIn" protocol="http" port="80" />
      <InternalEndpoint name="InternalHttpIn" protocol="http" />
   </Endpoints>
   <Certificates> 
      <Certificate name="Certificate1" storeLocation="LocalMachine" storeName="My" />
   </Certificates>
   <Imports>
      <Import moduleName="Connect" />
      <Import moduleName="Diagnostics" />
      <Import moduleName="RemoteAccess" />
      <Import moduleName="RemoteForwarder" />
   </Imports>
   <LocalResources>
      <LocalStorage name="localStoreOne" sizeInMB="10" />
      <LocalStorage name="localStoreTwo" sizeInMB="10" cleanOnRoleRecycle="false" />
   </LocalResources>
   <Startup>
      <Task commandLine="Startup.cmd" executionContext="limited" taskType="simple" />
   </Startup>
</WebRole>

<WorkerRole name="WorkerRole1">
   <ConfigurationSettings>
      <Setting name="DiagnosticsConnectionString" />
   </ConfigurationSettings>
   <Imports>
      <Import moduleName="RemoteAccess" />
      <Import moduleName="RemoteForwarder" />
   </Imports>
   <Endpoints>
      <InputEndpoint name="Endpoint1" protocol="tcp" port="10000" />
      <InternalEndpoint name="Endpoint2" protocol="tcp" />
   </Endpoints>
</WorkerRole>
</ServiceDefinition>

你可以参阅服务定义架构以了解元素的格式,并且可以使用以下信息更好地了解如何使用这些元素:

  • Sites - 包含 IIS7 中承载的网站或 Web 应用程序的定义。

  • InputEndpoints - 包含用于联系云服务的终结点的定义。

  • InternalEndpoints - 包含角色实例用来相互通信的终结点的定义。

  • ConfigurationSettings - 包含特定角色的功能的设置定义。

  • Certificates - 包含角色所需的证书的定义。上一个代码示例演示用于配置 Azure Connect 的证书。

  • LocalResources - 包含本地存储资源的定义。本地存储资源是运行角色实例的虚拟机的文件系统中的保留目录。

  • Imports - 包含已导入模块的定义。上一个代码示例演示远程桌面连接和 Azure Connect 的模块。

  • Startup - 包含在角色启动时运行的任务。任务是在 .cmd 文件或可执行文件中定义的。

云服务的设置配置由 ServiceConfiguration.cscfg 文件中的值确定。可在此文件中指定要为每个角色部署的实例数。在服务定义文件中定义的配置设置的值会添加到服务配置文件中。与云服务关联的所有管理证书的指��也会添加到该文件中。Windows Azure 服务配置架构(.cscfg 文件)提供了服务配置文件的允许格式。

服务配置文件不与应用程序一起打包,而是作为独立文件上载到 Azure 并用于配置云服务。无需重新部署云服务即可上载新的服务配置文件。在云服务运行期间可以更改云服务的配置值。下面的示例演示可为 Web 角色和辅助角色定义的配置设置:


<?xml version="1.0"?>
<ServiceConfiguration serviceName="MyServiceName" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration">
<Role name="WebRole1">
   <Instances count="2" />
   <ConfigurationSettings>
      <Setting name="SettingName" value="SettingValue" />
   </ConfigurationSettings>
    
   <Certificates>
      <Certificate name="CertificateName" thumbprint="CertThumbprint" thumbprintAlgorithm="sha1" />
      <Certificate name="Microsoft.WindowsAzure.Plugins.RemoteAccess.PasswordEncryption" 
         thumbprint="CertThumbprint" thumbprintAlgorithm="sha1" />
    </Certificates>  
</Role>
</ServiceConfiguration>

你可以参阅服务配置架构以了解元素的格式,并且可以使用以下信息更好地了解如何使用这些元素:

  • Instances - 配置正在运行的角色实例数。为避免云服务在升级过程中可能不可用,建议你部署面向 Web 的角色的多个实例。这样做符合 Azure 计算服务级别协议 (SLA) 中的指导原则,这样可在为服务部署了两个或更多角色实例的情况下,为面向 Internet 的角色保证 99.95% 的外部连接。有关 Azure 服务级别协议的更多信息,请参见服务级别协议



  • ConfigurationSettings - 为正在运行的角色实例配置设置。Setting 元素的名称必须与服务定义文件中的设置定义匹配。

  • Certificates - 配置服务使用的证书。上一个代码示例演示如何为 RemoteAccess 模块定义证书。thumbprint 属性的值必须设置为要使用的证书指纹。

    可以使用文本编辑器将证书的指纹添加到配置文件,也可以在 Visual Studio 中,在角色的“属性”页的“证书”选项卡上添加值。

Azure 中的多 Web 应用程序服务模型只允许存在一个 Web 角色入口点。这表示所有通信都通过一个 IP 地址进行。可以通过配置主机头以将请求定向到正确的位置,从而将网站配置为共享端口。也可以配置网站和 Web 应用程序以侦听 IP 地址上的已知端口。

下面的示例演示使用网站和 Web 应用程序的 Web 角色配置。网站配置为端口 80 上的默认入口位置,Web 应用程序配置为接收来自名为“mail.mysite.cloudapp.net”的备用主机头的请求。

<WebRole>
  <ConfigurationSettings>
    <Setting name="DiagnosticsConnectionString" />
  </ConfigurationSettings>
    <Endpoints>
      <InputEndpoint name="HttpIn" protocol="http" port="80" />
      <InputEndpoint name="Https" protocol="https" port="443" certificate="SSL"/>
      <InputEndpoint name="NetTcp" protocol="tcp" port="808" certificate="SSL"/>
    </Endpoints>
    <LocalResources>
       <LocalStorage name="Sites" cleanOnRoleRecycle="true" sizeInMB="100" />
    </LocalResources>
  <Site name="Mysite" packageDir="Sites\Mysite">
    <Bindings>
      <Binding name="http" endpointName="HttpIn" />
      <Binding name="https" endpointName="Https" />
      <Binding name="tcp" endpointName="NetTcp" />
    </Bindings>
  </Site>
  <Site name="MailSite" packageDir="MailSite">
    <Bindings>
      <Binding name="mail" endpointName="HttpIn" hostheader="mail.mysite.cloudapp.net" />
    </Bindings>
    <VirtualDirectory name="artifacts" />
    <VirtualApplication name="storageproxy" />
      <VirtualDirectory name="packages" packageDir="Sites\storageProxy\packages"/>
    </VirtualApplication>
  </Site>
</WebRole>

当云服务在 Azure 中运行时,不必使该服务脱机便可更新其配置。若要更改配置信息,可以上载新的配置文件,或就地编辑配置文件并将其应用于正在运行的服务。可对服务配置进行以下更改:

  • 更改配置设置的值。当配置设置发生更改时,角色实例可以选择在实例联机时应用更改,或正常回收实例并在实例处于脱机状态时应用更改。

  • 更改角色实例的服务拓扑。拓扑更改不会影响正在运行的实例,但删除实例的情况除外。通常,所有剩余的实例都无需回收;但是,你可以选择回收角色实例以响应拓扑更改。

  • 更改证书指纹。只能在角色实例脱机时更新证书。如果在角色实例联机时添加、删除或更改证书,则 Azure 会正常地使实例脱机以更新证书,并在更改完成后使实例重新联机。

Azure 托管库中包括 Microsoft.WindowsAzure.ServiceRuntime 命名空间,其中提供了用于从在角色实例中运行的代码与 Azure 环境交互的类。RoleEnvironment 类定义了在配置更改之前和之后引发的以下事件:

  • Changing 事件发生在将配置更改应用于角色的指定实例之前。此事件可能被取消,从而导致 Azure 回收该角色。回收角色时,将在该角色重新联机之前应用配置更改。有关使用 Changing 事件的更多信息,请参见使用 RoleEnvironment.Changing 事件

  • Changed 事件发生在将配置更改应用于角色的指定实例之后。有关使用 Changed 事件的更多信息,请参见 使用 RoleEnvironment.Changed 事件

note备注
由于证书更改始终会使角色的实例脱机,因此不会引发 RoleEnvironment.Changing 或 RoleEnvironment.Changed 事件。

另请参阅

显示:
© 2015 Microsoft