使用 Azure Resource Manager 範本立 ASE
概觀
重要
本文說明隔離式 App Service 方案搭配使用的 App Service 環境 v2 相關資訊。 App Service 環境 v1 和 v2 自 2024 年 8 月 31 日起已淘汰 (英文)。 有較新版本的 App Service 環境,其更易於使用,並且是在更強大的基礎結構上執行。 若要深入了解新版本,請從 App Service 環境簡介開始。 如果您目前使用 App Service 環境 v1,請遵循此文章中的步驟來移轉至新版本。
自 2024 年 8 月 31 日起,服務等級協定 (SLA) 和服務點數 (英文) 將不再適用於繼續在生產環境中的 App Service 環境 v1 和 v2 工作負載,因為其是已淘汰的產品。 App Service 環境 v1 和 v2 硬體的解除委任已經開始,而這可能會影響您的應用程式和資料的可用性和效能。
您必須立即完成移轉至 App Service 環境 v3,否則您的應用程式和資源可能會遭到刪除。 我們會嘗試使用就地移轉功能,自動移轉任何剩餘的 App Service Environment v1 和 v2,但 Microsoft 並未就自動移轉後的相關應用程式可用性提供聲明或保證。 您可能需要執行手動設定來完成移轉,並最佳化您的 App Service 方案 SKU 選擇,以符合您的需求。 如果自動移轉不可行,您的資源和相關聯的應用程式資料將遭到刪除。 我們強烈敦促您立即採取行動,以避免上述任一極端案例。
如果您需要額外的時間,我們可以提供一次性 30 天的寬限期,讓您完成移轉。 如需詳細資訊和申請寬限期,請檢閱寬限期概觀 (英文),然後移至 Azure 入口網站,造訪每個 App Service 環境的窗格。
如需 App Service 環境 v1/v2 淘汰的最新資訊,請參閱 App Service 環境 v1 和 v2 淘汰更新。
Azure App Service Environment (ASE) 可以使用網際網路可存取端點,或是 Azure 虛擬網路中內部位址上的端點來建立。 使用內部端點建立時,該端點是由稱為內部負載平衡器 (ILB) 的 Azure 元件提供。 使用內部 IP 位址的 ASE 稱為 ILB ASE。 具有公用端點的 ASE 稱為外部 ASE。
ASE 可以使用 Azure 入口網站或 Azure Resource Manager 範本來建立。 本文逐步解說使用 Resource Manager 範本建立外部 ASE 或 ILB ASE 所需的步驟和語法。 若要了解如何在 Azure 入口網站中建立 ASEv2,請參閱 [建立外部 ASE][MakeExternalASE] 或建立 ILB ASE。
在入口網站中建立 ASE 時,您可以選擇同時建立虛擬網路,或選擇要部署至其中的既有虛擬網路。
從範本建立 ASE 時,必須具備下列項目:
- Azure 虛擬網路。
- 該虛擬網路中的子網路。 建議的 ASE 子網路大小是具有 256 個位址的
/24
,以容納未來成長和規模調整需求。 ASE 建立之後,無法變更大小。 - 您想要部署的訂用帳戶。
- 您想要部署的位置。
若要自動建立 ASE,請遵循下列各節中的指導方針。 如果您要建立一個具有自訂 dnsSuffix (例如,internal.contoso.com
) 的 ILB ASEv2,還有一些要執行的動作。
在建立具有自訂 dnsSuffix 的 ILB ASE 之後,應該上傳與 ILB ASE 網域相符的 TLS/SSL 憑證。
上傳的 TLS/SSL 憑證會指派給 ILB ASE 作為其「預設」TLS/SSL 憑證。 如果 ILB ASE 上的應用程式是使用指派給 ASE 的一般根網域 (例如
https://someapp.internal.contoso.com
),此憑證將使用於此應用程式的 TLS/SSL 流量。
建立 ASE
建立 ASE 的 Resource Manager 範本及其相關聯的參數檔案可在 ASEv2 的 GitHub 上取得。
如果您想要建立 ASE,請使用這些 Resource Manager 範本 ASEv2 範例。 azuredeploy.parameters.json 檔案中的大部分參數是建立 ILB ASE 和外部 ASE 的通用參數。 利用現有的子網路建立 ILB ASE 時,以下清單會呼叫特殊附註的參數或唯一參數。
參數
- aseName:此參數會定義唯一的 ASE 名稱。
- location:此參數會定義 App Service 環境的位置。
- existingVirtualNetworkName:此參數會定義現有虛擬網路和子網路 (ASE 所在位置) 的虛擬網路名稱。
- existingVirtualNetworkResourceGroup:此參數會定義現有虛擬網路和子網路 (ASE 所在位置) 的資源群組名稱。
- subnetName:此參數會定義現有虛擬網路和子網路 (ASE 所在位置) 的子網路名稱。
- internalLoadBalancingMode︰在大多數情況下,此屬性設定為 3,這表示連接埠 80/443 上的 HTTP/HTTPS 流量,以及 ASE 上的 FTP 服務所接聽的控制項/資料通道連接埠將會繫結至 ILB 配置的虛擬網路內部位址。 如果此屬性設定為 2,只有 FTP 服務相關的連接埠 (控制和資料通道) 會繫結至 ILB 位址, 如果此屬性設定為 0,HTTP/HTTPS 流量仍會保留在公用 VIP 上。
- dnsSuffix︰這個參數定義要指派給 ASE 的預設根網域。 在 Azure App Service 的公用種變化中,所有 Web 應用程式的預設根網域皆為 azurewebsites.net 。 由於 ILB ASE 位於客戶虛擬網路的內部,所以不適合使用公用服務的預設根網域。 相反地,ILB ASE 應具有適合在公司的內部虛擬網路內使用的預設根網域。 例如,Contoso Corporation 可能會將 internal.contoso.com 的預設根網域用於只能在 Contoso 虛擬網路內解析和存取的應用程式。 若要指定自訂根網域,您必須使用 api 版本
2018-11-01
或舊版。 - ipSslAddressCount︰在 azuredeploy.json 檔案中,這個參數的值會自動預設為 0,因為 ILB ASE 只有單一 ILB 位址。 ILB ASE 沒有明確的 IP-SSL 位址。 因此,ILB ASE 的 IP-SSL 位址集區必須設定為零。 否則,就會發生佈建錯誤。
填入 azuredeploy.parameters.json 檔案後,就可以使用下列 Powershell 程式碼片段建立 ASE。 將檔案路徑變更為您電腦上 Resource Manager 範本檔案的位置。 記得提供您自己的 Resource Manager 部署名稱和資源群組名稱的值:
$templatePath="PATH\azuredeploy.json"
$parameterPath="PATH\azuredeploy.parameters.json"
New-AzResourceGroupDeployment -Name "CHANGEME" -ResourceGroupName "YOUR-RG-NAME-HERE" -TemplateFile $templatePath -TemplateParameterFile $parameterPath
建立 ASE 約需兩小時。 然後在入口網站中,ASE 會顯示在觸發部署之訂用帳戶的 ASE 清單中。
上傳和設定「預設」TLS/SSL 憑證
TLS/SSL 憑證必須與 ASE 相關聯,作為用來建立應用程式的 TLS 連線的「預設」TLS/SSL 憑證。 如果 ASE 的預設 DNS 尾碼是 internal.contoso.com,則連線到 https://some-random-app.internal.contoso.com
需要 *.internal.contoso.com 的有效 TLS/SSL 憑證。
使用內部憑證授權單位、向外部簽發者購買憑證、或使用自我簽署的憑證,取得有效的 TLS/SSL 憑證。 無論 TLS/SSL 憑證的來源為何,都需要正確設定下列憑證屬性:
- Subject:此屬性必須設為 *.your-root-domain-here.com。
- 主體別名:此屬性必須同時包含 .your-root-domain-here.com 和*.scm.your-root-domain-here.com*。 系統將使用 your-app-name.scm.your-root-domain-here.com 形式的位址,進行與每個應用程式相關聯的 SCM/Kudu 網站的 TLS 連線。
備妥有效的 TLS/SSL 憑證,還需要另外兩個準備步驟。 將 TLS/SSL 憑證轉換/儲存為 .pfx 檔案。 請記住,.pfx 檔案必須包含所有中繼和根憑證。 使用密碼保護其安全。
必須將 .pfx 檔案轉換成 base64 字串,因為上傳 TLS/SSL 憑證會使用 Resource Manager 範本。 因為 Resource Manager 範本是文字檔案,所以必須將 .pfx 檔案轉換成 base64 字串, 如此才能將其納入範本參數。
使用以下 PowerShell 程式碼片段來進行:
- 產生自我簽署憑證。
- 匯出 .pfx 檔案形式的憑證。
- 將 .pfx 檔案轉換為 base64 編碼的字串。
- 將 base64 編碼的字串儲存到別的檔案。
以下 base64 編碼的 Powershell 程式碼是改寫自 Powershell 指令碼部落格:
$certificate = New-SelfSignedCertificate -certstorelocation cert:\localmachine\my -dnsname "*.internal.contoso.com","*.scm.internal.contoso.com"
$certThumbprint = "cert:\localMachine\my\" + $certificate.Thumbprint
$password = ConvertTo-SecureString -String "CHANGETHISPASSWORD" -Force -AsPlainText
$fileName = "exportedcert.pfx"
Export-PfxCertificate -cert $certThumbprint -FilePath $fileName -Password $password
$fileContentBytes = get-content -encoding byte $fileName
$fileContentEncoded = [System.Convert]::ToBase64String($fileContentBytes)
$fileContentEncoded | set-content ($fileName + ".b64")
成功產生 TLS/SSL 憑證並轉換成 base64 編碼字串後,使用 GitHub 上的設定預設 SSL 憑證範例 Resource Manager 範本。
azuredeploy.parameters.json 檔案中有以下參數︰
- ︰設定 ILB ASE 的名稱。
- ︰包含 ILB ASE 部署所在的 Azure 區域的文字字串。 例如:"South Central US (美國中南部)"。
- pfxBlobString:.pfx 檔案的 based64 編碼字串表示法。 使用稍早的程式碼片段,複製 "exportedcert.pfx.b64" 中的字串。 貼上字串作為 pfxBlobString 屬性的值。
- : The used to secure the .pfx file.
- ︰憑證的指紋。 如果您從 PowerShell 擷取此值 (例如,先前程式碼片段中的
$certificate.Thumbprint
),可以直接使用該值。 如果您從 Windows 憑證對話方塊中複製此值,請記得去除多餘的空格。 certificateThumbprint 應該看起來像是 AF3143EB61D43F6727842115BB7F17BBCECAECAE。 - ︰您自己選擇的好記字串識別碼,可用來識別憑證。 Microsoft.Web/certificates 實體表示 TLS/SSL 憑證,而此名稱會作為實體的唯一 Resource Manager 識別碼的一部分。 名稱「必須」以下列尾碼結尾︰_yourASENameHere_InternalLoadBalancingASE。 Azure 入口網站會以這個尾碼為指標,表示憑證要用於保護啟用 ILB 的 ASE。
以下是 azuredeploy.parameters.json 的縮簡範例︰
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json",
"contentVersion": "1.0.0.0",
"parameters": {
"appServiceEnvironmentName": {
"value": "yourASENameHere"
},
"existingAseLocation": {
"value": "East US 2"
},
"pfxBlobString": {
"value": "MIIKcAIBAz...snip...snip...pkCAgfQ"
},
"password": {
"value": "PASSWORDGOESHERE"
},
"certificateThumbprint": {
"value": "AF3143EB61D43F6727842115BB7F17BBCECAECAE"
},
"certificateName": {
"value": "DefaultCertificateFor_yourASENameHere_InternalLoadBalancingASE"
}
}
}
填入 azuredeploy.parameters.json 檔案後,使用下列 Powershell 程式碼片段設定預設 TLS/SSL。 將檔案路徑變更為您電腦上 Resource Manager 範本檔案的位置。 記得提供您自己的 Resource Manager 部署名稱和資源群組名稱的值:
$templatePath="PATH\azuredeploy.json"
$parameterPath="PATH\azuredeploy.parameters.json"
New-AzResourceGroupDeployment -Name "CHANGEME" -ResourceGroupName "YOUR-RG-NAME-HERE" -TemplateFile $templatePath -TemplateParameterFile $parameterPath
每個 ASE 前端套用變更大約需要 40 分鐘。 例如,有一個預設大小的 ASE 使用兩個前端,則範本將需要大約 1 小時 20 分鐘的時間才能完成。 執行範本時,無法調整 ASE。
範本完成之後,可以透過 HTTPS 存取 ILB ASE 上的應用程式。 此連線使用預設 TLS/SSL 憑證加以保護。 如果 ILB ASE 上的應用程式是使用應用程式名稱加上預設主機名稱的組合來定址,則會使用預設 TLS/SSL 憑證。 例如,https://mycustomapp.internal.contoso.com
會使用 *.internal.contoso.com 的預設 TLS/SSL 憑證。
不過,就如同在公用多租用戶服務上執行的應用程式,開發人員可以為個別的應用程式設定自訂主機名稱。 他們也可以為個別的應用程式設定唯一 SNI TLS/SSL 憑證繫結。