我的目标是使用 powershell 实现一些目标,以自动从 powershell 创建 azure Web 应用程序。
New-AzWebApp -ResourceGroupName $ResourceGroupName -Name $WebAppName -Location 'West Europe'
-AppServicePlan $ServicePlan -ContainerImageName "one/image:latest"
cmdlet 工作正常...但是以这种方式创建的应用程序仍然具有这种堆栈(单击下面查看图像,尚未获得权限)。
如果我通过 Azure 门户执行此操作并使用 docker 映像创建此类 Web 应用程序。 堆栈是(点击下面查看图片,还没有权限):
我能够通过运行此 cmdlet 来修复堆栈:
Set-AzResource -ResourceId "/subscriptions/$SubscriptionId/resourceGroups/$ResourceGroupName/providers/Microsoft.Web/sites/$WebAppName/config/web"
-Properties @{"linuxFxVersion"="DOCKER|$dockerImage"} -Force
然后 UI 在属性中显示正确的信息...但是如果我检查应用程序日志数据...它不会拉取我的 docker 映像,它仍然会拉取另一个映像(不是我在原始
new-azwebapp
中设置的那个)
cmdlet)。
如果我检查手动创建的 Web 应用程序,日志会显示为该 Web 应用程序提取了正确的图像。
如何在不使用门户的情况下基于 docker 容器创建这样的 Web 应用程序?
我期望 MS PowerShell Azure 模块中的 cmdlet 创建一个基于 docker 映像的 Web 应用程序,就像我从 Azure 门户本身执行此操作一样。
最终结论:
powershell cmdlet 与 cli cmdlet 不会创建相同的 azure Web 应用程序。你们中有人已经面临这个问题了吗?
CLI cmd 似乎正确创建了 Web 应用程序。
az webapp create --resource-group ResourceGroupName --plan WebAppPlan --name WebAppName --deployment-container-image-name one/image:latest
PowerShell cmdlet 似乎无法正确创建 Web 应用程序。
New-AzWebApp -ResourceGroupName ResourceGroupName -Name WebAppName -AppServicePlan WebAppPlan -ContainerImageName "one/image:latest"
如果要在 Azure 应用服务上创建基于容器的 Web 应用,则在正确的应用服务计划中创建它非常重要。应用程序服务计划分为三种类型:
例如,如果您尝试创建 Windows 容器 Web 应用程序,请使用以下命令:
New-AzAppServicePlan -名称“PV3ASP”-位置“West US 2”-ResourceGroupName“Xenon”-Tier PremiumV3 -HyperV
New-AzWebApp -名称“xapp”-AppServicePlan“PV3ASP”-位置“West US 2”-ResourceGroupName“Xenon”-ContainerImageName“mcr.microsoft.com/azure-app-service/windows/parkingpage:latest”-ContainerRegistryUrl - ContainerRegistry用户-ContainerRegistry密码
请注意,New-AzAppServicePlan 具有 -HyperV 标志,该标志指示在支持 Hyper-V 嵌套虚拟化的特殊计算机中创建 ASP,这是为 Windows 容器提供动力所需的。
如果您的容器是 Linux 容器,只需将 -HyperV 标志替换为 -Linux,这将指示必须使用 Linux 计算机配置 ASP 来为您的 Linux 容器提供支持。
欲了解更多信息:
https://learn.microsoft.com/en-us/powershell/module/az.websites/new-azwebapp?view=azps-12.3.0