由 Azure SDK 進入微軟雲端應用開發的世界
前言
Microsoft Azure 自2011年開始全球服務以來,己經經過了五個年頭,雖然目前 Azure 上的基礎建設服務 (IaaS) 的使用量是所有 Azure 服務內最高的,但 Azure 早期是由平台服務 (PaaS) 起家,以 Cloud Service、Storage 與 AppFabric 等服務開始了微軟的雲端世代,經過了這些年的努力與發展,Azure己經有30餘種的服務以及無以數計的功能,而且仍然在增加中。
雖然還是有很多特別或高度客製化 (需要自己配置軟體組態) 的應用仍然會使用基礎建設服務,但雲端應用的未來性,平台服務會比基礎建設服務要高出許多,而且使用平台服務來發展應用程式,能讓 IT 管理成本降低,這是平台服務優於基礎建設服務的一個重要指標,開發人員通常不會想要自己去組態 IT 環境,尤其是和自己的開發工作無關時,因此PaaS會比IaaS更適合開發人員,因為 PaaS 讓開發人員能將心力放在開發應用程式的功能,而非處理與基礎建設的相容性。
Azure 提供了許多 PaaS 服務,從早期的Cloud Service,到現在的 Azure App Service 與 Azure IoT Suites 等,利用相應的服務來開發中大型應用早己經是雲端上的主流作法,既然有這麼多的服務,就會需要一個能整合那些服務的工具,但這個工具又不能讓開發人員覺得麻煩,所以微軟將必需用到的管理工具與範本,包裝在 Azure SDK 裡面,只要是使用 Visual Studio的開發人員,下載並安裝 Azure SDK 就能得到 Azure 平台服務相關的工具與範本,協助開發人員運用 Azure 的 PaaS 開發應用程式。
取得Azure SDK
獲取Azure SDK的方法十分簡單,如果是使用Windows平台的開發人員可以到Microsoft Web網站中下載 Web Platform Installer ,它提供了一致的安裝介面。
只要新增需要安裝的套件 (如 Microsoft Azure SDK for .NET (VS2015) - 2.8.2),然後按安裝,並接受必要的授權合約後即可安裝,若有相關的相依套件也會一起安裝,省下到處去找安裝套件的時間。
安裝完畢後,啟動 Visual Studio 就能在各個角落中找到 Azure SDK 的功能。
若是非 Windows 平台的開發人員,則可以視需要於Azure 官方下載網站取得SDK與工具:
- Azure Tools for Eclipse (這個工具可由Eclipse的下載擴充功能取得)
- Azure CLI (Command Line Interface) 命令列工具
- Azure SDK for Java, PHP, node.js, Python, Ruby
專案範本群
Azure SDK 提供了 Azure PaaS 服務所需的專案範本,包含最早期的 Azure 雲端服務、Azure Mobile App (行動應用程式)、Service Fabric 應用程式範本等。若是需要資料分析如 HDInsight 或是 Azure Data Factory 的專案範本,Azure SDK 也有供應,在不同的分類內即可找到。
若是第一次使用 Azure SDK 或是第一次接觸 Azure 雲端應用開發,Azure SDK 內也含有快速入門 (Quickstart) 的範本供初學者參考用,基本上只要是 Azure 上需要程式碼範例的,在快速入門都有提供。
在專案範本內還提供了一個叫 Azure 資源群組的專案範本,它允許你可由內建的範本產生一個新資源範本 (Resource Template),或是自己從頭寫一份資源範本。資源範本是新的 Azure 管理架構,格式為 JSON,隸屬於資源管理員模式 (Resource Manager Mode),與現有的傳統模式 (Classic Mode) 相比,資源管理員模式允許由開發人員或 IT人員使用範本的方式定義 Azure 資源的配置方式,例如一次部署100台虛擬機,或是在範本內就定義好必要的基礎建設資源,Azure 會在載入範本時解析並在內部呼叫相關的 API 將資源產生出來,當範本作業完成時,就能存取定義好的基礎建設資源,可減輕開發人員或IT人員的管理負擔。Visual Studio 也貼心的在編輯範本時提供 JSON 大綱,讓編寫範本的開發人員或 IT 人員能夠快速的在如此大的 JSON 範本的各個區域之間移動,減少找尋相關指令位置的時間。
基本上,除了要向後相容於 Azure 虛擬機器v1的版本外,建議全面採用資源管理員模式,Azure Portal 上的資源部署除了部份服務 (如虛擬機器與儲存體等) 還能選擇傳統部署之外,其他的均採資源管理員部署模式。
管理工具
Azure資源相當的多,雖然 Visual Studio 本身有內建一個 Azure 管理員,但 Azure 管理員是建構於傳統模式的服務導向管理架構,因此較新的採用資源管理員模式的服務無法放 Azure 管理員存取,所以在較新版的 Azure SDK 中,微軟另外提供了一個 Cloud Explorer 工具,這個工具採用資源管理員模式,而且也可以看到傳統模式內的資源,而且你也可以改用資源群組的視角來瀏覽你的 Azure 服務。
採用資源類型視角 |
採用資源群組視角 |
每項工具都有自己的指令,只要選擇資源就會出現相應的指令,以 Azure Web 為例,點選其中的一個網站,就能看到相應的動作。
或是按下右鍵也有相同效果:
這些指令和在 Azure Portal,或是使用 Azure PowerShell / Azure CLI 等工具執行動作相同,它們都是使用相同的 API,所以你可以自己選擇喜歡的方法。
已連接服務
Azure 除了 PaaS 之外,還有支援應用程式功能的服務,像是負責使用者識別與存取管理的 Azure AD (Active Directory);負責收集與處理應用程式資料的 Application Insights;儲存與管理資料的 Azure Storage 等,有些服務會需要一些繁瑣的設定,因此微軟在 Visual Studio 2015 內新增了一個功能,稱為已連接服務 (Connected Services),這個功能可幫助開發人員簡化服務的設定工作,加快服務採用的速度。目前已連接服務的內建範本有 Microsoft 和 Salesforce 兩個,Microsoft 的範本則提供了Application Insights、Azure AD、Azure Storage 以及 Office 365 APIs 等雲端服務的介接方法。
例如要加入 Azure 儲存體,只要選擇要加入的帳戶,
系統就會自動加入相關的設定,若需要 NuGet 套件的話也會一起安裝,省去自行處理的麻煩。
部署的支援
針對 Azure PaaS 服務的部署,因應服務的不同而有些許的不一樣,例如 Azure Web App 在 Visual Studio 2015 內就己有內建工具,不過若要對應到最新的版本,還是要安裝最新版的 Azure SDK 才能獲得,例如 Azure SDK 更新了原本的 Azure Web Apps 網站工具,在新增網站時可一併新增 Azure SQL Database,介面也和之前的版本不一樣了。
網站部署時選擇網站的畫面也有些不同,用樹狀的方式呈現出主站與預備環境,讓開發人員更容易的選擇。
另外一個重要的變更是,Azure App Service 部署工具在部署 Web Apps、Mobile Apps 或是 API Apps 時採用的是相同的介面,所以若部署其他類型應用時若看到相同的介面也無須覺得意外。至於 Cloud Service,因為基礎建設沒有太大的改變,所以部署方法也沒有什麼變化。
應用程式診斷的支援
Azure SDK 除了應用程式的範本和工具外,對 Azure PaaS 應用程式的除錯與診斷的支援也是其功能重點之一,其中較為重要的是針對 Azure Web App 的診斷方式以及 Cloud Service 的診斷方式。
Azure Web App 提供了遠端偵錯 (Remote Debugging) 的能力,開發人員可將 Visual Studio 的偵錯器掛在 Azure Web App上,以進行即時的偵錯,但以往要到 Azure Portal 去啟用遠端偵錯的功能,現在只要用 Cloud Explorer 就可以做到了,只要使用連結偵錯工具的功能即可。
偵錯工具連結成功時,Visual Studio就會進入偵錯模式,你就可以透過瀏覽 Azure 上的 Web App 來偵錯你的網站應用程式了。不過遠端偵錯模式並不是好作法,一來它會很要求網路頻寬,二來在一個生產環境的網站內使用的話,你不知道會攔到哪個使用者的作業,除非你能確信只有一個使用者在上面,所以遠端偵錯應作為不得已的手段較佳。除了遠端偵錯功能外,Azure Web App 還提供了記錄串流 (Log Streaming) 的功能,讓開發人員能在Visual Studio 中就能監看記錄的內容,這個功能一樣可以由 Cloud Explorer 代為啟用應用程式記錄功能,它會捕捉在應用程式內使用 Trace 類別寫出的訊息,然後傳送到 Visual Studio,並顯示在輸出視窗。
不過若要長期監控應用程式,最佳的作法還是使用 Azure 的 Application Insights 服務,可使用前面提到的已連接服務來加入,它除了可以捕捉錯誤狀態 (使用ping或自訂規則等) 外,還可以捕捉與分析使用者的活動,讓你可以掌握目前在Web應用裡面的使用者活動狀況,也可以寫點程式寫入自己的記錄。
在 Cloud Service 上的診斷功能提供得就比 Web App 完整,而且經過長時間的演進,其組態系統也都己經成熟,Azure SDK 提供了 GUI 工具讓開發人員能簡單的設定,所有診斷的組態都會寫入專案的 diagnostics.wadcfgx 檔案 (這是一個 XML 格式的檔案)。
Cloud Service 的診斷資訊不像 Web App 能使用檔案系統,它會固定需要一個 Azure 儲存體來儲存診斷資訊,不同的診斷記錄會使用不同的儲存體格式,基本上格式固定的診斷資料會使用 Table 來儲存 (例如應用程式記錄、基礎建設記錄、事件記錄與效能計數等),而較大且格式不固定的資料則會改用 Blob 儲存 (例如 IIS 的記錄檔、失敗要求追踪記錄檔、當機傾印檔與自訂記錄檔等),而且也需要由程式或管理員自行管理記錄的容量 (因為使用到儲存體,會以容量計價)。如果需要瀏覽診斷資料,可以使用像 Azure Storage Explorer (可瀏覽 Blob, Table 等格式) 或 Microsoft Storage Explorer (目前僅能瀏覽Blob) 連到診斷資料所在的儲存體帳戶即可。
總結
Azure SDK 提供了開發人員進入 Azure 雲端開發所需要的專案範本與工具,讓想要使用 Azure 平台作為其應用程式載具的開發人員有了很明確的著力點,讓開發人員只需要專心在應用程式的功能上,而非基礎建設,這是 Azure PaaS 的目標,也是 Azure SDK 想要做到的。