Microsoft Azure 雲端服務

Microsoft Azure 雲端服務 (Cloud Service) 是 Microsoft Azure 最早開始供應的服務之一，它提供了抽象化的運算資源給雲端應用程式 (Cloud Application) 使用，開發人員可以部署雲端應用程式到 Azure 雲端服務，以獲取所需的執行環境與運算能力，是一種 PaaS 服務，而它也是 Azure 供應的 PaaS 服務中彈性最大，客制能力最高的服務。
它也是早期Azure虛擬機器所使用的邏輯管理單位，Azure虛擬網路的原型 Azure Connect 服務也是由雲端服務所起，因此它被稱為 Azure 運算與網路服務的源頭也不為過。

架構與開發方法

雲端服務一開始的設計是給開發人員部署其雲端應用程式為概念，因此設計上較針對開發人員的需求，使得 Azure 虛擬機器服務在推出時就有一些不便性存在，但這是雲端服務本身的限制使然。

開發支援

雲端服務由於需要較多的組態設定，因此無法以很簡單的方式開發與部署，微軟在早期就開始提供 Azure SDK 以及雲端服務的模擬器 (包含運算模擬器與儲存模擬器，早期名稱為 Development Fabric 與 Development Storage，後來定名為 Compute Emulator 與 Storage Emulator)，以及 Microsoft Azure Tools for Visual Studio，給 Visual Studio 的開發人員充分的支援。
但隨著 Azure 平台的開放程度愈來愈高，PHP 、node.js  以及 Java  的開發人員也可以使用雲端服務來代管其應用程式。

運算資源

雲端服務的運算資源是由虛擬機器提供，虛擬機器依照運算能力區分為數種類型 ，共分為一般性運算能量的 A 類型、經效能提升的 D 類型以及擁有最強運算效能的 G 類型，未來也會推出使用GPU運算的 N 類型。
不過雲端服務可用的虛擬機器類型只有 A 類型和 D 類型。

組態架構

雲端服務使用兩個主要的設定檔來組態服務功能，一個是服務定義檔 (ServiceDefinition.csdef)，它定義了一個雲端服務要使用到的雲端基礎資源，包含使用的虛擬機器角色類型 (Web Role 或 Worker Role)、虛擬機器的大小、使用的網路組態、負載平衡器組態、憑證資訊、使用的組態項目、IIS 使用的網站繫結資訊等，這些資訊在部署雲端服務之後不可改變。例如下列 XML：
<?xml version="1.0" encoding="utf-8"?><ServiceDefinition name="AzureWebFarm.Example.Cloud" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition" schemaVersion="2012-10.1.8">
  <LoadBalancerProbes>
    <LoadBalancerProbe name="WebDeploy" protocol="http" port="80" path="Probe.aspx" intervalInSeconds="5" timeoutInSeconds="100" />
  </LoadBalancerProbes>
  <WebRole name="AzureWebFarm.Example.Web" vmsize="Small">
    <Runtime executionContext="elevated" />
    <Sites>
      <Site name="Web">
        <Bindings>
          <Binding name="HttpIn" endpointName="HttpIn" />
          <Binding name="HttpsIn" endpointName="HttpsIn" />
        </Bindings>
      </Site>
    </Sites>
    <Endpoints>
      <InputEndpoint name="HttpIn" protocol="http" port="80" localPort="80" />
      <InputEndpoint name="HttpsIn" protocol="https" port="443" localPort="443" certificate="HTTPS" />
      <InputEndpoint name="Microsoft.WindowsAzure.Plugins.WebDeploy.InputEndpoint" protocol="tcp" port="8172" localPort="8172" loadBalancerProbe="WebDeploy" />
      <!-- unused, just there so instance discovery works -->
      <InternalEndpoint name="UnusedInternal" protocol="http" port="88" />
    </Endpoints>
    <Imports>
      <Import moduleName="Diagnostics" />
      <Import moduleName="RemoteAccess" />
      <Import moduleName="RemoteForwarder" />
      <Import moduleName="WebDeploy" />
    </Imports>
    <LocalResources>
      <LocalStorage name="Sites" cleanOnRoleRecycle="true" sizeInMB="2500" />
      <LocalStorage name="TempSites" cleanOnRoleRecycle="true" sizeInMB="2500" />
      <LocalStorage name="Execution" cleanOnRoleRecycle="true" sizeInMB="2500" />
      <LocalStorage name="Config" cleanOnRoleRecycle="true" sizeInMB="10" />
    </LocalResources>
    <ConfigurationSettings>
      <Setting name="DataConnectionString" />
      <Setting name="SyncEnabled" />
      <Setting name="SitesContainerName" />
      <Setting name="DirectoriesToExclude" />
      <Setting name="SyncIntervalInSeconds" />
    </ConfigurationSettings>
    <Certificates>
      <Certificate name="HTTPS" storeLocation="LocalMachine" storeName="My" />
    </Certificates>
  </WebRole></ServiceDefinition>
