Включить / отключить тесты доступности в Azure по расписанию - PullRequest
0 голосов
/ 21 октября 2019

Мне интересно, есть ли простой способ запуска запланированных команд автоматизации в Azure.

Мне удалось написать команду включения / выключения для тестов доступности в

Azure CLI:

az resource update --set properties.enabled=true --name 'someName' --resource-type 'Microsoft.Insights/webtests' --resource-group 'soemResourceGroup'

и

Powershell:

#Get All webTests
$resourceGroupnames = "someGroupName1", "someGroupName2";
$enableTests = "True";

ForEach ($resourceGroupname in $resourceGroupnames) { 
    $resourceGroupname
    $allAvailabilityTestsIds = Get-AzureRmResource -ResourceGroupName $resourceGroupname `
    | Where-Object -Property ResourceType -EQ "microsoft.insights/webtests" `
    | Select-Object -ExpandProperty ResourceId;

    ForEach ($availabilityTestId in $allAvailabilityTestsIds) { 
        $availabilityTest = Get-AzureRmResource -ResourceId $availabilityTestId;
        $availabilityTest.Properties.Enabled = $enableTests;
        $availabilityTest | Set-AzureRmResource -Force;
    }
}

Проблема в том, что я не уверен, что запускать их за пределами линии Comamnd и по расписанию. Я читал, что могу использовать учетную запись Automation для использования сценариев PowerShell, но это кажется кошмаром, так как у меня возникло множество проблем с аутентификацией (не знаю почему).

Это единственный способ?

РЕДАКТИРОВАТЬ: Я публикую ошибку, которую я получил / получаю ниже.

Set-AzureRmResource : Cannot validate argument on parameter 'Sku'. The argument is null or empty. Provide an argument 
that is not null or empty, and then try the command again.
At line:37 char:29
+         $availabilityTest | Set-AzureRmResource -Force;
+                             ~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidData: (Microsoft.Azure...dels.PSResource:PSObject) [Set-AzureRmResource], 
ParameterBindingValidationException
    + FullyQualifiedErrorId : 
ParameterArgumentValidationError,Microsoft.Azure.Commands.ResourceManager.Cmdlets.Implementation.SetAzureResourceCmdlet

Set-AzureRmResource : Cannot validate argument on parameter 'Sku'. The argument is null or empty. Provide an argument 
that is not null or empty, and then try the command again.
At line:37 char:29
+         $availabilityTest | Set-AzureRmResource -Force;
+                             ~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidData: (Microsoft.Azure...dels.PSResource:PSObject) [Set-AzureRmResource], 
ParameterBindingValidationException
    + FullyQualifiedErrorId : 
ParameterArgumentValidationError,Microsoft.Azure.Commands.ResourceManager.Cmdlets.Implementation.SetAzureResourceCmdlet

Set-AzureRmResource : Cannot validate argument on parameter 'Sku'. The argument is null or empty. Provide an argument 
that is not null or empty, and then try the command again.
At line:37 char:29
+         $availabilityTest | Set-AzureRmResource -Force;
+                             ~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidData: (Microsoft.Azure...dels.PSResource:PSObject) [Set-AzureRmResource], 
ParameterBindingValidationException
    + FullyQualifiedErrorId : 
ParameterArgumentValidationError,Microsoft.Azure.Commands.ResourceManager.Cmdlets.Implementation.SetAzureResourceCmdlet

Set-AzureRmResource : Cannot validate argument on parameter 'Sku'. The argument is null or empty. Provide an argument 
that is not null or empty, and then try the command again.
At line:37 char:29
+         $availabilityTest | Set-AzureRmResource -Force;
+                             ~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidData: (Microsoft.Azure...dels.PSResource:PSObject) [Set-AzureRmResource], 
ParameterBindingValidationException
    + FullyQualifiedErrorId : 
ParameterArgumentValidationError,Microsoft.Azure.Commands.ResourceManager.Cmdlets.Implementation.SetAzureResourceCmdlet

