Scenario di Automazione di Azure: uso di tag in formato JSON per creare una pianificazione per l'avvio e l'arresto di una macchina virtuale di AzureAzure Automation scenario: Using JSON-formatted tags to create a schedule for Azure VM startup and shutdown

Spesso i clienti vogliono pianificare l'avvio e l'arresto delle macchine virtuali per ridurre i costi della sottoscrizione o supportare i requisiti aziendali e tecnici.Customers often want to schedule the startup and shutdown of virtual machines to help reduce subscription costs or support business and technical requirements.

Lo scenario seguente consente di configurare l'avvio e l'arresto automatizzati delle macchine virtuali usando un tag denominato Schedule a livello di gruppo di risorse o di macchina virtuale in Azure.The following scenario enables you to set up automated startup and shutdown of your VMs by using a tag called Schedule at a resource group level or virtual machine level in Azure. Questa pianificazione può essere configurata da domenica a sabato con un orario di avvio e un orario di arresto.This schedule can be configured from Sunday to Saturday with a startup time and shutdown time.

Sono disponibili opzioni predefinite.We do have some out-of-the-box options. Sono state illustrate le seguenti operazioni:These include:

  • Set di scalabilità di macchine virtuali con impostazioni di ridimensionamento automatico che consentono di aumentare o ridurre il numero di istanze.Virtual machine scale sets with autoscale settings that enable you to scale in or out.
  • DevTest Labs , un servizio con funzionalità predefinite per la pianificazione di operazioni di avvio e arresto.DevTest Labs service, which has the built-in capability of scheduling startup and shutdown operations.

Queste opzioni supportano tuttavia solo scenari specifici e non possono essere applicate alle macchine virtuali di tipo infrastruttura distribuita come servizio (IaaS).However, these options only support specific scenarios and cannot be applied to infrastructure-as-a-service (IaaS) VMs.

Quando il tag Schedule viene applicato a un gruppo di risorse, viene applicato anche a tutte le macchine virtuali all'interno di quel gruppo di risorse.When the Schedule tag is applied to a resource group, it's also applied to all virtual machines inside that resource group. Se una pianificazione viene applicata direttamente anche a una macchina virtuale, l'ultima pianificazione avrà la precedenza nell'ordine seguente:If a schedule is also directly applied to a VM, the last schedule takes precedence in the following order:

  1. Pianificazione applicata a un gruppo di risorseSchedule applied to a resource group
  2. Pianificazione applicata a un gruppo di risorse e a una macchina virtuale nel gruppo di risorseSchedule applied to a resource group and virtual machine in the resource group
  3. Pianificazione applicata a una macchina virtualeSchedule applied to a virtual machine

Fondamentalmente, questo scenario accetta una stringa JSON con un formato specificato, che viene aggiunta come valore per il tag denominato Schedule.This scenario essentially takes a JSON string with a specified format and adds it as the value for a tag called Schedule. Un runbook elenca quindi tutti i gruppi di risorse e le macchine virtuali e identifica le pianificazioni per ogni macchina virtuale in base agli scenari elencati in precedenza.Then a runbook lists all resource groups and virtual machines and identifies the schedules for each VM based on the scenarios listed earlier. Successivamente scorre in ciclo le macchine virtuali con pianificazioni associate e valuta l'azione che deve essere eseguita.Next it loops through the VMs that have schedules attached and evaluates what action should be taken. Ad esempio, determina quali macchine virtuali devono essere interrotte, arrestate o ignorate.For example, it determines which VMs need to be stopped, shut down, or ignored.

Questi runbook eseguono l'autenticazione con l'account RunAs di Azure.These runbooks authenticate by using the Azure Run As account.

Scaricare i runbook per lo scenarioDownload the runbooks for the scenario

Questo scenario è costituito da quattro runbook del flusso di lavoro PowerShell scaricabili dalla Raccolta TechNet o dal repository GitHub per questo progetto.This scenario consists of four PowerShell Workflow runbooks that you can download from the TechNet Gallery or the GitHub repository for this project.