另一個是服務組態檔 (ServiceConfiguration.cscfg)，用來設定使用的 VM 作業系統類型與版本、虛擬機器數量、角色的設定值、憑證的使用等，這些設定在服務部署後仍然可以修改。如下列XML：
<?xml version="1.0" encoding="utf-8"?><ServiceConfiguration serviceName="AzureWebFarm.Example.Cloud" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration" osFamily="3" osVersion="*" schemaVersion="2012-10.1.8">
  <Role name="AzureWebFarm.Example.Web">
    <Instances count="2" />
    <ConfigurationSettings>
      <Setting name="Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString" value="UseDevelopmentStorage=true" />
      <Setting name="DataConnectionString" value="UseDevelopmentStorage=true" />
      <Setting name="SyncEnabled" value="true" />
      <Setting name="SitesContainerName" value="sites" />
      <Setting name="DirectoriesToExclude" value="App_Data/TEMP;TEMP" />
      <Setting name="SyncIntervalInSeconds" value="60" />
      <Setting name="Microsoft.WindowsAzure.Plugins.RemoteAccess.Enabled" value="true" />
      <Setting name="Microsoft.WindowsAzure.Plugins.RemoteAccess.AccountUsername" value="admin" />
      <Setting name="Microsoft.WindowsAzure.Plugins.RemoteAccess.AccountEncryptedPassword" value="MIIBnQYJKoZIhvcNAQcDoIIBjjCCAYoCAQAxggFOMIIBSgIBADAyMB4xHDAaBgNVBAMME1dpbmRvd3MgQXp1cmUgVG9vbHMCEEF7rZmMJyaEREi+EJC4WpUwDQYJKoZIhvcNAQEBBQAEggEAQrruo8G67TRXvYsMWJQsLywZTz1X7KvEeyrCH2OtgmAzw/LoNrrD8xZMCuTcExlueCsiMjCn1utf3/Zvs+6CnyeZCpRfE3Px8giMEg2qDLJYY9Q85qnSYaU8Z1VEwZLtWH2FG9lgsXYaGyd2/GWeITCFOiPjBvRheB6dfG2LMXaj7gYe0MOinqqTpAbsdE1yRsU55iUmCpTbuGjXpQzUsOQtW5ZriQR3JfSEtXVWBhWnRVRVInCtxI/vlAHiLbtjwOiyCQOTlgjOvnz2ovb1Ykzi9dzrLGEMYTldeJffKD/OzJHdGBIkdjW/4BJORc7ZO4+7tLXqe7h9MBzaw2AEATAzBgkqhkiG9w0BBwEwFAYIKoZIhvcNAwcECDHnafJ4LBBbgBBpTi79EDhW34Woo0JED7Xx" />
      <Setting name="Microsoft.WindowsAzure.Plugins.RemoteAccess.AccountExpiration" value="2013-01-30T23:59:59.0000000-08:00" />
      <Setting name="Microsoft.WindowsAzure.Plugins.RemoteForwarder.Enabled" value="true" />
    </ConfigurationSettings>
    <Certificates>
      <Certificate name="Microsoft.WindowsAzure.Plugins.RemoteAccess.PasswordEncryption" thumbprint="B6E8A99CB3B0174C053DAF5A48DACB504C5889EC" thumbprintAlgorithm="sha1" />
      <Certificate name="HTTPS" thumbprint="B6E8A99CB3B0174C053DAF5A48DACB504C5889EC" thumbprintAlgorithm="sha1" />
    </Certificates>
  </Role></ServiceConfiguration>