Set-AzureRmResource : Cannot validate argument on parameter 'Sku'. The argument is null or empty. Provide an argument 
that is not null or empty, and then try the command again.
At line:37 char:29
+         $availabilityTest | Set-AzureRmResource -Force;
+                             ~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidData: (Microsoft.Azure...dels.PSResource:PSObject) [Set-AzureRmResource], 
ParameterBindingValidationException
    + FullyQualifiedErrorId : 
ParameterArgumentValidationError,Microsoft.Azure.Commands.ResourceManager.Cmdlets.Implementation.SetAzureResourceCmdlet

Set-AzureRmResource : Cannot validate argument on parameter 'Sku'. The argument is null or empty. Provide an argument 
that is not null or empty, and then try the command again.
At line:37 char:29
+         $availabilityTest | Set-AzureRmResource -Force;
+                             ~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidData: (Microsoft.Azure...dels.PSResource:PSObject) [Set-AzureRmResource], 
ParameterBindingValidationException
    + FullyQualifiedErrorId : 
ParameterArgumentValidationError,Microsoft.Azure.Commands.ResourceManager.Cmdlets.Implementation.SetAzureResourceCmdlet

Set-AzureRmResource : Cannot validate argument on parameter 'Sku'. The argument is null or empty. Provide an argument 
that is not null or empty, and then try the command again.
At line:37 char:29
+         $availabilityTest | Set-AzureRmResource -Force;
+                             ~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidData: (Microsoft.Azure...dels.PSResource:PSObject) [Set-AzureRmResource], 
ParameterBindingValidationException
    + FullyQualifiedErrorId : 
ParameterArgumentValidationError,Microsoft.Azure.Commands.ResourceManager.Cmdlets.Implementation.SetAzureResourceCmdlet

С уважением.

1 Ответ

2 голосов
/ 22 октября 2019

Вы можете выполнить описанные ниже шаги, чтобы использовать Azure Runbook в автоматизации для этого.

1. Перейдите в свою учетную запись автоматизации -> Runbooks -> Create a runbook -> создать Powershell runbook.

2. В runbook добавьте скрипт для входа в систему, ваш полный скрипт должен быть таким, как показано ниже. (Перед запуском Runbook убедитесь, что вы импортировали модуль PowerShell AzureRM.Resources и AzureRM.Profile в свою учетную запись автоматизации -> Modules, если нет, в Modules -> Browse Gallery, найдите модули иимпортируйте их.)

$connectionName = "AzureRunAsConnection"
try
{
    # Get the connection "AzureRunAsConnection "
    $servicePrincipalConnection=Get-AutomationConnection -Name $connectionName         

    "Logging in to Azure..."
    Add-AzureRmAccount `
        -ServicePrincipal `
        -TenantId $servicePrincipalConnection.TenantId `
        -ApplicationId $servicePrincipalConnection.ApplicationId `
        -CertificateThumbprint $servicePrincipalConnection.CertificateThumbprint 
}
catch {
    if (!$servicePrincipalConnection)
    {
        $ErrorMessage = "Connection $connectionName not found."
        throw $ErrorMessage
    } else{
        Write-Error -Message $_.Exception
        throw $_.Exception
    }
}

#Get All webTests
$resourceGroupnames = "someGroupName1", "someGroupName2";
$enableTests = "True";

ForEach ($resourceGroupname in $resourceGroupnames) { 
    $resourceGroupname
    $allAvailabilityTestsIds = Get-AzureRmResource -ResourceGroupName $resourceGroupname `
    | Where-Object -Property ResourceType -EQ "microsoft.insights/webtests" `
    | Select-Object -ExpandProperty ResourceId;

    ForEach ($availabilityTestId in $allAvailabilityTestsIds) { 
        $availabilityTest = Get-AzureRmResource -ResourceId $availabilityTestId;
        $availabilityTest.Properties.Enabled = $enableTests;
        $availabilityTest | Set-AzureRmResource -Force;
    }
}

3.После успешного запуска сценария перейдите по этой ссылке Планирование Runbook в Azure Automation , чтобы добавить расписание в свою Runbook.

...