本文章是由機器翻譯。

Microsoft Azure

自動執行創建、 開發和部署 Azure 網站

Jadal Gyan

下載代碼示例

微軟 Azure 是快速和容易的方式來創建和部署 Web 網站或 Api 為您的雲消費者。很多已經被寫的 Azure 網站,包括安全、 部署等各個方面。它始終是一個挑戰將此資訊帶入現實生活實施。在這篇文章,我已經走了很多在一起這些不同的層面,以説明您快速建立一個生產就緒 Azure 網站。送你通過端到端的生命週期的創建、 部署、 配置和監控 Azure 網站。

我會首先使用Visual Studio2013年創建 Web 網站並將它部署到 Azure。然後我會設置連續集成從我原始程式碼儲存庫到 Azure,建立使用 API 金鑰或證書的身份驗證。最後,我將演示如何創建並將網站部署到生產環境中使用 Windows PowerShell。

創建一個蔚藍的 Web 網站

這是整個過程的最簡單的一步。我會創建 Azure 網站,並添加一個控制器,蹦蹦跳跳的業務邏輯裡面來說明要點。若要開始,我需要 Windows Azure SDK 為.NET 2.5,可以從下載 bit.ly/1GlhJpu

使用Visual Studio2013年,我將通過選擇空範本創建一個新的ASP.NETWeb 應用程式。如果您想要公開介面使用相同的 Web 網站,您可以選擇 WebAPI。在蔚藍的核取方塊中選擇 AppInsights 和託管。我不選擇現在的任何身份驗證,因為我會在以後再添加它。我還會為部署到不同的環境配置應用程式的見解。

當它提示為 Azure 網站細節的東西,如中所示圖 1,輸入網站名稱,選擇一個區域並按一下確定。

這將設置一個空的 Web 網站,並將其發佈到 Azure。現在,我會向網站中添加一些內容,使用開放的 Web 介面為.NET (浩然) 作為中介軟體。若要啟用浩然,我添加了下列的金塊套裝程式:Microsoft.Owin.Host.SystemWeb 和 Microsoft.AspNet.WebApi.Owin。

配置微軟 Azure 網站詳細資訊
圖 1 配置微軟 Azure 網站詳細資訊

後安裝 NuGet 套裝程式,我按右鍵該專案,並選擇添加歐文真啟動類。我會啟動的類的名稱,並將下面的代碼添加到的配置方法,設置路由控制器:

public void Configuration(IAppBuilder app) {
  var config = new HttpConfiguration();
  config.Routes.MapHttpRoute("default", "{controller}/{id}",
    new { id = RouteParameter.Optional});
  app.UseWebApi(config);
}

接下來,我將添加一個控制器來提供一個 API,通過右擊專案並按一下添加 Web API 控制器類。我會將類命名為 MyWebController,獨自離去所生成的代碼。接下來,按右鍵專案和發佈。在設置選項卡下的發佈對話方塊中,我選擇調試配置,所以該網站可以遠端偵錯。然後按一下下一步和發佈。

當我的 Azure 網站瀏覽器中打開時,控制器 Get 方法調用,預設情況下,返回一個 JSON 字串作為 ["value1","value2"]。我的網站是啟動和運行在 Azure 上。到目前為止還順利吧!

現在,我將添加用戶端應用程式調用 Web 網站我只是暴露在雲的 API。創建一個新的主控台應用程式調用 MyConsoleClient 並添加ASP.NETWeb API 2.2 係數圖書館 NuGet 套裝程式。此套裝軟體提供用於調用 API 的 HttpClient 物件。下面的代碼添加到 main 方法:

var httpClient = new HttpClient();
var requestMineType = 
  new MediaTypeWithQualityHeaderValue("application/json");
httpClient.DefaultRequestHeaders.Accept.Add(requestMineType);
var httpResponse =
  httpClient.GetAsync(
  "https://MyAzureWebsiteSample.azurewebsites.net/MyWeb").Result;
Console.WriteLine(httpResponse.Content.ReadAsStringAsync().Result);
Console.ReadLine();

現在我將運行用戶端,請參閱如何調用 Get 方法的控制器和 ["value1","value2"] 輸出到主控台上。我為我的網站發表了調試配置。儘管您可以調試本地的網站,有時也是有助於遠端偵錯發佈的 Web 網站,則仍在發展。若要調試已發佈的網站,我去其配置選項卡在入口網站和遠端偵錯,打開選擇的Visual Studio正在使用的版本 (請參閱圖 2)。

啟用遠端偵錯微軟 Azure 網站
圖 2 啟用遠端偵錯微軟 Azure 網站

