Övning – Distribuera och exportera ett Azure Logic Apps-arbetsflöde med hjälp av en ARM-mall

Slutförd

I föregående övning distribuerade vi en logikapp med hjälp av en grundläggande Azure Resource Manager-mall. Den här mallen var oflexibel eftersom allt var hårdkodat. Om du till exempel vill ändra arbetsflödets namn eller appens distributionsplats måste du redigera mallen. I scenarier där du har flera distributioner i en skriptmiljö blir det besvärligt att redigera mallen manuellt. En bättre metod är att ange värden som parametrar för att anpassa resursdistribution.

Uppdatera mallen till att använda mallparametrar

  1. Kopiera den grundläggande mall som vi använde i föregående övning med följande cp kommando:

    cp basic-template.json template-with-params.json
    
  2. Öppna mallen i den inbyggda redigeraren med följande code kommando:

    code template-with-params.json
    

    Det första steget är att lägga till parametrar så att vi enkelt kan anpassa appens namn och plats där appen körs.

  3. parameters Ersätt avsnittet i mallen med följande kodfragment, som lägger till två nya parametrar och logicAppNamelocation:

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

    Båda parametrarna är strängar. Vi anger inte något standardvärde för parametern logicAppName , vilket innebär att du måste ange ett vid distributionstillfället. Däremot är det location valfritt eftersom vi anger ett standardvärde.

    Standardvärdet för parametern location är platsen för den resursgrupp som appen distribueras till. Vi hämtar det värdet genom att referera till egenskapen location (plats) från den resursgrupp som returneras av mallfunktionen resourceGroup(). Uttrycken börjar och slutar med vänster respektive höger hakparenteser ([ ]). Uttryckets värde utvärderas när mallen har slutfört distributionen. Ett uttryck kan returnera en sträng, ett heltal, ett booleskt värde, en matris eller ett objekt. I en mall kan du definiera 256 parametrar som maximalt.

    Nu när vi har definierat två nya parametrar använder vi dem i mallen genom att ersätta hårdkodade värden med referenser till de nya parametrarna.

  4. Ersätt fälten name och location i resursavsnittet i mallen för att använda våra nya parametrar enligt följande kodfragment:

    "name": "[parameters('logicAppName')]",
    "location": "[parameters('location')]",
    
  5. Ersätt avsnittet outputs längst ned i mallen med följande kod. Vi uppdaterar värdet logicAppUrl för mallvariabeln för att även använda parametern logicAppName enligt följande kodfragment:

    "outputs": {
        "logicAppUrl": {
           "type": "string",
           "value": "[listCallbackURL(concat(resourceId('Microsoft.Logic/workflows/', parameters('logicAppName')), '/triggers/manual'), '2017-07-01').value]"
        }
     }
    
  6. Spara alla ändringar i template-with-params.json genom att trycka på Ctrl + S.

Distribuera logikappresursen med den parametriserade mallen

Det finns två sätt att ange parametrar till mallen under distribution med hjälp av flaggan --parameters i kommandot az deployment group create. Vi kan skicka en URI för en fjärrparameterfil eller namnet på en lokal fil. Vi använder en lokal fil.

Skapa en JSON-parameterfil

  1. Skapa en ny fil med namnet params.json i den inbyggda kodredigeraren med följande kommando:

    code params.json
    
  2. Klistra in följande JSON i params.json och tryck på Ctrl + S för att spara ändringarna.

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

Verifiera mallen

  1. Från Cloud Shell kör du az deployment group validate för att verifiera mallen:

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

    Argumentet --template-file pekar mot den lokala mallen. Mallens filnamn är template-with-params.json.

    Du ser ett stort JSON-block som utdata, som anger att mallen har godkänt valideringen.

    Azure Resource Manager fyller i mallparametrarna och kontrollerar om mallen skulle köras korrekt i din prenumeration.

    Om verifieringen misslyckades visas en detaljerad beskrivning av felet i utdata.

Distribuera mallen med parametrar från en lokal fil

  1. I Cloud Shell kör du följande kommando för att distribuera logikappresursen med appens namn hämtat från filen params.json . I filen params.json anges inte parametern location , så standardvärdet används.

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

    Distributionen tar en stund och du kan se förloppet på Cloud Shell-kommandoraden. När distributionen är klar bör du se provisioningState i JSON-resultatet med värdet Succeeded.

  2. För att se hur appen fungerar i praktiken letar du upp värdet för logicAppUrl i JSON-resultatet. Välj URL:en eller kopiera och klistra in den i ett nytt webbläsarfönster. På sidan visas meddelandet Hello Azure Logic Apps Template! .

Distribuera mallen med parametrar från kommandoraden

