Esercizio - Distribuire ed esportare un flusso di lavoro di App per la logica di Azure con un modello di ARM

Completato

Nell'esercizio precedente è stata distribuita un'app per la logica tramite un modello di base di Azure Resource Manager. Questo modello non era tuttavia flessibile poiché tutti i valori erano hardcoded. Ad esempio, per modificare il nome del flusso di lavoro o il percorso di distribuzione dell'app, sarebbe stato necessario modificare il modello. Negli scenari che prevedono più distribuzioni in un ambiente con script, la modifica manuale del modello diventa una complicazione. Una soluzione migliore è quella di fornire i valori come parametri in modo da personalizzare la distribuzione delle risorse.

Aggiornare il modello per l'uso di parametri

  1. Copiare il modello di base usato nell'esercizio precedente con il comando cp seguente:

    cp basic-template.json template-with-params.json
    
  2. Aprire il modello nell'editor predefinito con il comando code seguente:

    code template-with-params.json
    

    Il primo passo è aggiungere parametri in modo che sia possibile personalizzare facilmente il nome dell'app e la posizione in cui viene eseguita.

  3. Sostituire la sezione parameters nel modello con il frammento di codice seguente, che aggiunge due nuovi parametri logicAppName e location:

    "parameters": {
        "logicAppName": {
            "type": "string",
            "metadata": {
              "description": "The name of the logic app to create."
            }
          },
        "location": {
        "type": "string",
        "defaultValue": "[resourceGroup().location]",
        "metadata": {
              "description": "Location for all resources."
            }
        }
    },
    

    Entrambi i parametri sono stringhe. Per il parametro logicAppName non viene fornito un valore predefinito ed è pertanto necessario specificarne uno al momento della distribuzione. Al contrario, location è facoltativo perché per questo parametro è impostato un valore predefinito.

    Il valore predefinito per il parametro location corrisponde alla posizione per il gruppo di risorse in cui viene distribuita l'app. Per ottenere questo valore, viene fatto riferimento alla proprietà location dal gruppo di risorse restituito dalla funzione resourceGroup() del modello. Le espressioni iniziano e terminano rispettivamente con parentesi quadre sinistra e destra ([ ]). Il valore dell'espressione viene valutato al termine della distribuzione del modello. Un'espressione può restituire una stringa, un intero, un valore booleano, una matrice o un oggetto. In un modello è possibile definire al massimo 256 parametri.

    Ora che i due nuovi parametri sono stati definiti, sarà possibile usarli nel modello sostituendo i valori hardcoded con i riferimenti ai nuovi parametri.

  4. Sostituire i campi name e location nella sezione resources del modello per usare i nuovi parametri, come illustrato nel frammento di codice seguente:

    "name": "[parameters('logicAppName')]",
    "location": "[parameters('location')]",
    
  5. Sostituire la sezione outputs alla fine del modello con il codice seguente. Il valore della variabile del modello logicAppUrl viene aggiornato in modo da usare anche il parametro logicAppName come illustrato nel frammento di codice seguente:

    "outputs": {
        "logicAppUrl": {
           "type": "string",
           "value": "[listCallbackURL(concat(resourceId('Microsoft.Logic/workflows/', parameters('logicAppName')), '/triggers/manual'), '2017-07-01').value]"
        }
     }
    
  6. Premere Ctrl + S per salvare tutte le modifiche apportate a template-with-params.json.

Distribuire la risorsa dell'app per la logica con il modello con parametri

Esistono due modi per fornire parametri al modello durante la distribuzione usando il flag --parameters nel comando az deployment group create. È possibile passare un URI di un file di parametri remoto o il nome di un file locale. In questo caso verrà usato un file locale.

Creare un file JSON di parametri

  1. Creare un nuovo file denominato params.json nell'editor del codice predefinito con il comando seguente:

    code params.json
    
  2. Incollare il codice JSON seguente in params.json e premere Ctrl + S per salvare le modifiche.

    { 
        "logicAppName": { 
            "value": "myLogicApp" 
        } 
    }
    