要遠端偵錯 Web 網站並調試我主控台用戶端,我將休息放在 GetAsync 線。接下來,我打開伺服器資源管理器中,按右鍵 Web 網站和選擇附加調試器,如中所示圖 3

附加調試器到發佈的 Web 網站
圖 3 附加調試器到發佈的 Web 網站

現在我可以單一步驟代碼和遠端偵錯網站,從我的機器,將我的更改提交到原始程式碼存儲庫中。

設置連續集成

現在我會通過我的網站結合原始程式碼存儲庫中持續集成 (CI) 工作。它如何的酷會,當您簽入代碼到您的存儲庫,網站專案是建造和自動部署到 Azure 嗎?Azure 網站的集成原始程式碼管理功能使您輕鬆地將您的源存儲庫連結到 Azure 網站持續集成。蔚藍的入口網站,瀏覽器中打開的 Web 網站並設置部署了按一下主頁選項卡從原始程式碼管理中,如中所示圖 4

設置部署從原始程式碼管理
圖 4 設置部署從原始程式碼管理

具體取決於您正在使用為您的原始程式碼管理提供程式,您有選項選擇從本地 Git 存儲庫,GitHubVisual Studio線上等。正如我的代碼在Visual Studio線上存儲庫中,我選擇了它在下一個螢幕上。接下來,我輸入我的Visual Studio線上帳戶名稱,並授權我的帳戶。我不得不同意,允許連接請求從 Azure 到我的Visual Studio線上帳戶。然後我選擇存儲庫名稱,這是我的團隊專案名稱。在按一下下一步後,我的 Azure 網站和Visual Studio線上團隊專案之間建立連結。

我現在應該看到在Visual StudioTeam 總管中的生成選項,有為我作為 MyAzureWebsite 創建的組建定義­Sample_CD 所以我可以用滑鼠右鍵按一下並編輯的定義。所以我會將它設置為啟用,將預設情況下,常規選項卡上,禁用佇列處理。在工藝參數下生成/專案,流覽,並選擇要生成的解決方案。

在這一點上,我會給進程選項卡中的流程參數的任何其他更改。在進程選項卡上看看部署參數。這是一體化建立在為到 Azure 服務的組建定義。如果您有多個專案在存儲庫中,將部署為拼音字母順序排列的第一個網站。要避免此問題,請確保您有一個單獨的解決方案,為您具有 CI 啟用的每個 Web 網站。檢查您的代碼中,或者按右鍵,然後生成排入佇列。您應該看到該網站的建立和發佈到 Azure。

您可以驗證是否持續集成工作通過點擊網站,部署選項卡中,如中所示圖 5。在這裡,您將看到最後一次成功的部署發生從 CI 構建。

部署歷史與持續集成
圖 5 部署歷史與持續集成

配置身份驗證

Azure 網站現在是可供發展,添加業務功能和好處的詞。要設置身份驗證的網站,以便您可以進行身份驗證和授權的消費者。有不同的方案,為這種設置,其中的細節,你會發現在 bit.ly/1CHVni3

我設置我的 Azure 網站進行身份驗證之前,我會將授權屬性添加到我的控制器和發佈該網站。運行用戶端來訪問該網站,將返回以下消息:

{"Message": "Authorization has been denied for this request."}

在這裡,我會在我 Azure 網站上啟用的身份驗證和更新主控台用戶端提供的 API 金鑰或證書憑據進行身份驗證。身份驗證和權杖生成被委派到 Azure 活動目錄 (AAD)。圖 6 顯示身份驗證用戶端、 反傾銷協定 》 和服務之間的工作流程。

蔚藍的 Active Directory 身份驗證工作流
圖 6 蔚藍的 Active Directory 身份驗證工作流

對於反傾銷協定 》 身份驗證,用戶端和 Web 網站應該有相應的應用程式條目在反傾銷協定 》 上註冊。要做到這一點,我導航到入口網站上的 Active Directory 選項卡並選擇該組織 目錄,然後按一下應用。接下來,我選擇添加應用程式/添加應用程式時,我組織 是發展中國家,並輸入網站的名稱。

對我而言,我輸入 MyAzureWebsiteSample,然後選擇 Web 應用程式或 Web API 選項並按一下下一步。在下一個螢幕上,輸入要打開我的網站在 MyAzureWebsiteSample.azurewebsites.net 標誌的位址 URL 和 [mydomain].onmicrosoft.com/MyAzureWebsiteSample 作為應用程式 ID URI 並按一下確定。這將創建 Web 網站的反傾銷申請。接下來,我向反傾銷協定 》,重複相同的步驟添加用戶端應用程式條目。對於 URL 和應用程式 ID URI 上的標誌,我輸入 HTTP://myconsoleclient。