RunbookRunbook DescrizioneDescription
Test-ResourceScheduleTest-ResourceSchedule Controlla la pianificazione di ogni macchina virtuale ed esegue l'arresto o l'avvio delle macchine virtuali in base alla pianificazione.Checks each virtual machine schedule and performs shutdown or startup depending on the schedule.
Add-ResourceScheduleAdd-ResourceSchedule Aggiunge il tag Schedule a una macchina virtuale o a un gruppo di risorse.Adds the Schedule tag to a VM or resource group.
Update-ResourceScheduleUpdate-ResourceSchedule Modifica il tag Schedule esistente sostituendolo con uno nuovo.Modifies the existing Schedule tag by replacing it with a new one.
Remove-ResourceScheduleRemove-ResourceSchedule Rimuove il tag Schedule da una macchina virtuale o da un gruppo di risorse.Removes the Schedule tag from a VM or resource group.

Installare e configurare lo scenarioInstall and configure this scenario

Installare e pubblicare i runbookInstall and publish the runbooks

Dopo aver scaricato i runbook, è possibile importarli seguendo la procedura descritta in Creazione o importazione di un runbook in Automazione di Azure.After downloading the runbooks, you can import them by using the procedure in Creating or importing a runbook in Azure Automation. Pubblicare ogni runbook dopo averlo importato correttamente nell'account di automazione.Publish each runbook after it has been successfully imported into your Automation account.

Aggiungere una pianificazione al runbook Test-ResourceScheduleAdd a schedule to the Test-ResourceSchedule runbook

Seguire questa procedura per abilitare la pianificazione per il runbook Test-ResourceSchedule.Follow these steps to enable the schedule for the Test-ResourceSchedule runbook. Questo è il runbook che verifica quali macchine virtuali devono essere avviate, arrestare o lasciate invariate.This is the runbook that verifies which virtual machines should be started, shut down, or left as is.

  1. Nel portale di Azure aprire l'account di automazione e fare clic sul riquadro Runbook .From the Azure portal, open your Automation account, and then click the Runbooks tile.
  2. Nel pannello Test-ResourceSchedule fare clic sul riquadro Pianificazioni.On the Test-ResourceSchedule blade, click the Schedules tile.
  3. Nel pannello Pianificazioni fare clic su Aggiungi pianificazione.On the Schedules blade, click Add a schedule.
  4. Nel pannello Pianificazioni selezionare Collegare una pianificazione al runbook.On the Schedules blade, select Link a schedule to your runbook. Selezionare quindi Crea una nuova pianificazione.Then select Create a new schedule.
  5. Nel pannello Nuova pianificazione digitare il nome della pianificazione, ad esempio HourlyExecution.On the New schedule blade, type in the name of this schedule, for example: HourlyExecution.
  6. Per la voce della pianificazione Avviaimpostare l'ora di inizio su un incremento di ora.For the schedule Start, set the start time to an hour increment.
  7. Selezionare Ricorrenza e quindi in Ricorre ogni (intervallo) selezionare 1 ora.Select Recurrence, and then for Recur every interval, select 1 hour.
  8. Verificare che l'opzione Imposta scadenza sia impostata su No e quindi fare clic su Crea per salvare la nuova pianificazione.Verify that Set expiration is set to No, and then click Create to save your new schedule.
  9. Nel pannello delle opzioni Pianifica runbook selezionare Parametri e impostazioni di esecuzione.On the Schedule Runbook options blade, select Parameters and run settings. Nel pannello Parametri di Test-ResourceSchedule immettere il nome della sottoscrizione nel campo SubscriptionName.In the Test-ResourceSchedule Parameters blade, enter the name of your subscription in the SubscriptionName field. Questo è l'unico parametro obbligatorio per il runbook.This is the only parameter that's required for the runbook. Al termine, fare clic su OK.When you're finished, click OK.

Una volta completata, la pianificazione del runbook avrà un aspetto simile alla seguente:The runbook schedule should look like the following when it's completed:

Runbook Test-ResourceSchedule configurato

Formattare la stringa JSONFormat the JSON string

Fondamentalmente, questa soluzione accetta una stringa JSON con un formato specificato, che viene aggiunta come valore per il tag denominato Schedule.This solution basically takes a JSON string with a specified format and adds it as the value for a tag called Schedule. Un runbook elenca quindi tutti i gruppi di risorse e le macchine virtuali e identifica le pianificazioni per ogni macchina virtuale.Then a runbook lists all resource groups and virtual machines and identifies the schedules for each virtual machine.

