6

Sto cercando di sistemare il mio scenario di distribuzione continuo e affinché funzioni un sito Web di Azure deve esistere ed essere in grado di passare da Staging a Production. Vogliamo che questo sito web funzioni nel livello di prezzo Standard.Creare il sito Web di Azure con il livello di prezzo Standard tramite PowerShell

Lo script che ho attualmente crea un nuovo ResourceGroup, piano di hosting e dopo che questi sono stati creati, il sito stesso. Il problema che sto affrontando è che il sito web è sempre in modalità Free. Dovrei essere in grado di risolvere questo problema utilizzando il cmdlet Set-AzureResource, ma questo sta lanciando un messaggio che mi dice che dovrei specificare lo Location. Problema con questo cmdlet specifico non ha un parametro Location.

Set-AzureResource : { 
    "Error": { 
    "Code": "LocationRequired", 
    "Message": "The location property is required for this definition.", 
    "Target": null, 
    "Details": null 
    } 
} 

Questa è la (semplificato) script che sto usando per creare tutte le risorse:

#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 

che ho letto il sito dovrebbe ereditare il sku di hosting specificato piano, quindi non avrei bisogno di aggiornarlo. Questo non sembra funzionare per il mio script sopra. Il piano di hosting è specificato, ma le impostazioni non sono ereditate.

l'hosting proprietà del piano create simile a questa:

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 
        } 

Questo sembra un po 'ok per me. Una volta che il sito è stato creato, queste proprietà sono stampati:

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 
        } 

Come si può vedere, la computeMode, serverfarm, HostingEnvironment e SKU non sono impostati con le proprietà ho impostato nell'oggetto $analyticsSite.

Pertanto, probabilmente ho bisogno di aggiornare la risorsa, ma questo genera l'errore menzionato sopra.

Ho anche provato a utilizzare New-AzureWebsite, utilizzando Troy Hunt's blogpost come esempio. Tuttavia, questo post si basa anche sull'utilizzo dello Set-AzureResource, quindi ricado nello stesso problema. Un altro problema con questo esempio è che non è possibile controllare su quale gruppo di risorse e piano di hosting viene creato il sito che causerà un po 'di problemi durante la ricerca del sito.

risposta

5

Questo è possibile così facilmente nei nuovi cmdlet RM . Assicurarsi di avere prima l'ultima versione di Azure PowerShell.

Per prima cosa creare un piano di servizio app che definisca il livello Prezzo standard, quindi creare un'app Web con il piano di servizio dell'app.

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" 
 
    } 
 
}

Avanti creare il web app con il piano di servizio applicazione come parametro.

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 
 
    } 
 
}

Questo è lo script di lavoro completo che si verifica di lavoro.

$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" 
 
    } 
 
}

+0

ovvia - ora come si distribuisce un sito Web effettivo (dalla directory) in questa AzureRmWebApp? –

+0

@ taras.roshko Vuoi dire da Visual Studio? –

+0

no, utilizzando PS dalla cartella/web-package.zip –

1

Il problema è che hai creato il tuo sito in un piano di servizio di app gratuito predefinito (ovvero Server Farm o Web Hosting Plan - sono tutti la stessa cosa), chiamato "Default1". Tuttavia, il piano del servizio app che si è adattato alle dimensioni standard era diverso da "devHostingPlanWestEU10".

di creare un sito in una utilizzare il seguente comando preesistente Service Plan App:

(diviso in più righe per facilitarne la lettura)

New-AzureResource 
    -Name <YourSiteName> 
    -Location "West US" 
    -ResourceGroupName <YourResourceGroupName> 
    -ApiVersion 2014-11-01 
    -ResourceType "Microsoft.Web/sites" 
    -PropertyObject @{ "serverFarm" = "<Your service plan name>" } 
+0

Grazie per la risposta. Ho davvero provato ad aggiungere la proprietà 'serverFarm', usando' $ analyticsSite = @ {"name" = $ label; "sku" = "Standard"; "webHostingPlan" = $ hostingplan; "serverFarm" = $ hostingplan} ', ma genera un errore indicando che il' serverFarm' specificato non esiste. Nel post di Troy Hunt, sia il piano di hosting che serverfarm sono uguali, come suggerisci anche tu. C'è qualcosa che sto sbagliando durante la creazione del piano di hosting? Non riesco a capire di cosa si tratta ... –

+0

Puoi condividere il comando esatto che stai utilizzando (con tutte le variabili in linea)? Estrai webHostingPlan, sostituisci la variabile $ hostingPlan con il suo contenuto di stringhe. Ciò renderà più semplice il debug della domanda di follow-up –

0

Con la nuova Azure Resource Manager Cmdlet. È possibile creare un nuovo piano di servizio app e passarlo al cmdlet New-AzureRmWebApp.

New-AzureRmAppServicePlan -Name StdPlan -Location < "Location"> -ResourceGroupName < "ResourceGroupName"> - Livello standard

New-AzureRmWebApp -ResourceGroupName < "ResourceGroupName"> - Nome < "WebAppname"> -Location < "Posizione"> -AppServicePlan StdPlan

Riferimento articolo: https://docs.microsoft.com/en-us/azure/app-service-web/app-service-web-app-azure-resource-manager-powershell

Problemi correlati