I stället för att redigera en parameterfil varje gång vi vill distribuera från kommandoraden kan vi ange parametrarna i en JSON-sträng på kommandoraden.

  1. Kör följande kommando i Cloud Shell för att distribuera logikappresursen med namnet på appen och dess plats som matas in som en JSON-sträng på kommandoraden:

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

    Distributionen tar en stund och du kan se förloppet på Cloud Shell-kommandoraden. När distributionen är klar bör du se provisioningState i JSON-resultatet med värdet Succeeded.

  2. För att se hur appen fungerar i praktiken letar du upp värdet för logicAppUrl i JSON-resultatet. Välj URL:en och klistra in den i ett nytt webbläsarfönster. På sidan visas meddelandet Hello Azure Logic Apps Template! .

  3. Kör följande kommando för att visa en lista över alla Azure Logic Apps-arbetsflöden som vi har distribuerat hittills:

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

    Det här kommandot visar de tre Azure Logic Apps-arbetsflöden som vi har distribuerat hittills, allt från en mall.

Uppdatera appåtgärden i Azure Resource Manager-mallen

Nu tar vi och gör så att appen åstadkommer mer än att bara skicka tillbaka ett statiskt meddelande till oss. Vi behåller appen som ett HTTP-utlöst arbetsflöde, som fortfarande returnerar ett HTTP-svar. Vi skickar in några värden med begäran och låter appen göra en beräkning åt oss. Vi ska göra en grundläggande områdesberäkning. Förutsatt att de indata vi skickar är höjden och bredden på en rektangel returnerar vi arean. Sedan distribuerar vi den nya appen och ser den köras.

  1. Öppna template-with-params.json i den inbyggda redigeraren genom att köra följande kommando i Cloud Shell:

    code template-with-params.json
    
  2. Lägg till fältet relativePath i indataavsnittet i vår HTTP-begärandeutlösare enligt följande kodfragment:

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

    Posten relativePath anger de parametrar som vi vill att HTTP-slutpunkts-URL:en accepterar. I det här fallet definierar vi två parametrar, width (bredd) och height (höjd). Vi använder dessa parametervärden för att beräkna ett område och returnera resultatet.

  3. Uppdatera brödtexten för åtgärden Svar med följande rad:

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

    Vårt uppdaterade svar utför följande uppgifter:

    • Skriver ut namnet på logikappresursen. Svaret anropar workflow() funktionen för att returnera information om arbetsflödet. Från det resultatet refererar vi till namnegenskapen.

    • Returnerar produkten av heltalsekvivalenter för höjd- och breddsträngsvärdena från URL-parametrarna. Den här uppgiften använder funktionen och int() konverteringsfunktionenmul().

  4. Spara alla ändringar i template-with-params.json genom att trycka på Ctrl + S.

  5. Verifiera mallen efter dessa ändringar med az deployment group validate kommandot i Cloud Shell. I det här exemplet anger vi appens namn till CalculateArea med hjälp av en infogad parameter.

    az deployment group validate \
    --resource-group "<rgn>[sandbox resource group name]</rgn>" \
    --template-file template-with-params.json \
    --parameters '{ "logicAppName": {"value":"CalculateArea"}}'
    
  6. Kör följande kommando för att distribuera ändringarna till en logikapp som heter CalculateArea. Vi utelämnar ett värde för parametern location och använder bara standardvärdet.

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

    Distributionen tar en stund, men du kan titta på förloppet på Cloud Shell-kommandoraden. När distributionen är klar bör du se provisioningState i JSON-resultatet med värdet Succeeded.

  7. För att se hur appen fungerar i praktiken letar du upp värdet för logicAppUrl i JSON-resultatet. Välj URL:en och klistra in den i ett nytt webbläsarfönster.

  8. Uppdatera URL:en i webbläsaren genom att ändra /triggers/manual/paths/invoke?api till /triggers/manual/paths/invoke/{width}/{height}?api, där {width} och {height} är heltalsvärden för bredden och höjden för den area som vi ska beräkna. Exempel: /triggers/manual/paths/invoke/6/7?api Svaret från appen visar namnet på arbetsflödet och det beräknade området, enligt följande skärmbild:

    Sceenshot of web browser displaying response from our app called calculate area.

  9. Kör följande kommando för att visa en lista över alla Azure Logic Apps-arbetsflöden som vi har distribuerat hittills:

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

I den här övningen introducerade vi mer flexibilitet till mallen med parametrar. Vi angav de parametrarna på kommandoraden och med hjälp av en lokal fil. Vi uppdaterade även den åtgärd som vårt enkla arbetsflöde kör genom att direkt ändra body för det svaret som vi skickar tillbaka.

Du kan ladda ned parameterfiler och mallfiler från GitHub med följande curl-kommandon i 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