如何使用 Powershell Commandlets 在应用服务环境中创建 Azure WebApp

Posted

技术标签:

【中文标题】如何使用 Powershell Commandlets 在应用服务环境中创建 Azure WebApp【英文标题】:How do I create an Azure WebApp in an App Service Environment using the Powershell Commandlets 【发布时间】:2015-07-29 12:51:59 【问题描述】:

我一直在尝试使用 Powershell 命令行开关在应用服务环境中创建 Azure Web 应用

我无法指定我的应用服务环境应该与 New-AzureWebApp 或 New-AzureAppServicePlan 命令行开关一起使用

在 Web 门户中,您将您的应用服务环境指定为位置...但使用 Powershell Commandlet 似乎无法做到这一点(它们会验证该位置是否是有效的“常规”Azure 位置)。

【问题讨论】:

【参考方案1】:

回答我自己的问题:

我发现我可以使用 New-AzureResourceGroup commandlet 和自定义 JSON 模板创建一个新的 Web 应用程序。我在库中找不到任何在 ASE 中配置 Web 应用程序的模板,但通过对门户使用的模板进行逆向工程,并从库中修改 Microsoft.WebSite.0.3.17-preview.json 模板,我可以使用以下命令创建 WebApp:

New-AzureResourceGroup -Name $ResourceGroupName -Location "Australia Southeast" -TemplateFile $TemplateFile -siteName $SiteName -hostingPlanName $HostingPlanName -hostingEnvironment $HostingEnvironment -siteLocation "Australia Southeast" -workerSize 0 -sku "Premium"

使用包含以下模板文件路径的 $TemplateFile 变量:

http://pastebin.com/VefC0Dz2

这只是 Gallery 中的 0.3.17 预览模板,有以下修改:

添加hostingEnvironment参数

"parameters": "hostingEnvironment": "type": "string", "defaultValue": "" ,

将 hostingEnvironment 属性添加到 Microsoft.Web/serverfarms 资源:

"resources": [ "apiVersion": "2014-06-01", "name": "[parameters('hostingPlanName')]", "type": "Microsoft.Web/serverfarms", "location": "[parameters('siteLocation')]", "properties": "name": "[parameters('hostingPlanName')]", "sku": "[parameters('sku')]", "workerSize": "[parameters('workerSize')]", "hostingEnvironment": "[parameters('hostingEnvironment')]", "numberOfWorkers": 0 , "apiVersion": "2014-06-01", "name": "[parameters('siteName')]", "type": "Microsoft.Web/sites", "location": "[parameters('siteLocation')]", "tags": "[concat('hidden-related:', '/subscriptions/', parameters('subscriptionId'),'/resourcegroups/', parameters('serverFarmResourceGroup'), '/providers/Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]": "empty" , "dependsOn": [ "[concat('Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]" ], "properties": "name": "[parameters('siteName')]", "serverFarm": "[parameters('hostingPlanName')]", "hostingEnvironment": "[parameters('hostingEnvironment')]" ,

我认为这也可以使用 Add-AzureResource Commandlet 来完成,但我还没有尝试过。

【讨论】:

【参考方案2】:

Microsoft 已将 ResourceManager CommandLets 添加到 PowerShell。这允许您执行部署。可以使用以下命令在 powerShell 中创建网站:

New-AzureRmResource -Location "West Europe" -Properties $props 
-ResourceName "Site1" -ResourceType "microsoft.web/sites"
-ResourceGroupName "ResourceGrp1" -Force

您需要为属性创建一个对象:

$props = @
HostingEnvironmentId ='/subscriptions/xyz/resourceGroups/ResourceGroup1/providers/Microsoft.Web/hostingEnvironments/ASE1
ServerFarmId = '/subscriptions/XXXX/resourceGroups/EDSGRP1/providers/Microsoft.Web/serverfarms/ASP1'
HostingEnvironment = ResourceGroup1
ClientCertEnabled ='True'

您可以通过在现有站点上使用 Get-AzureRMResource 了解属性的选项。

【讨论】:

谢谢。这让我越过了我的障碍。您还可以查询值....这里我正在查询正确的 ServiceFarmId。 [String]$planId = '' $plan = Get-AzureRmAppServicePlan -Name 'MyAppServicePlanName' -ResourceGroupName 'MyResourceGroup' -ErrorAction SilentlyContinue if(-not $plan) throw [System.ArgumentOutOfRangeException] "缺少应用服务计划。(ResourceGroupName='MyResourceGroup', AppServicePlan.Name = 'MyAppServicePlanName')" #连接此应用服务的必要属性 $props = @ ServerFarmId = $planId else #Write-Host "START AzureRmAppServicePlan Properties" #$plan.PSObject.Properties #Write-Host "END AzureRmAppServicePlan Properties" #获取planId,这样可以作为backing-app -此 AppService 的服务计划 [String]$planId = $plan.Id 【参考方案3】:

最近,Microsoft 将 Azure 网站更改为 Azure WebApps。但是 PowerShell cmdlet 命令保持不变。

所以你必须使用New-AzureWebsite

【讨论】:

我想你会发现在最新的 powershell commandlet 中有一个 New-AzureWebApp 命令。无论如何,New-AzureWebSiteNew-AzureWebApp 都没有任何可辨别的选项来在应用服务环境中创建站点。 是的 - 可能的。我没有尝试这个解决方案。但是我看到使用 new-azurewebsite 只是创建了一个新的 Azure Web 应用程序。

以上是关于如何使用 Powershell Commandlets 在应用服务环境中创建 Azure WebApp的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 C# 执行 PowerShell 脚本

PowerShell 5.1 - 如何卸载当前使用的模块

如何使用 C# 按组策略检查 PowerShell 禁用

如何使用 Powershell 中的快照创建 Azure 托管磁盘

如何使用 PowerShell 创建快捷方式

从 Powershell 调用的 DLL 使用相对于 Powershell 安装目录的路径。如何将其设置为其他内容?