Il runbook scorre in ciclo le macchine virtuali con pianificazioni associate e valuta le azioni che devono essere eseguite.The runbook loops over the virtual machines that have schedules attached and checks what actions should be taken. Di seguito è riportato un esempio di come devono essere formattate le soluzioni:The following is an example of how the solutions should be formatted:

{
    "TzId": "Eastern Standard Time",
    "0": {
        "S": "11",
        "E": "17"
    },
    "1": {
        "S": "9",
        "E": "19"
    },
    "2": {
        "S": "9",
        "E": "19"
    },
}

Ecco alcune informazioni dettagliate su questa struttura:Here is some detailed information about this structure:

  1. Il formato di questa struttura JSON è ottimizzato per aggirare il limite di 256 caratteri del valore di un singolo tag in Azure.The format of this JSON structure is optimized to work around the 256-character limitation of a single tag value in Azure.
  2. TzId rappresenta il fuso orario della macchina virtuale.TzId represents the time zone of the virtual machine. Questo ID può essere ottenuto usando la classe TimeZoneInfo .NET in una sessione di PowerShell[System.TimeZoneInfo]::GetSystemTimeZones().This ID can be obtained by using the TimeZoneInfo .NET class in a PowerShell session--[System.TimeZoneInfo]::GetSystemTimeZones().

    GetSystemTimeZones in PowerShell

    • I giorni della settimana sono rappresentati da un valore numerico da 0 a 6.Weekdays are represented with a numeric value of zero to six. Il valore zero corrisponde a domenica.The value zero equals Sunday.
    • L'ora di inizio è rappresentata dall'attributo S e dal relativo valore nel formato di 24 ore.The start time is represented with the S attribute, and its value is in a 24-hour format.
    • L'ora di fine o di arresto è rappresentata dall'attributo E e dal relativo valore nel formato di 24 ore.The end or shutdown time is represented with the E attribute, and its value is in a 24-hour format.

      Se il valore degli attributi S ed E è zero (0), lo stato della macchina virtuale rimarrà invariato al momento della valutazione.If the S and E attributes each have a value of zero (0), the virtual machine will be left in its present state at the time of evaluation.

  3. Se si vuole ignorare la valutazione per un giorno specifico della settimana, non aggiungere la sezione per quel giorno della settimana.If you want to skip evaluation for a specific day of the week, don’t add a section for that day of the week. Nell'esempio seguente verrà valutato solo il lunedì, mentre gli altri giorni della settimana saranno ignorati:In the following example, only Monday is evaluated, and the other days of the week are ignored:

    {
        "TzId": "Eastern Standard Time",
        "1": {
            "S": "11",
            "E": "17"
        }
    }
    

Aggiungere tag a gruppi di risorse o macchine virtualiTag resource groups or VMs

Per arrestare le macchine virtuali, è necessario aggiungere un tag alle macchine virtuali o ai gruppi di risorse in cui si trovano.To shut down VMs, you need to tag either the VMs or the resource groups in which they're located. Le macchine virtuali che non hanno un tag Schedule non vengono valutate.Virtual machines that don't have a Schedule tag are not evaluated. Di conseguenza, non vengono avviate né arrestate.Therefore, they aren't started or shut down.

Esistono due modi per aggiungere tag a gruppi di risorse o macchine virtuali con questa soluzione.There are two ways to tag resource groups or VMs with this solution. È possibile farlo direttamente nel portale di AzureYou can do it directly from the portal. oppure usare i runbook Add-ResourceSchedule, Update-ResourceSchedule e Remove-ResourceSchedule.Or you can use the Add-ResourceSchedule, Update-ResourceSchedule, and Remove-ResourceSchedule runbooks.

Aggiungere tag tramite il portaleTag through the portal