因為這是一個用戶端應用程式,它不必是一個物理的 URL ; 一個有效的 URI 就足夠了。現在我想讓用戶端存取 MyAzureWebsiteSample 應用程式,一旦它已經過身份驗證。為此,在配置選項卡的對其他應用程式部分的許可權上按一下添加的應用程式將打開一個快顯視窗。我選擇顯示其他和搜索 MyAzureWebsiteSample,然後選擇它並按一下確定。配置選項卡上,在授予許可權後面是一個許可權來訪問 MyAzureWebsiteSample (見圖 7)。我檢查它,然後按一下添加應用程式。

設置對用戶端應用程式可以訪問在蔚藍的 Active Directory 中 Azure 網站的許可權
圖 7 設置對用戶端應用程式可以訪問在蔚藍的 Active Directory 中 Azure 網站的許可權

此外,我會注意到為用戶端應用程式條目 ClientId 因為我很快就會需要它。如果你想要使用的 API 金鑰進行身份驗證,然後將此配置頁上創建了鍵。因為我使用證書身份驗證,我需要將我的證書與反傾銷協定 》 中的用戶端應用程式條目相關聯。要做到這一點,我將使用 Azure AD 模組為 Windows PowerShell 的過程自動化。您可以下載這在 bit.ly/1D4gt8j

我運行下面的 Windows PowerShell 命令,以從本地電腦中導入一個.cer 檔並將該證書上載到用戶端應用程式條目:

Connect-msolservice
$cer = New-Object System.Security.Cryptography.X509Certificates.X509Certificate
$cer.Import("$pwd\MyConsoleClientCert.cer")
$binCert = $cer.GetRawCertData()
$credValue = [System.Convert]::ToBase64String($binCert);
New-MsolServicePrincipalCredential -AppPrincipalId "<client id>" -Type asymmetric -Value $credValue -StartDate $cer.GetEffectiveDateString() -EndDate $cer.GetExpirationDateString() -Usage verify

在此命令中 clientid 是我在上一步中複製的。若要驗證該證書已成功上載,我運行以下 Cmdlet 提供客戶機 id:

Get-MsolServicePrincipalCredential -AppPrincipalId "<clientid>" -ReturnKeyValues 1

這將顯示所有的客戶機 id 關聯的證書。在這種情況下,它應該顯示一個。我已經建立了我在反傾銷協定 》 中的應用程式。下一步是啟用 Web 網站和用戶端,我會使用反傾銷協定 》 進行身份驗證。首先,我會更新 MyAzureWebsiteSample 專案將開設反傾銷協定 》。我將添加的以下與身份驗證相關的浩然安全 NuGet 套裝程式:Microsoft.Owin.Security 和 Microsoft.Owin.Security.ActiveDirectory。

在啟動類中的 MyAzureWebsiteSample,我將下面的代碼添加到配置方法:

app.UseWindowsAzureActiveDirectoryBearerAuthentication(
  new WindowsAzureActiveDirectoryBearerAuthenticationOptions {
    TokenValidationParameters = new TokenValidationParameters
      {
        ValidAudience = "https://[mydomain].onmicrosoft.com/MyAzureWebsiteSample",
        ValidateAudience = true,
      },
      Tenant = "[mydomain].onmicrosoft.com"
});

你會用你 AAD 目錄域的名稱替換 [mydomain]。這將告訴 Web 網站使用 URI 指定觀眾 AAD 的身份驗證。訪問該服務的用戶端將需要提供此 URI 從反傾銷協定 》 中獲取權杖。在用戶端主控台上,我使用活動目錄身份驗證庫,也稱為阿達,身份驗證邏輯,並將 MyConsoleClient NuGet 套裝程式添加到主控台應用程式。

阿達爾

在用戶端上,我將使用阿達所提供的 Api 來獲取權杖從反傾銷協定 》 所提供的證書憑據。我以前添加的代碼替換中的代碼圖 8,其中包括身份驗證。

圖 8 的 api 添加身份驗證

var httpClient = new HttpClient();
var requestMineType = new MediaTypeWithQualityHeaderValue("application/json");
  httpClient.DefaultRequestHeaders.Accept.Add(requestMineType);
var authContext = new  AuthenticationContext(
  "https://login.windows.net/[mydomain].onmicrosoft.com");
var clientAssertionCertificate = new ClientAssertionCertificate("<clientId>",
  GetX509CertObject("CN=MyClientConsoleCert"));
