2016-01-31 10 views
6

Zastanawiam się, czy istnieje prosty sposób na całkowite skopiowanie wszystkich kluczowych wartości z ustawień aplikacji jednej aplikacji internetowej do innej, jak widać na poniższym obrazku Mam wiele z tych kluczowych wartości i ręczne wykonywanie tych czynności za każdym razem jest bardzo kłopotliwe.Czy można łatwo kopiować ustawienia aplikacji z jednej aplikacji internetowej na platformę Azure

enter image description here

+0

Czy próbowałeś skorzystać z szablonów ARM? Sprawdź przykład tutaj, gdzie ustawiłem wersję węzła dla mojej witryny: https://github.com/christopheranderson/parse-server-example/blob/master/azuredeploy.json#L99 –

Odpowiedz

7

Można użyć Azure PowerShell. Oto skrypt PowerShell dla ciebie.

try{ 
    $acct = Get-AzureRmSubscription 
} 
catch{ 
    Login-AzureRmAccount 
} 

$myResourceGroup = '<your resource group>' 
$mySite = '<your web app>' 
$myResourceGroup2 = '<another resource group>' 
$mySite2 = '<another web app>' 

$props = (Invoke-AzureRmResourceAction -ResourceGroupName $myResourceGroup ` 
     -ResourceType Microsoft.Web/sites/Config -Name $mySite/appsettings ` 
     -Action list -ApiVersion 2015-08-01 -Force).Properties 

$hash = @{} 
$props | Get-Member -MemberType NoteProperty | % { $hash[$_.Name] = $props.($_.Name) } 

Set-AzureRMWebApp -ResourceGroupName $myResourceGroup2 ` 
     -Name $mySite2 -AppSettings $hash 

Ten skrypt ustawienia kopia aplikacji z $mySite do $mySite2. Jeśli Twoja aplikacja internetowa korzysta z gniazda, dla $props powinieneś użyć następującego polecenia.

$props = (Invoke-AzureRmResourceAction -ResourceGroupName $myResourceGroup ` 
     -ResourceType Microsoft.Web/sites/slots/Config -Name $mySite/$slot/appsettings ` 
     -Action list -ApiVersion 2015-08-01 -Force).Properties 

I użyj Set-AzureRMWebAppSlot zamiast Set-AzureRMWebApp

Set-AzureRMWebAppSlot -ResourceGroupName $myResourceGroup2 ` 
     -Name $mySite2 -Slot $slot -AppSettings $hash 
+0

To jest świetna odpowiedź, jeśli chcesz skopiuj z aktualnej witryny do innej. Jeśli celem jest wdrożenie wielu witryn z tymi samymi ustawieniami, sugerowane podejście polega na użyciu szablonu ARM. –

+0

@Jack Zeng Próbowałem uruchomić twój kod jako runbook, ale dostałem błąd, http://stackoverflow.com/questions/35486796/azure-runbook-powershell-script-to-copy-all-webapp-settings – Xerxes

+0

To jest niesamowite! –

0

Wydaje się, że nie ma mowy, aby dać SetAzureRmWebAppSlot kolejność ustawień, co oznacza, że ​​jest to bezużyteczne stos śmieci. Na szczęście istnieje inny rodzaj powłoki w chmurze.

srcResourceGroup=$1 
srcName=$2 
dstResourceGroup=$3 
dstName=$4 

settingsToBeRemoved=$(az webapp config appsettings list --resource-group $dstResourceGroup --name $dstName | jq '.[] | .name' -r) 

if [[ ! -z $settingsToBeRemoved ]]; then 
    az webapp config appsettings delete --resource-group $dstResourceGroup --name $dstName --setting-names $settingsToBeRemoved > /dev/null 
fi 

settingsToBeCopied=$(az webapp config appsettings list --resource-group $srcResourceGroup --name $srcName | jq '.[] | .name+"="+.value' -r) 

if [[ ! -z $settingsToBeCopied ]]; then 
    az webapp config appsettings set --resource-group $dstResourceGroup --name $dstName --settings $settingsToBeCopied > /dev/null 
fi 

echo "Copied settings from $srcName to $dstName." 
Powiązane problemy