Seguire questa procedura per aggiungere un tag a una macchina virtuale o a un gruppo di risorse nel portale:Follow these steps to tag a virtual machine or resource group in the portal:

  1. Rendere flat la stringa JSON e verificare che non siano presenti spazi.Flatten the JSON string and verify that there aren't any spaces. La stringa JSON dovrebbe avere un aspetto simile al seguente:Your JSON string should look like this:

    {"TzId":"Eastern Standard Time","0":{"S":"11","E":"17"},"1":{"S":"9","E":"19"},"2": {"S":"9","E":"19"},"3":{"S":"9","E":"19"},"4":{"S":"9","E":"19"},"5":{"S":"9","E":"19"},"6":{"S":"11","E":"17"}}
    
  2. Selezionare l'icona Tag di una macchina virtuale o un gruppo di risorse per applicare questa pianificazione.Select the Tag icon for a VM or resource group to apply this schedule.

    Opzione per i tag delle VM

  3. I tag vengono definiti in base a una coppia chiave/valore.Tags are defined following a key/value pair. Digitare Pianificazione nel campo Chiave e quindi incollare la stringa JSON nel campo Valore.Type Schedule in the Key field, and then paste the JSON string into the Value field. Fare clic su Salva.Click Save. Il nuovo tag verrà visualizzato nell'elenco dei tag per la risorsa.Your new tag should now appear in the list of tags for your resource.

    Tag di pianificazione delle VM

Aggiungere tag da PowerShellTag from PowerShell

Tutti i runbook importati contengono informazioni della Guida all'inizio dello script che descrivono come eseguirli direttamente da PowerShell.All imported runbooks contain help information at the beginning of the script that describes how to execute the runbooks directly from PowerShell. È possibile chiamare i runbook Add-ScheduleResource e Update-ScheduleResource da PowerShell.You can call the Add-ScheduleResource and Update-ScheduleResource runbooks from PowerShell. A questo scopo, passare i parametri necessari che consentono di creare o aggiornare il tag Schedule in un macchina virtuale o un gruppo di risorse all'esterno del portale.You do this by passing required parameters that enable you to create or update the Schedule tag on a VM or resource group outside of the portal.

Per creare, aggiungere ed eliminare i tag tramite PowerShell, è prima necessario configurare l'ambiente PowerShell per Azure.To create, add, and delete tags through PowerShell, you first need to set up your PowerShell environment for Azure. Al termine della configurazione, è possibile procedere con i passaggi seguenti.After you complete the setup, you can proceed with the following steps.

