快速入门:部署服务目录托管应用程序
本文内容
在本快速入门中,你将使用通过其中一篇快速入门文章创建的托管应用程序定义。 该部署创建两个资源组。 一个资源组包含托管应用程序,另一个是已部署资源的受管理资源组。 托管应用程序定义可部署应用服务计划、应用程序服务和存储帐户。
先决条件
创建服务目录托管应用程序
这些示例使用了发布应用程序定义快速入门 中创建的资源组名称。 如果已使用快速入门通过自带存储发布定义 ,请使用这些资源组名称。
发布应用程序定义 :packageStorageGroup 和 appDefinitionGroup 。
使用自带存储发布定义 :packageStorageGroup 、byosDefinitionStorageGroup 和 byosAppDefinitionGroup 。
获取托管应用程序定义
若要使用 Azure PowerShell 获取托管应用程序的定义,请运行以下命令。
在 Visual Studio Code 中,打开新的 PowerShell 终端并登录到 Azure 订阅。
Connect-AzAccount
此命令会打开默认浏览器,并提示登录到 Azure。 有关详细信息,请转到使用 Azure PowerShell 登录 。
从 Azure PowerShell 获取托管应用程序的定义。 在此示例中,使用部署托管应用程序定义时创建的资源组名称 appDefinitionGroup 。
Get-AzManagedApplicationDefinition -ResourceGroupName appDefinitionGroup
Get-AzManagedApplicationDefinition
列出了指定资源组中的所有可用定义,例如 sampleManagedApplication 。
为托管应用程序定义的资源 ID 创建变量。
$definitionid = (Get-AzManagedApplicationDefinition -ResourceGroupName appDefinitionGroup -Name sampleManagedApplication).ManagedApplicationDefinitionId
在部署托管应用程序时使用 $definitionid
变量的值。
要使用 Azure CLI 获取托管应用程序的定义,请运行以下命令。
在 Visual Studio Code 中,打开新的 Bash 终端会话并登录到 Azure 订阅。 如果已安装 Git,请选择“Git Bash”。
az login
此命令会打开默认浏览器,并提示登录到 Azure。 有关详细信息,请转到使用 Azure CLI 登录 。
从 Azure CLI 获取托管应用程序的定义。 在此示例中,使用部署托管应用程序定义时创建的资源组名称 appDefinitionGroup 。
az managedapp definition list --resource-group appDefinitionGroup
命令会列出指定资源组中的所有可用定义,例如 sampleManagedApplication 。
为托管应用程序定义的资源 ID 创建变量。
definitionid=$(az managedapp definition show --resource-group appDefinitionGroup --name sampleManagedApplication --query id --output tsv)
在部署托管应用程序时使用 $definitionid
变量的值。
若要从 Azure 门户获取托管应用程序的定义,请使用以下步骤。
登录 Azure 门户 。
选择“创建资源”。
搜索“服务目录托管应用程序” 并从可用选项中选择它。
“服务目录托管应用程序”随即显示。 选择“创建” 。
选择“示例托管应用程序 ”,然后选择“创建 ”。
门户显示了你使用快速入门文章发布的托管应用程序定义。
创建资源组和参数
为托管应用程序部署创建资源组。
New-AzResourceGroup -Name applicationGroup -Location chinanorth3
还需要为托管应用程序资源组创建名称。 资源组是在部署托管应用程序时创建的。
运行以下命令以创建受管理资源组的名称。
$mrgprefix = 'mrg-sampleManagedApplication-'
$mrgtimestamp = Get-Date -UFormat "%Y%m%d%H%M%S"
$mrgname = $mrgprefix + $mrgtimestamp
$mrgname
$mrgprefix
和 $mrgtimestamp
变量连接并存储在变量 $mrgname
中。 变量的值采用 mrg-sampleManagedApplication-20230512103059 格式。 在部署托管应用程序时使用 $mrgname
变量的值。
需要为托管应用程序的部署命令提供多个参数。 可以使用 JSON 格式的字符串或创建 JSON 文件。 在此示例中,我们使用 JSON 格式的字符串。 引号的 PowerShell 转义字符是反撇号 (`
) 字符。 反撇号还用于行延续,以便命令可以使用多行。
JSON 格式字符串的语法如下所示:
"{ `"parameterName`": {`"value`":`"parameterValue`"}, `"parameterName`": {`"value`":`"parameterValue`"} }"
为了提高可读性,已完成的 JSON 字符串使用反撇号进行行继续。 值存储在 $params
变量中,并在部署命令中使用。 部署受管理资源需要 JSON 字符串中的参数。
$params="{ `"appServicePlanName`": {`"value`":`"demoAppServicePlan`"}, `
`"appServiceNamePrefix`": {`"value`":`"demoApp`"}, `
`"storageAccountNamePrefix`": {`"value`":`"demostg1234`"}, `
`"storageAccountType`": {`"value`":`"Standard_LRS`"} }"
用于创建受管理资源的参数:
appServicePlanName
:创建计划名。 最多 40 个字母数字字符和连字符。 例如 demoAppServicePlan 。 应用服务计划名称在订阅中的资源组中必须是唯一的。
appServiceNamePrefix
:为计划名称创建前缀。 最多 47 个字母数字字符或连字符。 例如 demoApp 。 在部署期间,前缀与唯一字符串连接,以创建在 Azure 中全局唯一的名称。
storageAccountNamePrefix
:只能使用小写字母和数字,最多 11 个字符。 例如 demostg1234 。 在部署期间,前缀与唯一字符串连接,以创建在 Azure 中全局唯一的名称。 尽管你正在创建前缀,控件会检查 Azure 中的现有名称,并可能会发布一条验证消息,指出该名称已存在。 如果出现此情况,请选择其他前缀。
storageAccountType
:选项包括 Premium_LRS、Standard_LRS 和 Standard_GRS。
为托管应用程序部署创建资源组。
az group create --name applicationGroup --location chinanorth3
还需要为托管应用程序资源组创建名称和路径。 资源组是在部署托管应用程序时创建的。
运行以下命令以创建托管资源组的路径。
mrgprefix='mrg-sampleManagedApplication-'
mrgtimestamp=$(date +%Y%m%d%H%M%S)
mrgname="${mrgprefix}${mrgtimestamp}"
subid=$(az account list --query [].id --output tsv)
mrgpath="/subscriptions/$subid/resourceGroups/$mrgname"
$mrgprefix
和 $mrgtimestamp
变量连接并存储在变量 $mrgname
中。 变量的值采用 mrg-sampleManagedApplication-20230512103059 格式。 mrgname
和 subid
变量相互连接,以创建可在部署期间创建托管资源组的 mrgpath
变量值。
需要为托管应用程序的部署命令提供多个参数。 可以使用 JSON 格式的字符串或创建 JSON 文件。 在此示例中,我们使用 JSON 格式的字符串。 在 Bash 中,引号的转义字符是反斜杠 (\
) 字符。 反斜杠还用于行延续,以便命令可以使用多行。
JSON 格式字符串的语法如下所示:
"{ \"parameterName\": {\"value\":\"parameterValue\"}, \"parameterName\": {\"value\":\"parameterValue\"} }"
为了提高可读性,已完成的 JSON 字符串使用反斜杠作为续行符。 值存储在 params
变量中,并在部署命令中使用。 部署受管理资源需要 JSON 字符串中的参数。
params="{ \"appServicePlanName\": {\"value\":\"demoAppServicePlan\"}, \
\"appServiceNamePrefix\": {\"value\":\"demoApp\"}, \
\"storageAccountNamePrefix\": {\"value\":\"demostg1234\"}, \
\"storageAccountType\": {\"value\":\"Standard_LRS\"} }"
用于创建受管理资源的参数:
appServicePlanName
:创建计划名。 最多 40 个字母数字字符和连字符。 例如 demoAppServicePlan 。 应用服务计划名称在订阅中的资源组中必须是唯一的。
appServiceNamePrefix
:为计划名称创建前缀。 最多 47 个字母数字字符或连字符。 例如 demoApp 。 在部署期间,前缀与唯一字符串连接,以创建在 Azure 中全局唯一的名称。
storageAccountNamePrefix
:只能使用小写字母和数字,最多 11 个字符。 例如 demostg1234 。 在部署期间,前缀与唯一字符串连接,以创建在 Azure 中全局唯一的名称。 尽管你正在创建前缀,控件会检查 Azure 中的现有名称,并可能会发布一条验证消息,指出该名称已存在。 如果出现此情况,请选择其他前缀。
storageAccountType
:选项包括 Premium_LRS、Standard_LRS 和 Standard_GRS。
为“基本信息”选项卡提供值并选择“下一步” 。
订阅:选择要在其中部署托管应用程序的订阅。
资源组:选择资源组。 在本示例中,请创建名为 applicationGroup 的资源组。
区域:选择要部署资源的位置。
应用程序名 :输入托管应用程序的名称。 对于此示例,请使用 demoManagedApplication。
受管理资源组 :包含为托管应用程序部署的资源的受管理资源组的名称。 默认名称采用格式 mrg-{definitionName}-{dateTime}
,但你可以更改名称。
为“Web 应用设置”选项卡提供值并选择“下一步” 。
应用服务计划名称 :创建计划名称。 最多 40 个字母数字字符和连字符。 例如 demoAppServicePlan 。 应用服务计划名称在订阅中的资源组中必须是唯一的。
应用程序服务名称前缀 :为计划名称创建前缀。 最多 47 个字母数字字符或连字符。 例如 demoApp 。 在部署期间,前缀与唯一字符串连接,以创建在 Azure 中全局唯一的名称。
输入存储帐户名称的前缀,然后选择存储帐户类型。 选择下一步 。
存储帐户名称前缀:只能使用小写字母和数字,最多 11 个字符。 例如 demostg1234 。 在部署期间,前缀与唯一字符串连接,以创建在 Azure 中全局唯一的名称。 尽管你正在创建前缀,控件会检查 Azure 中的现有名称,并可能会发布一条验证消息,指出该名称已存在。 如果出现此情况,请选择其他前缀。
存储帐户类型:选择“更改类型”以选择存储帐户类型。 默认值为 Standard_LRS。 其他选项包括 Premium_LRS、Standard_LRS 和 Standard_GRS。
部署托管应用程序
运行以下命令来部署托管应用程序。
New-AzManagedApplication `
-Name "demoManagedApplication" `
-ResourceGroupName applicationGroup `
-Location chinanorth3 `
-ManagedResourceGroupName $mrgname `
-ManagedApplicationDefinitionId $definitionid `
-Kind ServiceCatalog `
-Parameter $params
部署命令中使用的参数:
Name
:指定托管应用程序的名称。 对于此示例,请使用 demoManagedApplication。
ResourceGroupName
:为托管应用程序创建的资源组的名称。
Location
:指定资源部署的区域。 对于此示例,请使用“chinanorth3”。
ManagedResourceGroupName
:使用 $mrgname
变量的值。 部署托管应用程序时会创建受管理资源组。
ManagedApplicationDefinitionId
:使用托管应用程序定义资源 ID 的 $definitionid
变量值。
Kind
:指定托管应用程序的该类型。 此示例使用 ServiceCatalog 。
Parameter
:在 JSON 格式的字符串中使用 $params
变量的值。
运行以下命令来部署托管应用程序。
az managedapp create \
--name demoManagedApplication \
--resource-group applicationGroup \
--location chinanorth3 \
--managed-rg-id $mrgpath \
--managedapp-definition-id $definitionid \
--kind ServiceCatalog \
--parameters "$params"
部署命令中使用的参数:
name
:指定托管应用程序的名称。 对于此示例,请使用 demoManagedApplication。
resource-group
:为托管应用程序创建的资源组的名称。
location
:指定要部署资源的区域。 对于此示例,请使用“chinanorth3”。
managed-rg-id
:使用 $mrgpath
变量的值。 部署托管应用程序时会创建受管理资源组。
managedapp-definition-id
:使用托管应用程序定义资源 ID 的 $definitionid
变量值。
kind
:指定托管应用程序的该类型。 此示例使用 ServiceCatalog 。
parameters
:在 JSON 格式的字符串中使用 $params
变量的值。
查看所选值的摘要,并验证未显示任何错误。 选择“创建 ”以部署托管应用程序。
查看结果
部署服务目录托管应用程序后,可获得两个新资源组。 一个资源组包含托管应用程序。 另一个资源组包含已部署的受管理资源。 在此示例中,即应用程序服务、应用服务计划和存储帐户。
托管应用程序
部署完成后,可以检查托管应用程序的状态。
运行以下命令以检查托管应用程序的状态。
Get-AzManagedApplication -Name demoManagedApplication -ResourceGroupName applicationGroup
展开属性,以便更轻松地阅读 Properties
信息。
Get-AzManagedApplication -Name demoManagedApplication -ResourceGroupName applicationGroup | Select-Object -ExpandProperty Properties
运行以下命令以检查托管应用程序的状态。
az managedapp list --resource-group applicationGroup
以下命令可分析有关托管应用程序的数据,以仅显示应用程序的名称和预配状态。
az managedapp list --resource-group applicationGroup --query "[].{Name:name, provisioningState:provisioningState}"
转到名为 applicationGroup 的资源组并选择“概述 ”。 资源组包含名为 demoManagedApplication 的托管应用程序。
选择托管应用程序的名称以获取详细信息,例如受管理资源组的链接。
托管的资源
可以查看部署到受管理资源组的资源。
若要显示受管理资源组的资源,请运行以下命令。 你在创建参数时创建了 $mrgname
变量。
Get-AzResource -ResourceGroupName $mrgname
若要显示受管理资源组的所有角色分配。
Get-AzRoleAssignment -ResourceGroupName $mrgname
在快速入门文章中创建的托管应用程序定义使用了具有所有者角色分配的组。 可以使用以下命令查看组。
Get-AzRoleAssignment -ResourceGroupName $mrgname -RoleDefinitionName Owner
还可以列出受管理资源组的拒绝分配。
Get-AzDenyAssignment -ResourceGroupName $mrgname
若要显示受管理资源组的资源,请运行以下命令。 你在创建参数时创建了 $mrgname
变量。
az resource list --resource-group $mrgname
运行以下命令以仅列出托管资源的名称、类型和预配状态。
az resource list --resource-group $mrgname --query "[].{Name:name, Type:type, provisioningState:provisioningState}"
运行以下命令以列出托管应用程序定义中使用的组的角色分配。
az role assignment list --resource-group $mrgname
以下命令可分析组的角色分配的数据。
az role assignment list --resource-group $mrgname --role Owner --query "[].{ResourceGroup:resourceGroup, GroupName:principalName, RoleDefinition:roleDefinitionId, Role:roleDefinitionName}"
要查看托管资源组的拒绝分配,请使用 Azure 门户或 Azure PowerShell 命令。
转到名称前缀为 mrg-sampleManagedApplication 的受管理资源组,然后选择“概述 ”显示已部署的资源。 资源组包含应用程序服务、应用服务计划和存储帐户。
受管理资源组和由托管应用程序创建的每个资源都有一个角色分配。 当你使用快速入门文章创建定义时,你创建了一个 Microsoft Entra 组。 该组用于托管应用程序定义。 当你部署托管应用程序时,该组的角色分配被添加到了受管理资源。
从 Azure 门户查看角色分配:
转到你的 mrg-sampleManagedApplication 资源组。
选择“访问控制(IAM)”>“角色分配”。
还可以查看资源的“拒绝分配”。
角色分配为应用程序的发布者提供管理存储帐户的访问权限。 在此示例中,发布者可能是 IT 部门。 “拒绝分配”可防止客户更改受管理资源的配置。 托管应用经过精心设计,使客户无需维护资源。 “拒绝分配”不包括在“角色分配”中分配的 Microsoft Entra 组。
清理资源
处理完托管应用程序后,可以删除资源组,这将删除你创建的所有资源。 例如,在本快速入门中,你创建了资源组 applicationGroup 和前缀为 mrg-sampleManagedApplication 的受管理资源组。
命令会提示你确认删除资源组。
Remove-AzResourceGroup -Name applicationGroup
命令会提示进行确认,然后在删除资源时返回命令提示符。
az group delete --resource-group applicationGroup --no-wait
从 Azure 门户主页的搜索字段中,输入“资源组”。
选择“资源组”。
选择 applicationGroup,然后选择“删除资源组”。
若要确认删除,请输入资源组名称,然后选择“删除”。
如果要删除托管应用程序定义,请删除在快速入门文章中创建的资源组。
发布应用程序定义 :packageStorageGroup 和 appDefinitionGroup 。
使用自带存储发布定义 :packageStorageGroup 、byosDefinitionStorageGroup 和 byosAppDefinitionGroup 。
后续步骤