var authResult = authContext.AcquireTokenAsync(
  "https://[mydomain].onmicrosoft.com/MyAzureWebsiteSample",
  clientAssertionCertificate).Result;
httpClient.DefaultRequestHeaders.Authorization =
  new AuthenticationHeaderValue("Bearer", authResult.AccessToken);
var httpResponse =
  httpClient.GetAsync(
  "https://MyAzureWebsiteSample.azurewebsites.net/MyWeb").Result;
Console.WriteLine(httpResponse.Content.ReadAsStringAsync().Result);
Console.ReadLine();

你會替換為您自己的客戶機 id 和我的證書的名稱。我已經變成 GetX509CertObject 的方法、 該憑證存放區區中讀取,並創建 x509 證書物件抽象證書檢索代碼。如果您使用 APIKey 而不是證書身份驗證,您就會構造一個 ClientCredential 物件,該物件在客戶機 Id 並記下了從門戶,而不是通過 ClientAssertionCertificate 物件的 APIKey 中傳遞。如果不提供任何用戶端憑據來獲取權杖,則會提示您 AAD 租客使用者憑據。

運行代碼圖 8 來驗證用戶端和調用 MyAzureWebsiteSample 控制器方法和列印 ["value1"、"value2"]。該控制器將提出了一種我可以用來進一步授權用戶端的用戶端提出的索賠要求。

自動化部署

到目前為止,共事一個開發環境部署 Azure 網站。我只簽入代碼和部署了該網站,或右擊和它出版 — — 就是這麼簡單。

然而,這不是 QA 或生產環境的情況。它不可能從Visual Studio進行部署。現在,我會告訴你如何來實現自動化部署到任何環境中使用 Windows PowerShell。我可以從入口網站,以及執行所有這些步驟,但這牽涉到很多的手動步驟。

蔚藍 PowerShell 提供 Cmdlet 打造 Azure 的資源,如存儲 Web 網站,等等。我會去幾個我的自動化腳本的重要方面。完整的腳本是在本文附帶原始程式碼下載中可用。Azure PowerShell 的資源管理器模式允許您從邏輯上講像 Web 網站的多個資源進行分組,穿紅衣的緩存、 SQL Azure 和其他資源組。我使用 AzureMode 開關 Cmdlet 我 Azure PowerShell 環境 ResourceManager 模式和服務管理模式之間切換。

下面的代碼闡釋了幾個應注意的問題,從該腳本。首先,添加 AzureAccount 顯示交互的視窗,提示我登錄到我的帳戶蔚藍。選擇 AzureSubscription 設置當前訂閱。然後我向 ResourceManager 切換模式創建新的 ResourceGroup 和作為新資源添加我的網站:

$SubscriptionId = "<subscriptionid>"
Add-AzureAccount
Select-AzureSubscription -SubscriptionId $SubscriptionId -Current
Switch-AzureMode -Name AzureResourceManager
$myResourceGroup = New-AzureResourceGroup -Name "MyResourceGroup" -Location "West US"
$mywebsite = New-AzureResource -Name "MyAzureWebsiteSample"
  -ResourceType "Microsoft.Web/sites" -ResourceGroupName "MyResourceGroup"
  -Location "West US" -ApiVersion "2014-04-01" -PropertyObject @{}

我作為 Microsoft.Web/sites 使用許可權。有其他資源類型,您可以創建新資源 Cmdlet 的 Microsoft.Sql/servers/databases 等。在這個片段中,我將創建 AzureStorageAccount 以將其關聯到我網站上用於存儲診斷跟蹤。在這裡我沒有使用 ResourceManager Cmdlet。我外我 ResourceGroup 創建的 AzureStorageAccount。在這個時候,將存儲帳戶添加到 ResourceGroups 尚不支援。要在存儲中創建一個表,我需要獲得上下文。我通過在 storageAccountKey 中獲取上下文。StorageAccountKey 沒有使用者不必知道細節的情況下到另一種從一個 Cmdlet 將傳遞:

$myStorage = New-AzureStorageAccount -StorageAccountName "MyStorageAccount"
  -Location "West US"
$storageAccountKey = Get-AzureStorageKey -StorageAccountName "MyStorageAccount"
$context = New-AzureStorageContext -StorageAccountName "MyStorageAccount"
  -StorageAccountKey $storageAccountKey.Primary
$logTable = New-AzureStorageTable -Name $MyStorageTableName -Context $context

啟用 AzureWebsiteApplicationDiagnostic Cmdlet 將啟用診斷使用我提供的存儲帳戶:

Enable-AzureWebsiteApplicationDiagnostic -Name "MyAzureWebsiteSample"
  -Verbose -LogLevel Information -TableStorage
  -StorageAccountName "MyStorageAccount" –StorageTableName $MyStorageTableName

對於任何網站,有 AppSettings web.config 的特定環境中的某些設置。下面的程式碼片段演示如何為基於的環境部署到 Azure 網站替換 Appsettings。這些設置將會覆蓋當前 Web 網站的 web.config 中的值:

$appSettings = @{
  "CurrentEnv" = “Test”;
  "ida:Audience" = “https://[mydomain].onmicrosoft.com/MyAzureWebsiteSample”;
  "ida:ClientId" = "8845acba-0820-4ed5-8926-5652s5353s662";
  "ida:Tenant" = "[mydomain].onmicrosoft.com";
  "any:other" = "some other setting";
} 
Set-AzureWebsite -Name “MyAzureWebsiteSample” -AppSettings $appSettings

創建和通過調用集 AzureWebsite 在 Web 網站上設置了鍵值的集合。這將重寫 web.config 中的設置。 您還可以更改這從門戶以後。

到目前為止,我已經建立了我的網站的基礎設施。現在,我想在我發佈的服務的應用程式邏輯。我將使用發佈-­AzureWebsiteProject 的 Cmdlet 來做這份工作。我要提供我的網站和作為我的專案的生成輸出的一部分產生的包:

Publish-AzureWebsiteProject -Package "<packagepath>" -Name "MyAzureWebsiteSample"

我從我生成輸出拿包路徑:

drop\_PublishedWebsites\MyAzureWebsiteSample_Package\MyAzureWebsiteSample.zip

該腳本還將證書上載到反傾銷協定 》。您可以從本文附帶的代碼下載中下載完整的腳本。您還可以檢查 bit.ly/1zTBeQo 瞭解更多的功能豐富經驗 Azure 網站入口網站提供用於管理 Web 網站設置和秘密,當你從發展移到集成到生產環境中部署。

啟用應用程式的見解

一旦你的網站是在生產中,你可以得到遙測從而瞭解該網站如何縮放和性能方面表現這種需要。應用程式的見解提供了遙測解決方案 Azure 部署資源。若要啟用應用程式的見解,我不得不選擇它作為一部分的網站範本。這向專案中添加必要的 NuGet 套裝程式和 ApplicationInsights.config 檔 (其中包含儀錶鍵)。現在當上發佈網站時,ApplicationInsights 資源創建並連結與設定檔中的金鑰。

對於生產環境,在新的入口網站上創建 ApplicationInsights 資源。在這個時候,沒有可設置在門戶上 AppInsights 的 Azure PowerShell Cmdlet。從屬性,記下檢測的關鍵。您需要將此金鑰添加到 ApplicationInsights.config 檔中,發佈 Web 網站以確保它不會隨該網站部署之前。

然而,還有沒有辦法在網站發佈期間更新此檔。你可以圍繞這一問題通過不依賴從 ApplicationInsights.config 檔的關鍵。相反,將該項添加到 appsettings。這種方式,您可以重寫它為每個環境。該網站是怎麼知道要用這把鑰匙的?為此,我在我的網站從 web.config 中讀取金鑰並將其設置在應用程式的見解設定物件中更新啟動代碼:

Microsoft.ApplicationInsights.Extensibility.
  TelemetryConfiguration.Active.InstrumentationKey = "<read key from appsettings>";

我還關鍵從檔中刪除我 ApplicationInsights.config 因為它已不再需要。現在我把房間鑰匙給我自動化 Azure PowerShell 腳本。這在網站部署期間更新 appsettings。一旦您已經設置了應用程式的見解,你可以在入口網站上或通過安裝監控代理查看效能資料。

總結

這是一個基本的分步文章為考慮 Azure 網站從開發環境和設置身份驗證和自動化在 Azure,一路到生產環境中部署。Azure 走過漫長的道路,在提供豐富的和功能強大的 Api 使用 Azure PowerShell 和新增強在入口網站 portal.azure.com

您可以擴展此安裝程式以添加您自己的資源,如 SQL Azure 或額外的存儲資源。使用的技術提到在這裡,你應該能夠快速啟動一個新的 Azure 網站和設置身份驗證和部署于任何環境的自動化。


Gyan Jadal 是一名軟體工程師,在為微軟工作。他有著豐富的經驗,設計和開發基於 Azure 應用程式的解決方案和企業房地系統。聯繫到他在 gjadal@microsoft.com

感謝以下的微軟技術專家對本文的審閱: Mani Sengodan