通过 Powershell 创建具有标准定价层的 Azure 网站
Create Azure website with Standard pricing tier via Powershell
我正在尝试修复我的连续部署方案,要使其正常工作,必须存在 Azure 网站并且能够在登台和生产之间切换。我们希望此网站在 Standard
定价层中工作。
我现在的脚本创建了一个新的资源组、托管计划,在创建这些之后,网站本身。我面临的问题是网站始终处于 Free
模式。我应该能够通过使用 Set-AzureResource
cmdlet 来解决这个问题,但是这个命令抛出一条消息告诉我应该指定 Location
。问题是这个特定的 cmdlet 没有 Location
参数。
Set-AzureResource : {
"Error": {
"Code": "LocationRequired",
"Message": "The location property is required for this definition.",
"Target": null,
"Details": null
}
}
这是我用来创建所有资源的(简化的)脚本:
#Create the resource group
New-AzureResourceGroup -Location $location -Name $resourceGroupName -Force
#Create the hosting plan
$hostingPlanParameters = @{"name" = $hostingPlanName; "sku" = "Standard"; "computeMode" = "Standard"; "workerSize" = "0"; "numberOfWorkers" = "1"}
New-AzureResource -ApiVersion 2014-04-01 -Name $hostingPlanName -ResourceGroupName $resourceGroupName `
-ResourceType Microsoft.Web/serverFarms -Location $location `
-PropertyObject $hostingPlanParameters -Verbose -Force
#Create the website
$analyticsSite = @{"sku" = "Standard"; "webHostingPlan" = $hostingplan; "computeMode" = "Standard"; }
New-AzureResource -Name $label -ResourceType Microsoft.Web/sites `
-ResourceGroupName $resourceGroupName -Location $location `
-ApiVersion $apiVersion -PropertyObject $analyticsSite -Force
Set-AzureResource -Name $label -ResourceType Microsoft.Web/sites `
-ResourceGroupName $resourceGroupName -ApiVersion $apiVersion `
-PropertyObject $analyticsSite -Force
我读过该网站应该继承指定主机方案的 sku
,所以我应该不需要更新它。这似乎不适用于我上面的脚本。已指定托管计划,但不会继承设置。
创建的托管计划属性如下所示:
PropertiesText : {
"name": "devHostingPlanWestEU10",
"sku": "Standard",
"workerSize": 0,
"workerSizeId": 0,
"numberOfWorkers": 1,
"currentWorkerSize": 0,
"currentWorkerSizeId": 0,
"currentNumberOfWorkers": 1,
"status": 0,
"webSpace": "ResourceGroupWestEU10-WestEuropewebspace",
"subscription": "ad7add9b-8b7a-45df-8e95-0e7fccbr78a5",
"adminSiteName": null,
"hostingEnvironment": null,
"maximumNumberOfWorkers": 0,
"planName": null,
"perSiteScaling": null,
"hostingEnvironmentId": null
}
我觉得这还不错。
创建网站后,将打印这些属性:
PropertiesText : {
"name": "Testert10",
"state": "Running",
"hostNames": [
"testert10.azurewebsites.net"
],
"webSpace": "ResourceGroupWestEU10-WestEuropewebspace",
...
"repositorySiteName": "Testert10",
"owner": null,
"usageState": 0,
"enabled": true,
...
"computeMode": null,
"serverFarm": "Default1",
"serverFarmId": null,
"lastModifiedTimeUtc": "2015-05-21T11:52:30.773",
"storageRecoveryDefaultState": "Running",
"contentAvailabilityState": 0,
"runtimeAvailabilityState": 0,
"siteConfig": null,
"deploymentId": "Testert10",
"trafficManagerHostNames": null,
"sku": "Free",
"premiumAppDeployed": null,
"scmSiteAlsoStopped": false,
"targetSwapSlot": null,
"hostingEnvironment": null,
"microService": "WebSites",
"gatewaySiteName": null,
"kind": null,
"cloningInfo": null,
"hostingEnvironmentId": null
}
如您所见,computeMode、serverFarm、hostingEnvironment 和 sku 未使用我在 $analyticsSite
对象中设置的属性进行设置。
因此我可能需要更新资源,但这会引发上述错误。
我也尝试过使用 New-AzureWebsite
,以 Troy Hunt's blogpost 为例。但是,这个 post 也依赖于使用 Set-AzureResource
,所以我也会遇到同样的问题。此示例的另一个问题是您无法控制创建站点的资源组和托管计划,这会在搜索站点时造成一些麻烦。
问题是您在名为 "Default1" 的默认免费应用程序服务计划(又名服务器场或 Web 托管计划 - 它们都是一样的)中创建站点。然而,您缩放到标准大小的应用服务计划是另一个名为 "devHostingPlanWestEU10"。
要在预先存在的应用服务计划中创建站点,请使用以下命令:
(为了便于阅读,分成多行)
New-AzureResource
-Name <YourSiteName>
-Location "West US"
-ResourceGroupName <YourResourceGroupName>
-ApiVersion 2014-11-01
-ResourceType "Microsoft.Web/sites"
-PropertyObject @{ "serverFarm" = "<Your service plan name>" }
这在新的 RM cmdlet 中很容易实现。首先确保您拥有最新版本的 Azure PowerShell。
首先创建定义标准价格层的应用服务计划,然后使用该应用服务计划创建网络应用。
function Create-AppServicePlan()
{
#https://msdn.microsoft.com/en-us/library/mt619306.aspx
$resource = Find-AzureRmResource -ResourceNameContains $ServicePlanName -ResourceGroupNameContains $ResourceGroupName -ResourceType "Microsoft.Web/ServerFarms"
if(!$resource)
{
# Specify the Tier type that you would like
$servicePlan = New-AzureRmAppServicePlan -ResourceGroupName $ResourceGroupName -Name $ServicePlanName -Location $WebAppLocation -Tier Standard -NumberofWorkers 1 -WorkerSize "Small"
}
}
接下来使用应用服务计划作为参数创建 Web 应用。
function Create-AzureRmWebApp()
{
#https://msdn.microsoft.com/en-us/library/mt619250.aspx
$resource = Find-AzureRmResource -ResourceNameContains $WebAppName -ResourceGroupNameContains $ResourceGroupName -ResourceType "Microsoft.Web/sites"
if(!$resource)
{
$webApp = New-AzureRmWebApp -ResourceGroupName $ResourceGroupName -Name $WebAppName -Location $WebAppLocation -AppServicePlan $ServicePlanName
}
}
这是经过验证的完整工作脚本。
$ServicePlanName = "PSScriptAppServicePlann"
$WebAppName = "WebAppByPSlooksCool"
$ResourceGroupName = "MyResourceGroup"
$WebAppLocation = "australiaeast"
$ErrorActionPreference = "Stop"
# Step 1: Create the application service plan
Create-AppServicePlan
# Step 2: Create the web app using the service plan name.
Create-AzureRmWebApp
function Create-AzureRmWebApp()
{
#https://msdn.microsoft.com/en-us/library/mt619250.aspx
$resource = Find-AzureRmResource -ResourceNameContains $WebAppName -ResourceGroupNameContains $ResourceGroupName -ResourceType "Microsoft.Web/sites"
if(!$resource)
{
$webApp = New-AzureRmWebApp -ResourceGroupName $ResourceGroupName -Name $WebAppName -Location $WebAppLocation -AppServicePlan $ServicePlanName
}
}
function Create-AppServicePlan()
{
#https://msdn.microsoft.com/en-us/library/mt619306.aspx
$resource = Find-AzureRmResource -ResourceNameContains $ServicePlanName -ResourceGroupNameContains $ResourceGroupName -ResourceType "Microsoft.Web/ServerFarms"
if(!$resource)
{
# Specify the Tier type that you would like
$servicePlan = New-AzureRmAppServicePlan -ResourceGroupName $ResourceGroupName -Name $ServicePlanName -Location $WebAppLocation -Tier Standard -NumberofWorkers 1 -WorkerSize "Small"
}
}
使用新的 Azure 资源管理器 Cmdlet。您可以创建一个新的 App 服务计划并将其传递给 New-AzureRmWebApp Cmdlet。
New-AzureRmAppServicePlan -Name StdPlan -Location <"Location"> -ResourceGroupName <"ResourceGroupName"> -等级标准
New-AzureRmWebApp -ResourceGroupName <"ResourceGroupName"> -Name <"WebAppname"> -Location <"Location"> -AppServicePlan StdPlan
我正在尝试修复我的连续部署方案,要使其正常工作,必须存在 Azure 网站并且能够在登台和生产之间切换。我们希望此网站在 Standard
定价层中工作。
我现在的脚本创建了一个新的资源组、托管计划,在创建这些之后,网站本身。我面临的问题是网站始终处于 Free
模式。我应该能够通过使用 Set-AzureResource
cmdlet 来解决这个问题,但是这个命令抛出一条消息告诉我应该指定 Location
。问题是这个特定的 cmdlet 没有 Location
参数。
Set-AzureResource : { "Error": { "Code": "LocationRequired", "Message": "The location property is required for this definition.", "Target": null, "Details": null } }
这是我用来创建所有资源的(简化的)脚本:
#Create the resource group
New-AzureResourceGroup -Location $location -Name $resourceGroupName -Force
#Create the hosting plan
$hostingPlanParameters = @{"name" = $hostingPlanName; "sku" = "Standard"; "computeMode" = "Standard"; "workerSize" = "0"; "numberOfWorkers" = "1"}
New-AzureResource -ApiVersion 2014-04-01 -Name $hostingPlanName -ResourceGroupName $resourceGroupName `
-ResourceType Microsoft.Web/serverFarms -Location $location `
-PropertyObject $hostingPlanParameters -Verbose -Force
#Create the website
$analyticsSite = @{"sku" = "Standard"; "webHostingPlan" = $hostingplan; "computeMode" = "Standard"; }
New-AzureResource -Name $label -ResourceType Microsoft.Web/sites `
-ResourceGroupName $resourceGroupName -Location $location `
-ApiVersion $apiVersion -PropertyObject $analyticsSite -Force
Set-AzureResource -Name $label -ResourceType Microsoft.Web/sites `
-ResourceGroupName $resourceGroupName -ApiVersion $apiVersion `
-PropertyObject $analyticsSite -Force
我读过该网站应该继承指定主机方案的 sku
,所以我应该不需要更新它。这似乎不适用于我上面的脚本。已指定托管计划,但不会继承设置。
创建的托管计划属性如下所示:
PropertiesText : {
"name": "devHostingPlanWestEU10",
"sku": "Standard",
"workerSize": 0,
"workerSizeId": 0,
"numberOfWorkers": 1,
"currentWorkerSize": 0,
"currentWorkerSizeId": 0,
"currentNumberOfWorkers": 1,
"status": 0,
"webSpace": "ResourceGroupWestEU10-WestEuropewebspace",
"subscription": "ad7add9b-8b7a-45df-8e95-0e7fccbr78a5",
"adminSiteName": null,
"hostingEnvironment": null,
"maximumNumberOfWorkers": 0,
"planName": null,
"perSiteScaling": null,
"hostingEnvironmentId": null
}
我觉得这还不错。 创建网站后,将打印这些属性:
PropertiesText : {
"name": "Testert10",
"state": "Running",
"hostNames": [
"testert10.azurewebsites.net"
],
"webSpace": "ResourceGroupWestEU10-WestEuropewebspace",
...
"repositorySiteName": "Testert10",
"owner": null,
"usageState": 0,
"enabled": true,
...
"computeMode": null,
"serverFarm": "Default1",
"serverFarmId": null,
"lastModifiedTimeUtc": "2015-05-21T11:52:30.773",
"storageRecoveryDefaultState": "Running",
"contentAvailabilityState": 0,
"runtimeAvailabilityState": 0,
"siteConfig": null,
"deploymentId": "Testert10",
"trafficManagerHostNames": null,
"sku": "Free",
"premiumAppDeployed": null,
"scmSiteAlsoStopped": false,
"targetSwapSlot": null,
"hostingEnvironment": null,
"microService": "WebSites",
"gatewaySiteName": null,
"kind": null,
"cloningInfo": null,
"hostingEnvironmentId": null
}
如您所见,computeMode、serverFarm、hostingEnvironment 和 sku 未使用我在 $analyticsSite
对象中设置的属性进行设置。
因此我可能需要更新资源,但这会引发上述错误。
我也尝试过使用 New-AzureWebsite
,以 Troy Hunt's blogpost 为例。但是,这个 post 也依赖于使用 Set-AzureResource
,所以我也会遇到同样的问题。此示例的另一个问题是您无法控制创建站点的资源组和托管计划,这会在搜索站点时造成一些麻烦。
问题是您在名为 "Default1" 的默认免费应用程序服务计划(又名服务器场或 Web 托管计划 - 它们都是一样的)中创建站点。然而,您缩放到标准大小的应用服务计划是另一个名为 "devHostingPlanWestEU10"。
要在预先存在的应用服务计划中创建站点,请使用以下命令:
(为了便于阅读,分成多行)
New-AzureResource
-Name <YourSiteName>
-Location "West US"
-ResourceGroupName <YourResourceGroupName>
-ApiVersion 2014-11-01
-ResourceType "Microsoft.Web/sites"
-PropertyObject @{ "serverFarm" = "<Your service plan name>" }
这在新的 RM cmdlet 中很容易实现。首先确保您拥有最新版本的 Azure PowerShell。
首先创建定义标准价格层的应用服务计划,然后使用该应用服务计划创建网络应用。
function Create-AppServicePlan()
{
#https://msdn.microsoft.com/en-us/library/mt619306.aspx
$resource = Find-AzureRmResource -ResourceNameContains $ServicePlanName -ResourceGroupNameContains $ResourceGroupName -ResourceType "Microsoft.Web/ServerFarms"
if(!$resource)
{
# Specify the Tier type that you would like
$servicePlan = New-AzureRmAppServicePlan -ResourceGroupName $ResourceGroupName -Name $ServicePlanName -Location $WebAppLocation -Tier Standard -NumberofWorkers 1 -WorkerSize "Small"
}
}
接下来使用应用服务计划作为参数创建 Web 应用。
function Create-AzureRmWebApp()
{
#https://msdn.microsoft.com/en-us/library/mt619250.aspx
$resource = Find-AzureRmResource -ResourceNameContains $WebAppName -ResourceGroupNameContains $ResourceGroupName -ResourceType "Microsoft.Web/sites"
if(!$resource)
{
$webApp = New-AzureRmWebApp -ResourceGroupName $ResourceGroupName -Name $WebAppName -Location $WebAppLocation -AppServicePlan $ServicePlanName
}
}
这是经过验证的完整工作脚本。
$ServicePlanName = "PSScriptAppServicePlann"
$WebAppName = "WebAppByPSlooksCool"
$ResourceGroupName = "MyResourceGroup"
$WebAppLocation = "australiaeast"
$ErrorActionPreference = "Stop"
# Step 1: Create the application service plan
Create-AppServicePlan
# Step 2: Create the web app using the service plan name.
Create-AzureRmWebApp
function Create-AzureRmWebApp()
{
#https://msdn.microsoft.com/en-us/library/mt619250.aspx
$resource = Find-AzureRmResource -ResourceNameContains $WebAppName -ResourceGroupNameContains $ResourceGroupName -ResourceType "Microsoft.Web/sites"
if(!$resource)
{
$webApp = New-AzureRmWebApp -ResourceGroupName $ResourceGroupName -Name $WebAppName -Location $WebAppLocation -AppServicePlan $ServicePlanName
}
}
function Create-AppServicePlan()
{
#https://msdn.microsoft.com/en-us/library/mt619306.aspx
$resource = Find-AzureRmResource -ResourceNameContains $ServicePlanName -ResourceGroupNameContains $ResourceGroupName -ResourceType "Microsoft.Web/ServerFarms"
if(!$resource)
{
# Specify the Tier type that you would like
$servicePlan = New-AzureRmAppServicePlan -ResourceGroupName $ResourceGroupName -Name $ServicePlanName -Location $WebAppLocation -Tier Standard -NumberofWorkers 1 -WorkerSize "Small"
}
}
使用新的 Azure 资源管理器 Cmdlet。您可以创建一个新的 App 服务计划并将其传递给 New-AzureRmWebApp Cmdlet。
New-AzureRmAppServicePlan -Name StdPlan -Location <"Location"> -ResourceGroupName <"ResourceGroupName"> -等级标准
New-AzureRmWebApp -ResourceGroupName <"ResourceGroupName"> -Name <"WebAppname"> -Location <"Location"> -AppServicePlan StdPlan