Convalidare il modello

  1. In Cloud Shell, eseguire az deployment group validate per convalidare il modello:

    az deployment group validate \
    --resource-group "<rgn>[sandbox resource group name]</rgn>" \
    --template-file template-with-params.json \
    --parameters @params.json
    

    L'argomento --template-file punta al modello locale. Il nome file del modello è template-with-params.json.

    Come output viene restituito un blocco JSON di grandi dimensioni, che indica che il modello ha superato la convalida.

    Azure Resource Manager compila i parametri del modello e verifica che quest'ultimo venga eseguito correttamente nell'abbonamento.

    Se la convalida ha esito negativo, l'output include una descrizione dettagliata dell'errore.

Distribuire un modello con parametri da un file locale

  1. Eseguire il comando seguente in Cloud Shell per distribuire la risorsa app per la logica con il nome dell'app ricavato dal file params.json. Il parametro location non è impostato nel file params.json, pertanto viene usato il valore predefinito.

    az deployment group create \
    --resource-group "<rgn>[sandbox resource group name]</rgn>" \
    --template-file template-with-params.json \
    --parameters @params.json
    

    La distribuzione richiederà alcuni istanti ed è possibile controllare lo stato di avanzamento nella riga di comando di Cloud Shell. Al termine della distribuzione, verrà visualizzato provisioningState nel risultato JSON con il valore Succeeded.

  2. Per visualizzare l'app in azione, trovare il valore logicAppUrl nel risultato JSON. Selezionare l'URL o copiarlo e incollarlo in una nuova finestra del browser. Nella pagina verrà visualizzato il messaggio Hello Azure Logic Apps Template!.

Distribuire un modello con parametri dalla riga di comando

Invece di modificare un file di parametri ogni volta che si vuole procedere alla distribuzione dalla riga di comando, è possibile fornire i parametri in una stringa JSON nella riga di comando.

  1. Eseguire il comando seguente in Cloud Shell per distribuire la risorsa app per la logica con il nome dell'app e la sua posizione specificati come stringa JSON nella riga di comando:

    az deployment group create \
    --resource-group "<rgn>[sandbox resource group name]</rgn>" \
    --template-file template-with-params.json \
    --parameters '{ "logicAppName": {"value":"MyLogicApp2"}, "location": {"value":"East US"}}'
    

    La distribuzione richiederà alcuni istanti ed è possibile controllare lo stato di avanzamento nella riga di comando di Cloud Shell. Al termine della distribuzione, verrà visualizzato provisioningState nel risultato JSON con il valore Succeeded.

  2. Per visualizzare l'app in azione, trovare il valore logicAppUrl nel risultato JSON. Selezionare l'URL e incollarlo in una nuova finestra del browser. Nella pagina verrà visualizzato il messaggio Hello Azure Logic Apps Template!.

  3. Eseguire il comando seguente per elencare tutti i flussi di lavoro di App per la logica di Azure sviluppati finora:

    az resource list \
    --resource-group "<rgn>[sandbox resource group name]</rgn>" \
    --resource-type Microsoft.Logic/workflows \
    --query [*].[name,location] --output tsv
    

    Questo comando elenca i due flussi di lavoro di App per la logica di Azure sviluppati finora, il tutto da un modello.

Aggiornare l'azione dell'app nel modello di Azure Resource Manager