Creare un tag di pianificazione con PowerShellCreate a schedule tag with PowerShell

  1. Aprire una sessione di PowerShell.Open a PowerShell session. Usare quindi l'esempio seguente per autenticarsi con l'account RunAs e specificare una sottoscrizione:Then use the following example to authenticate with your Run As account and to specify a subscription:

    $Conn = Get-AutomationConnection -Name AzureRunAsConnection
    Add-AzureRMAccount -ServicePrincipal -Tenant $Conn.TenantID `
    -ApplicationId $Conn.ApplicationID -CertificateThumbprint $Conn.CertificateThumbprint
    Select-AzureRmSubscription -SubscriptionName "MySubscription"
    
  2. Definire una tabella hash di pianificazione.Define a schedule hash table. Di seguito è riportato un esempio di come dovrebbe essere costruita:Here is an example of how it should be constructed:

    $schedule= @{ "TzId"="Eastern Standard Time"; "0"= @{"S"="11";"E"="17"};"1"= @{"S"="9";"E"="19"};"2"= @{"S"="9";"E"="19"};"3"= @{"S"="9";"E"="19"};"4"= @{"S"="9";"E"="19"};"5"= @{"S"="9";"E"="19"};"6"= @{"S"="11";"E"="17"}}
    
  3. Definire i parametri richiesti dal runbook.Define the parameters that are required by the runbook. Nell'esempio seguente, la destinazione è una VM:In the following example, we are targeting a VM:

    $params = @{"SubscriptionName"="MySubscription";"ResourceGroupName"="ResourceGroup01"; "VmName"="VM01";"Schedule"=$schedule}
    

    Se si sta aggiungendo un tag a un gruppo di risorse, rimuovere il parametro VMName dalla tabella hash $params come segue:If you’re tagging a resource group, remove the VMName parameter from the $params hash table as follows:

    $params = @{"SubscriptionName"="MySubscription";"ResourceGroupName"="ResourceGroup01"; "Schedule"=$schedule}
    
  4. Eseguire il runbook Add-ResourceSchedule con i parametri seguenti per creare il tag Schedule:Run the Add-ResourceSchedule runbook with the following parameters to create the Schedule tag:

    Start-AzureRmAutomationRunbook -Name "Add-ResourceSchedule" -Parameters $params `
    -AutomationAccountName "AutomationAccount" -ResourceGroupName "ResourceGroup01"
    
  5. Per aggiornare un tag di una macchina virtuale o un gruppo di risorse, eseguire il runbook Update-ResourceSchedule con i parametri seguenti:To update a resource group or virtual machine tag, execute the Update-ResourceSchedule runbook with the following parameters:

    Start-AzureRmAutomationRunbook -Name "Update-ResourceSchedule" -Parameters $params `
    -AutomationAccountName "AutomationAccount" -ResourceGroupName "ResourceGroup01"
    

Rimuovere un tag di pianificazione con PowerShellRemove a schedule tag with PowerShell

  1. Aprire una sessione di PowerShell, eseguire il codice seguente per autenticarsi con l'account RunAs e quindi selezionare e specificare una sottoscrizione:Open a PowerShell session and run the following to authenticate with your Run As account and to select and specify a subscription:

    Conn = Get-AutomationConnection -Name AzureRunAsConnection
    Add-AzureRMAccount -ServicePrincipal -Tenant $Conn.TenantID `
    -ApplicationId $Conn.ApplicationID -CertificateThumbprint $Conn.CertificateThumbprint
    Select-AzureRmSubscription -SubscriptionName "MySubscription"
    
  2. Definire i parametri richiesti dal runbook.Define the parameters that are required by the runbook. Nell'esempio seguente, la destinazione è una VM:In the following example, we are targeting a VM:

    $params = @{"SubscriptionName"="MySubscription";"ResourceGroupName"="ResourceGroup01";"VmName"="VM01"}
    

    Se si sta rimuovendo un tag da un gruppo di risorse, rimuovere il parametro VMName dalla tabella hash $params come segue:If you’re removing a tag from a resource group, remove the VMName parameter from the $params hash table as follows:

    $params = @{"SubscriptionName"="MySubscription";"ResourceGroupName"="ResourceGroup01"}
    
  3. Per rimuovere il tag Schedule, eseguire il runbook Remove-ResourceSchedule:Execute the Remove-ResourceSchedule runbook to remove the Schedule tag:

    Start-AzureRmAutomationRunbook -Name "Remove-ResourceSchedule" -Parameters $params `
    -AutomationAccountName "AutomationAccount" -ResourceGroupName "ResourceGroup01"
    
  4. Per aggiornare un tag di una macchina virtuale o un gruppo di risorse, eseguire il runbook Remove-ResourceSchedule con i parametri seguenti:To update a resource group or virtual machine tag, execute the Remove-ResourceSchedule runbook with the following parameters:

    Start-AzureRmAutomationRunbook -Name "Remove-ResourceSchedule" -Parameters $params `
    -AutomationAccountName "AutomationAccount" -ResourceGroupName "ResourceGroup01"
    

Nota

È consigliabile monitorare proattivamente questi runbook, e lo stato della macchina virtuale, per verificare che le macchine virtuali vengano arrestate e avviate di conseguenza.We recommend that you proactively monitor these runbooks (and the virtual machine states) to verify that your virtual machines are being shut down and started accordingly.

È possibile visualizzare i dettagli del processo del runbook Test-ResourceSchedule nel portale di Azure selezionando il riquadro Processi del runbook stesso.To view the details of the Test-ResourceSchedule runbook job in the Azure portal, select the Jobs tile of the runbook. Nel riepilogo del processo saranno visualizzati i parametri di input e il flusso di output, oltre alle informazioni generali sul processo e alle eventuali eccezioni che si sono verificate.The job summary displays the input parameters and the output stream, in addition to general information about the job and any exceptions if they occurred.

Il Riepilogo processi include i messaggi dai flussi di output, di avviso e di errore.The Job Summary includes messages from the output, warning, and error streams. Selezionare il riquadro Output per visualizzare i risultati dettagliati dell'esecuzione del runbook.Select the Output tile to view detailed results from the runbook execution.

Output di Test-ResourceSchedule

Passaggi successiviNext steps