你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。

将托管实例部署到 Azure 应用服务

Azure 应用服务上的托管实例将平台即服务的简单性与基础结构级控制的灵活性相结合。 托管实例 专为需要操作系统定制、私有网络以及与 Azure 服务安全集成的应用而设计。

重要

托管实例 通常在部分地区支持 Windows 网页应用,且仅限于 Pv4 和 Pmv4 定价方案。 Microsoft 会随着时间推移增加更多区域。 托管实例不支持Linux和容器。

在本快速入门中,你将完成以下步骤:

  1. 使用 Azure Developer CLI 部署示例资源。
  2. 在 Azure 应用服务 上创建托管实例。
  3. 部署示例应用。
  4. 验证部署。

迁移现有的.NET应用

本快速入门展示了如何创建托管实例资源并部署示例应用。 如果你是从现有的 .NET 应用程序着手,可以在 Visual Studio Code 中使用 GitHub Copilot 的 .NET 现代化功能 来指导从评估到部署的整个迁移过程。

注释

GitHub Copilot 现代化中的 托管实例 评估和部署目标体验通常可在 Visual Studio Code 中提供。 Visual Studio 对 托管实例 目标的支持计划首先在 Visual Studio Insiders 中推出,并在完成验证后正式可用。

将评估目标设置为 AppServiceManagedInstance.Windows,以根据 托管实例 特定指南分析该应用程序。 GitHub Copilot 现代化可以帮助您审查迁移问题、应用修复、验证应用、准备 Azure 资源,并部署到 托管实例。

要使用代理迁移工作流程,请参见:

先决条件

  • Azure 帐户:需要一个具有活动订阅的 Azure 帐户。 如果还没有帐户,可以免费创建一个帐户。

  • 托管标识

  • 快速入门:使用 Azure 门户上传、下载和列出 Blob

  • 可选配置(安装)脚本:该快速入门使用压缩 .zip 文件中命名 Install.ps1 的PowerShell脚本来安装字体。 配置脚本不是托管实例的必备。 当你的应用程序需要依赖、操作系统级角色、功能或配置,或实例重启后会丢失的持久性更改时,可以使用配置脚本。 诊断时使用RDP,而不是持久配置。

部署示例资源

您可以使用 Azure Developer CLI(AZD)在本快速入门中快速部署所需的全部资源。 本快速入门中使用的 AZD 模板来自 Azure 示例。

mkdir managed-instance-quickstart
cd managed-instance-quickstart
azd init --template https://github.com/Azure-Samples/managed-instance-azure-app-service-quickstart.git .
azd env set AZURE_LOCATION northeurope
azd up

azd up 命令执行以下操作:

  1. 创建用户分配的托管标识。
  2. 创建 Azure 存储 Blob。
  3. 将托管标识分配给存储容器和托管实例计划。
  4. 授予存储 Blob -Data-Contributor 对存储容器的访问权限。
  5. 将包含的字体和 Install.ps1 压缩为 scripts.zip。
  6. 将 scripts.zip 上传到存储容器。

注释

部署的示例资源中的配置文件包scripts.zip()包含 Install.ps1,该包将 Microsoft Aptos 字体文件复制到 C:\Windows\Fonts。 你部署的示例应用使用了这些字体。

以下 PowerShell 代码是模板中使用的配置(安装)脚本。

# Install.ps1 - Copy and register fonts on Managed Instance
Write-Host "Installing custom fonts on Managed Instance..." -ForegroundColor Green

# Copy all TTF and OTF fonts to Windows Fonts folder and register them
Get-ChildItem -Recurse -Include *.ttf, *.otf | ForEach-Object {
    $FontFullName = $_.FullName
    $FontName = $_.BaseName + " (TrueType)"
    $Destination = "$env:windir\Fonts\$($_.Name)"

    Write-Host "Installing font: $($_.Name)"
    Copy-Item $FontFullName -Destination $Destination -Force
    New-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts" -Name $FontName -PropertyType String -Value $_.Name -Force | Out-Null
}

Write-Host "Font installation completed." -ForegroundColor Green

azd up 的最终输出外观应类似于以下示例。

=== Deployment Complete ===
Storage Account: stgpjqep6fdlfv6
Container Name: scripts
Managed Identity Client name: id-gpjqep6fdlfv6
Resource Group: rg-managed-instance

Storage Account、Container Name、Managed Identity Client name、Resource Group 和 Script URI 的值将在稍后使用。

部署托管实例计划

按照以下步骤创建托管实例计划并向其部署应用:

  1. 登录到 Azure 门户。
  2. 选择“+ 创建资源”。
  3. 搜索托管实例
  4. 在结果中选择“Web 应用(用于托管实例)”。
  5. 选择“创建”以启动创建过程。
  6. 在“基本信息”选项卡中提供以下详细信息。

项目详细信息

设置 价值
Subscription 你的 Azure 订阅
资源组 rg-managed-instance

应用详细信息

设置 价值
Name contoso-mi-app
运行时堆栈 ASPNET V4.8
区域 你附近的区域

定价计划

设置 价值
Windows 计划 使用默认计划或创建新计划(例如‘contoso-mi-plan’)
定价计划* 选择定价计划。 如果 Pv4 或 Pmv4 未显示在定价计划中,请确认区域可用性或请求更多配额。

在“高级”选项卡上,提供以下详细信息。

配置(安装)脚本

设置 价值
存储帐户 使用默认计划或创建新计划(例如‘contoso-mi-plan’)
集装箱 脚本
ZIP 文件 scripts.zip
价值 验证 .zip URL 是否正确
身份 选择之前创建的托管标识
  • 选择“查看 + 创建”,然后选择“创建”。

将示例应用部署到托管实例

在此步骤中,你将使用 Cloud Shell 将 AZD 模板中包含的示例应用部署到托管实例。

  • 以下命令将 Web 应用部署到托管实例计划。 将 <app-name> 和 <resource-group> 更新为你的值。
az webapp deploy \
  --resource-group "<resource-group-name>" \
  --name "<app-name>" \
  --src-path app.zip \
  --type zip

浏览到应用

若要浏览到已创建的应用,请在“概述”页中选择默认域。

.NET 应用正在托管实例计划中运行。 该应用使用 C:\Windows\Fonts 目录中的字体。

显示使用 C:\Windows\Fonts\Aptos.TTF 的示例应用的屏幕截图。

管理托管实例计划

若要管理 Web 应用,请转到 Azure 门户,然后搜索并选择“应用服务”。

在“应用服务”页上,选择 Web 应用的名称。

在“概述”页上,选择应用服务计划的名称。 在“当前应用服务计划”下,选择计划名称。

在“设置”下的左侧菜单中,选择“配置”以查看配置详细信息。

清理资源

在前面的步骤中,你在资源组中创建了 Azure 资源。 如果将来不再需要这些资源,可以通过删除资源组来删除它们。

  1. 在 Azure 门户的 Web 应用的“概述”页中,选择“资源组”下的 myResourceGroup 链接。
  2. 在资源组页面上,确保所列出的那些资源是您想要删除的。
  3. 选择“删除资源组”,在文本框中键入“myResourceGroup”,然后选择“删除”。
  4. 通过选择“删除”再次进行确认。