Verrà ora esaminato come l'app non si limiti solo a inviare un messaggio statico in risposta all'utente. L'app verrà mantenuta come flusso di lavoro attivato tramite HTTP, che continuerà a restituire una risposta HTTP. È possibile passare alcuni valori con la richiesta e fare in modo che l'app esegua un calcolo. Verrà eseguito un semplice calcolo dell'area. Supponendo che gli input passati siano l'altezza e la larghezza di un rettangolo, verrà restituita l'area. Si distribuirà quindi la nuova app e ne si osserverà l'esecuzione.

  1. Aprire template-with-params.json nell'editor predefinito eseguendo il comando seguente in Cloud Shell:

    code template-with-params.json
    
  2. Aggiungere il campo relativePath della sezione inputs del trigger di richiesta HTTP come illustrato nel frammento di codice seguente:

    "inputs": {
        "method": "GET",
        "relativePath": "{width}/{height}",
        "schema": {}
    }
    

    La voce relativePath specifica i parametri che si vuole che l'URL dell'endpoint HTTP accetti. In questo caso si definiscono due parametri, width e height. Si useranno i valori di questi parametri per calcolare un'area e restituire il risultato.

  3. Aggiornare il corpo dell'azione Risposta con la riga seguente:

    "body": "Response from @{workflow().name}  Total area = @{mul( int(triggerOutputs()['relativePathParameters']['height'])  , int(triggerOutputs()['relativePathParameters']['width'])  )}",
    

    La risposta aggiornata esegue le attività seguenti:

    • Stampa il nome della risorsa app per la logica. La risposta chiama la funzione workflow() per restituire informazioni sul flusso di lavoro. Da questo risultato, si fa riferimento alla proprietà name.

    • Restituisce il prodotto degli equivalenti interi per i valori delle stringhe di altezza e larghezza dai parametri URL. Questa attività usa la funzione mul() e la funzione di conversione int().

  4. Premere Ctrl + S per salvare tutte le modifiche apportate a template-with-params.json.

  5. Convalidare il modello dopo le modifiche con il comando az deployment group validate in Cloud Shell. In questo esempio viene impostato il nome dell'app su CalculateArea usando un parametro inline.

    az deployment group validate \
    --resource-group "<rgn>[sandbox resource group name]</rgn>" \
    --template-file template-with-params.json \
    --parameters '{ "logicAppName": {"value":"CalculateArea"}}'
    
  6. Eseguire il comando seguente per distribuire le modifiche in un'app per la logica denominata CalculateArea. Si ometterà il valore per il parametro location e si userà solo il valore predefinito.

    az deployment group create \
    --resource-group "<rgn>[sandbox resource group name]</rgn>" \
    --template-file template-with-params.json \
    --parameters '{ "logicAppName": {"value":"CalculateArea"}}'
    

    La distribuzione richiederà alcuni secondi, ma è possibile controllare lo stato di avanzamento nella riga di comando di Cloud Shell. Al termine della distribuzione, verrà visualizzato provisioningState nel risultato JSON con il valore Succeeded.

  7. Per visualizzare l'app in azione, trovare il valore logicAppUrl nel risultato JSON. Selezionare l'URL e incollarlo in una nuova finestra del browser.

  8. Aggiornare l'URL nel browser, modificando /triggers/manual/paths/invoke?api in /triggers/manual/paths/invoke/{width}/{height}?api, dove {width} e {height} sono valori interi per la larghezza e l'altezza dell'area da calcolare. Ad esempio, /triggers/manual/paths/invoke/6/7?api. La risposta proveniente dall'app elencherà il nome del flusso di lavoro e l'area calcolata, come illustrato nello screenshot seguente:

    Screenshot del Web browser che visualizza la risposta dall'app denominata CalculateArea.

    Nota

    Assicurarsi di sostituire solo le parti dell'URL a cui si fa riferimento nel passaggio precedente. Lasciare invariato tutto il testo su entrambi i lati.

  9. Eseguire il comando seguente per elencare tutti i flussi di lavoro di App per la logica di Azure sviluppati finora:

    az resource list \
    --resource-group "<rgn>[sandbox resource group name]</rgn>" \
    --resource-type Microsoft.Logic/workflows \
    --query [*].[name,location] --output tsv
    

In questo esercizio è stata introdotta una maggiore flessibilità per il modello tramite i parametri. Questi parametri sono stati specificati nella riga di comando usando un file locale. È stata inoltre aggiornata l'azione eseguita dal semplice flusso di lavoro, modificando direttamente il body della risposta restituita.

È possibile scaricare i parametri e i file di modello da GitHub con i comandi curl seguenti in Cloud Shell.

curl https://github.com/MicrosoftDocs/mslearn-logic-apps-and-arm-templates/blob/master/calculate-area/params.json > params-final.json
curl https://github.com/MicrosoftDocs/mslearn-logic-apps-and-arm-templates/blob/master/calculate-area/template.json > template-with-params-final.json