Dela via


Översikt: Automatisera distributionen för Azure Logic Apps med hjälp av Azure Resource Manager-mallar

Gäller för: Azure Logic Apps (förbrukning)

När du är redo att automatisera skapandet och distributionen av logikappen kan du expandera logikappens underliggande arbetsflödesdefinition till en Azure Resource Manager-mall. Den här mallen definierar infrastruktur, resurser, parametrar och annan information för etablering och distribution av logikappen. Genom att definiera parametrar för värden som varierar vid distribution, även kallat parameterisering, kan du upprepade gånger och konsekvent distribuera logikappar baserat på olika distributionsbehov.

Om du till exempel distribuerar till miljöer för utveckling, testning och produktion använder du förmodligen olika niska veze för varje miljö. Du kan deklarera mallparametrar som accepterar olika niska veze och sedan lagra dessa strängar i en separat parameterfil. På så sätt kan du ändra dessa värden utan att behöva uppdatera och distribuera om mallen. För scenarier där du har parametervärden som är känsliga eller måste skyddas, till exempel lösenord och hemligheter, kan du lagra dessa värden i Azure Key Vault och låta parameterfilen hämta dessa värden. Men i dessa scenarier distribuerar du om för att hämta de aktuella värdena.

Den här översikten beskriver attributen i en Resource Manager-mall som innehåller en arbetsflödesdefinition för logikappen. Både mallen och arbetsflödesdefinitionen använder JSON-syntax, men det finns vissa skillnader eftersom arbetsflödesdefinitionen också följer schemat arbetsflödesdefinitionsspråk. Till exempel skiljer sig malluttryck och arbetsflödesdefinitionsuttryck åt i hur de refererar till parametrar och de värden som de kan acceptera.

Dricks

Det enklaste sättet att få en giltig parameteriserad logikappmall som mestadels är redo för distribution är att använda Visual Studio (kostnadsfri Community Edition eller senare) och Azure Logic Apps Tools för Visual Studio. Sedan kan du antingen skapa logikappen i Visual Studio eller hitta och ladda ned en befintlig logikapp från Azure till Visual Studio.

Du kan också skapa logikappmallar med hjälp av Azure PowerShell med modulen LogicAppTemplate.

Exempellogikappen i det här avsnittet använder en Office 365 Outlook-utlösare som utlöses när ett nytt e-postmeddelande tas emot och en Azure Blob Storage-åtgärd som skapar en blob för e-posttexten och laddar upp blobben till en Azure Storage-container. Exemplen visar också hur du parameteriserar värden som varierar vid distribution.

Mer information om Resource Manager-mallar finns i följande avsnitt:

Information om mallresurser som är specifik för logikappar, integrationskonton, integrationskontotefakter och integrationstjänstmiljöer finns i Resurstyper för Microsoft.Logic.

Exempel på logikappmallar finns i följande exempel:

För LOGIC Apps REST API börjar du med översikten över REST API:et för Azure Logic Apps.

Mallstruktur

På den översta nivån följer en Resource Manager-mall den här strukturen, som beskrivs fullständigt i mallstrukturen och syntaxavsnittet för Azure Resource Manager:

{
   "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
   "contentVersion": "1.0.0.0",
   "parameters": {},
   "variables": {},
   "functions": [],
   "resources": [],
   "outputs": {}
}

För en logikappmall arbetar du främst med dessa mallobjekt:

Attribut beskrivning
parameters Deklarerar mallparametrarna för att acceptera de värden som ska användas när du skapar och anpassar resurser för distribution i Azure. Dessa parametrar accepterar till exempel värdena för logikappens namn och plats, anslutningar och andra resurser som krävs för distributionen. Du kan lagra dessa parametervärden i en parameterfil, som beskrivs senare i det här avsnittet. Allmän information finns i Parametrar – Resource Manager-mallstruktur och syntax.
resources Definierar de resurser som ska skapas eller uppdateras och distribueras till en Azure-resursgrupp, till exempel din logikapp, anslutningar, Azure Storage-konton och så vidare. Allmän information finns i Resurser – Resource Manager-mallstruktur och syntax.

Logikappmallen använder det här filnamnsformatet:

<logic-app-name>.json

Viktigt!

Mallsyntaxen är skiftlägeskänslig, så se till att du använder konsekvent hölje.

Mallparametrar

En logikappmall har flera parameters objekt som finns på olika nivåer och som utför olika funktioner. På den översta nivån kan du till exempel deklarera mallparametrar för de värden som ska accepteras och användas vid distribution när du skapar och distribuerar resurser i Azure, till exempel:

  • Din logikapp

  • Anslutningar som logikappen använder för att få åtkomst till andra tjänster och system via hanterade anslutningsappar

  • Andra resurser som logikappen behöver för distribution

    Om logikappen till exempel använder ett integreringskonto för B2B-scenarier (business-to-business) deklarerar mallens objekt på den översta nivån parameters parametern som accepterar resurs-ID:t för det integrationskontot.

Här är den allmänna strukturen och syntaxen för en parameterdefinition, som beskrivs fullständigt av Parametrar – Resource Manager-mallstruktur och syntax:

"<parameter-name>": {
   "type": "<parameter-type>",
   "defaultValue": <default-parameter-value>,
   <other-parameter-attributes>,
   "metadata": {
      "description": "<parameter-description>"
   }
},

Det här exemplet visar bara mallparametrarna för de värden som används för att skapa och distribuera dessa resurser i Azure:

  • Namn och plats för logikappen
  • ID som ska användas för ett integrationskonto som är länkat till logikappen
{
   "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
   "contentVersion": "1.0.0.0",
   // Template parameters
   "parameters": {
      "LogicAppName": {
         "type": "string",
         "minLength": 1,
         "maxLength": 80,
         "defaultValue": "MyLogicApp",
         "metadata": {
            "description": "The resource name for the logic app"
         }
      },
      "LogicAppLocation": {
         "type": "string",
         "minLength": 1,
         "defaultValue": "[resourceGroup().location]",
         "metadata": {
            "description": "The resource location for the logic app"
         }
      },
      "LogicAppIntegrationAccount": {
         "type":"string",
         "minLength": 1,
         "defaultValue": "/subscriptions/<Azure-subscription-ID>/resourceGroups/fabrikam-integration-account-rg/providers/Microsoft.Logic/integrationAccounts/fabrikam-integration-account",
         "metadata": {
            "description": "The ID to use for the integration account"
         }
      }
   },
   "variables": {},
   "functions": [],
   "resources": [],
   "outputs": {}
}

Förutom parametrar som hanterar värden som är känsliga eller måste skyddas, till exempel användarnamn, lösenord och hemligheter, innehåller defaultValue alla dessa parametrar attribut, men i vissa fall är standardvärdena tomma värden. De distributionsvärden som ska användas för dessa mallparametrar tillhandahålls av exempelparametrar som beskrivs senare i det här avsnittet.

Mer information om hur du skyddar mallparametrar finns i följande avsnitt:

Andra mallobjekt refererar ofta till mallparametrar så att de kan använda de värden som passerar genom mallparametrar, till exempel:

  • Mallens resursobjekt, som beskrivs senare i det här avsnittet, definierar varje resurs i Azure som du vill skapa och distribuera, till exempel logikappens resursdefinition. Dessa resurser använder ofta mallparametervärden, till exempel logikappens namn, plats och anslutningsinformation.

  • På en djupare nivå i logikappens resursdefinition deklarerar arbetsflödesdefinitionens parameterobjekt parametrar för de värden som ska användas vid logikappens körning. Du kan till exempel deklarera parametrar för arbetsflödesdefinitioner för användarnamnet och lösenordet som en HTTP-utlösare använder för autentisering. Om du vill ange värden för parametrar för arbetsflödesdefinition använder du objektet parameters som är utanför arbetsflödesdefinitionen men som fortfarande finns i logikappens resursdefinition. I det här yttre parameters objektet kan du referera till tidigare deklarerade mallparametrar, som kan acceptera värden vid distribution från en parameterfil.

När du refererar till parametrar använder malluttryck och funktioner olika syntax och beter sig annorlunda än arbetsflödesdefinitionsuttryck och funktioner. Mer information om dessa skillnader finns i Referenser till parametrar senare i det här avsnittet.

Metodtips – mallparametrar

Här följer några metodtips för att definiera parametrar:

  • Deklarera endast parametrar för värden som varierar beroende på dina distributionsbehov. Deklarera inte parametrar för värden som förblir desamma för olika distributionskrav.

  • defaultValue Inkludera attributet, som kan ange tomma värden, för alla parametrar förutom värden som är känsliga eller måste skyddas. Använd alltid skyddade parametrar för användarnamn, lösenord och hemligheter. Om du vill dölja eller skydda känsliga parametervärden följer du anvisningarna i följande avsnitt:

  • Om du vill skilja mallparameternamn från parameternamn för arbetsflödesdefinition kan du använda beskrivande mallparameternamn, till exempel: TemplateFabrikamPassword

Fler metodtips för mallar finns i Metodtips för mallparametrar.

Fil med mallparametrar

Om du vill ange värden för mallparametrar lagrar du dessa värden i en parameterfil. På så sätt kan du använda olika parameterfiler baserat på dina distributionsbehov. Här är filnamnsformatet som ska användas:

  • Filnamn för logikappsmall: <logic-app-name.json>
  • Filnamn för parametrar: <logic-app-name.parameters.json>

Här är strukturen i parameterfilen, som innehåller en key vault-referens för att skicka ett skyddat parametervärde med Azure Key Vault:

{
   "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
   "contentVersion": "1.0.0.0",
   // Template parameter values
   "parameters": {
      "<parameter-name-1>": {
         "value": "<parameter-value>"
      },
      "<parameter-name-2>": {
         "value": "<parameter-value>"
      },
      "<secured-parameter-name>": {
         "reference": {
            "keyVault": {
               "id": "/subscriptions/<Azure-subscription-ID>/resourceGroups/<Azure-resource-group-name>/Microsoft.KeyVault/vaults/<key-vault-name>"
            },
            "secretName: "<secret-name>"
         }
      },
      <other-parameter-values>
   }
}

Den här exempelparametrarfilen anger värdena för mallparametrarna som deklarerats tidigare i det här avsnittet:

{
   "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
   "contentVersion": "1.0.0.0",
   // Template parameter values
   "parameters": {
      "LogicAppName": {
         "value": "Email-Processor-Logic-App"
      },
      "LogicAppLocation": {
         "value": "westeurope"
      }
   }
}

Mallresurser

Mallen har ett resources objekt, som är en matris som innehåller definitioner för varje resurs som ska skapas och distribueras i Azure, till exempel logikappens resursdefinition, anslutningsresursdefinitioner och andra resurser som logikappen behöver för distribution.

{
   "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
   "contentVersion": "1.0.0.0",
   "parameters": {<template-parameters>},
   "variables": {},
   "functions": [],
   "resources": [
      {
         <logic-app-resource-definition>
      },
      // Start connection resource definitions
      {
         <connection-resource-definition-1>
      },
      {
         <connection-resource-definition-2>
      }
   ],
   "outputs": {}
}

Kommentar

Mallar kan innehålla resursdefinitioner för flera logikappar, så se till att alla dina logikappresurser anger samma Azure-resursgrupp. När du distribuerar mallen till en Azure-resursgrupp med hjälp av Visual Studio uppmanas du att ange vilken logikapp som du vill öppna. Ditt Azure-resursgruppsprojekt kan också innehålla mer än en mall, så se till att du väljer rätt parameterfil när du uppmanas att göra det.

Visa resursdefinitioner

Om du vill granska resursdefinitionerna för alla resurser i en Azure-resursgrupp laddar du ned logikappen från Azure till Visual Studio, vilket är det enklaste sättet att skapa en giltig parameteriserad logikappmall som mestadels är redo för distribution.

Allmän information om mallresurser och deras attribut finns i följande avsnitt:

Resursdefinition för logikapp

Logikappens definition av arbetsflödesresursen i en mall börjar med properties objektet, som innehåller följande information:

  • Logikappens tillstånd vid distribution
  • ID:t för alla integrationskonton som används av logikappen
  • Logikappens arbetsflödesdefinition
  • Ett parameters objekt som anger vilka värden som ska användas vid körning
  • Annan resursinformation om logikappen, till exempel namn, typ, plats, eventuella inställningar för körningskonfiguration och så vidare
{
   "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
   "contentVersion": "1.0.0.0",
   "parameters": {<template-parameters>},
   "variables": {},
   "functions": [],
   "resources": [
      {
         // Start logic app resource definition
         "properties": {
            "state": "<Enabled or Disabled>",
            "integrationAccount": {
               "id": "[parameters('LogicAppIntegrationAccount')]" // Template parameter reference
            },
            "definition": {<workflow-definition>},
            "parameters": {<workflow-definition-parameter-values>},
            "accessControl": {},
            "runtimeConfiguration": {}
         },
         "name": "[parameters('LogicAppName')]", // Template parameter reference
         "type": "Microsoft.Logic/workflows",
         "location": "[parameters('LogicAppLocation')]", // Template parameter reference
         "tags": {
           "displayName": "LogicApp"
         },
         "apiVersion": "2019-05-01",
         "dependsOn": [
         ]
      }
      // End logic app resource definition
   ],
   "outputs": {}
}

Här är de attribut som är specifika för din logikapps resursdefinition:

Attribut Obligatoriskt Type Beskrivning
state Ja String Logikappens tillstånd vid distributionen innebär Enabled att logikappen är live och Disabled innebär att logikappen är inaktiv. Om du till exempel inte är redo att använda logikappen live men vill distribuera en utkastversion kan du använda alternativet Disabled .
integrationAccount Nej Objekt Om logikappen id använder ett integrationskonto som lagrar artefakter för B2B-scenarier (business-to-business) innehåller det här objektet attributet som anger ID:t för integrationskontot.
definition Ja Objekt Logikappens underliggande arbetsflödesdefinition, som är samma objekt som visas i kodvyn och som beskrivs fullständigt i avsnittet Schemareferens för arbetsflödesdefinitionsspråk . I den här arbetsflödesdefinitionen parameters deklarerar objektet parametrar för de värden som ska användas vid logic app-körning. Mer information finns i Arbetsflödesdefinition och parametrar.

Om du vill visa attributen i logikappens arbetsflödesdefinition växlar du från "designvy" till "kodvy" i Azure-portalen eller Visual Studio eller med hjälp av ett verktyg som Azure Resource Explorer.

parameters Nej Objekt Parametervärden för arbetsflödesdefinition som ska användas vid logic app-körning. Parameterdefinitionerna för dessa värden visas i arbetsflödesdefinitionens parameterobjekt. Om logikappen dessutom använder hanterade anslutningsappar för åtkomst till andra tjänster och system innehåller det här objektet ett $connections objekt som anger vilka anslutningsvärden som ska användas vid körning.
accessControl Nej Objekt För att ange säkerhetsattribut för logikappen, till exempel begränsa IP-åtkomst till begärandeutlösare eller indata och utdata för körningshistorik. Mer information finns i Säker åtkomst till logikappar.
runtimeConfiguration Nej Objekt För att ange egenskaper operationOptions som styr hur logikappen beter sig vid körning. Du kan till exempel köra logikappen i läget för högt dataflöde.

Mer information om resursdefinitioner för dessa Logic Apps-objekt finns i Resurstyper för Microsoft.Logic:

Arbetsflödesdefinition och parametrar

Logikappens definition arbetsflödesdefinition visas i objektet, som visas i objektet i logikappens properties resursdefinition. Det här definition objektet är samma objekt som visas i kodvyn och beskrivs fullständigt i avsnittet Schemareferens för arbetsflödesdefinitionsspråk . Arbetsflödesdefinitionen innehåller ett inre parameters deklarationsobjekt där du kan definiera nya eller redigera befintliga parametrar för de värden som används av arbetsflödesdefinitionen vid körning. Du kan sedan referera till dessa parametrar i utlösaren eller åtgärderna i arbetsflödet. Som standard är det här parameters objektet tomt om inte logikappen skapar anslutningar till andra tjänster och system via hanterade anslutningsappar.

Om du vill ange värden för parametrar för arbetsflödesdefinition använder du parameters objektet som ligger utanför arbetsflödesdefinitionen men som fortfarande finns i logikappens resursdefinition. I det här yttre parameters objektet kan du sedan referera till dina tidigare deklarerade mallparametrar, som kan acceptera värden vid distribution från en parameterfil.

Dricks

Vi rekommenderar att du inte direkt refererar till mallparametrar, som utvärderas vid distributionen, inifrån arbetsflödesdefinitionen. Deklarera i stället en parameter för arbetsflödesdefinition, som du sedan kan ange i parameters objektet som ligger utanför arbetsflödesdefinitionen men som fortfarande finns i logikappens resursdefinition. Mer information finns i Referenser till parametrar.

Den här syntaxen visar var du kan deklarera parametrar på både mall- och arbetsflödesdefinitionsnivåer tillsammans med var du kan ange dessa parametervärden genom att referera till mall- och arbetsflödesdefinitionsparametrarna:

{
   "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
   "contentVersion": "1.0.0.0",
   // Template parameters
   "parameters": {
      "<template-parameter-name>": {
         "type": "<parameter-type>",
         "defaultValue": "<parameter-default-value>",
         "metadata": {
            "description": "<parameter-description>"
         }
      }
   },
   "variables": {},
   "functions": [],
   "resources": [
      {
         // Start logic app resource definition
         "properties": {
            <other-logic-app-resource-properties>,
            "definition": {
               "$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
               "actions": {<action-definitions>},
               // Workflow definition parameters
               "parameters": {
                  "<workflow-definition-parameter-name>": {
                     "type": "<parameter-type>",
                     "defaultValue": "<parameter-default-value>",
                     "metadata": {
                        "description": "<parameter-description>"
                     }
                  }
               },
               "triggers": {
                  "<trigger-name>": {
                     "type": "<trigger-type>",
                     "inputs": {
                         // Workflow definition parameter reference
                         "<attribute-name>": "@parameters('<workflow-definition-parameter-name')"
                     }
                  }
               },
               <...>
            },
            // Workflow definition parameter value
            "parameters": {
               "<workflow-definition-parameter-name>": { 
                  "value": "[parameters('<template-parameter-name>')]"
               }
            },
            "accessControl": {}
         },
         <other-logic-app-resource-definition-attributes>
      }
      // End logic app resource definition
   ],
   "outputs": {}
}

Definitionsparametrar för säkert arbetsflöde

För en parameter för arbetsflödesdefinition som hanterar känslig information, lösenord, åtkomstnycklar eller hemligheter vid körning deklarerar eller redigerar du parametern för att använda securestring parametertypen eller secureobject . Du kan referera till den här parametern i hela och inom arbetsflödesdefinitionen. På mallens översta nivå deklarerar du en parameter som har samma typ för att hantera den här informationen vid distributionen.

Om du vill ange värdet för parametern för arbetsflödesdefinition använder du parameters objektet som ligger utanför arbetsflödesdefinitionen men som fortfarande finns i logikappens resursdefinition för att referera till mallparametern. Slutligen lagrar du värdet i Azure Key Vault för att skicka värdet till mallparametern vid distributionen och refererar till nyckelvalvet i parameterfilen som används av mallen vid distributionen.

Den här exempelmallen visar hur du kan utföra dessa uppgifter genom att definiera skyddade parametrar vid behov så att du kan lagra deras värden i Azure Key Vault:

  • Deklarera skyddade parametrar för de värden som används för att autentisera åtkomst.
  • Använd dessa värden på både mall- och arbetsflödesdefinitionsnivåer.
  • Ange dessa värden med hjälp av en parameterfil.

Mall

{
   "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
   "contentVersion": "1.0.0.0",
   "parameters": {
      <previously-defined-template-parameters>,
      // Additional template parameters for passing values to use in workflow definition
      "TemplateAuthenticationType": {
         "type": "string",
         "defaultValue": "",
         "metadata": {
            "description": "The type of authentication used for the Fabrikam portal"
         }
      },
      "TemplateFabrikamPassword": {
         "type": "securestring",
         "metadata": {
            "description": "The password for the Fabrikam portal"
         }
      },
      "TemplateFabrikamUserName": {
         "type": "securestring",
         "metadata": {
            "description": "The username for the Fabrikam portal"
         }
      }
   },
   "variables": {},
   "functions": [],
   "resources": [
      {
         // Start logic app resource definition
         "properties": {
            <other-logic-app-resource-properties>,
            // Start workflow definition
            "definition": {
               "$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
               "actions": {<action-definitions>},
               // Workflow definition parameters
               "parameters": {
                  "authenticationType": {
                     "type": "string",
                     "defaultValue": "",
                     "metadata": {
                        "description": "The type of authentication used for the Fabrikam portal"
                     }
                  },
                  "fabrikamPassword": {
                     "type": "securestring",
                     "metadata": {
                        "description": "The password for the Fabrikam portal"
                     }
                  },
                  "fabrikamUserName": {
                     "type": "securestring",
                     "metadata": {
                        "description": "The username for the Fabrikam portal"
                     }
                  }
               },
               "triggers": {
                  "HTTP": {
                     "inputs": {
                        "authentication": {
                           // Reference workflow definition parameters
                           "password": "@parameters('fabrikamPassword')",
                           "type": "@parameters('authenticationType')",
                           "username": "@parameters('fabrikamUserName')"
                        }
                     },
                     "recurrence": {<...>},
                     "type": "Http"
                  }
               },
               <...>
            },
            // End workflow definition
            // Start workflow definition parameter values
            "parameters": {
               "authenticationType": {
                  "value": "[parameters('TemplateAuthenticationType')]" // Template parameter reference
               },
               "fabrikamPassword": {                  
                  "value": "[parameters('TemplateFabrikamPassword')]" // Template parameter reference
               },
               "fabrikamUserName": {
                  "value": "[parameters('TemplateFabrikamUserName')]" // Template parameter reference
               }
            },
            "accessControl": {}
         },
         <other-logic-app-resource-attributes>
      }
      // End logic app resource definition
   ],
   "outputs": {}
}

Parameterfil

{
   "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
   "contentVersion": "1.0.0.0",
   // Template parameter values
   "parameters": {
      <previously-defined-template-parameter-values>,
     "TemplateAuthenticationType": {
        "value": "Basic"
     },
     "TemplateFabrikamPassword": {
        "reference": {
           "keyVault": {
              "id": "/subscriptions/<Azure-subscription-ID>/resourceGroups/<Azure-resource-group-name>/Microsoft.KeyVault/vaults/fabrikam-key-vault"
           },
           "secretName": "FabrikamPassword"
        }
     },
     "TemplateFabrikamUserName": {
        "reference": {
           "keyVault": {
              "id": "/subscriptions/<Azure-subscription-ID>/resourceGroups/<Azure-resource-group-name>/Microsoft.KeyVault/vaults/fabrikam-key-vault"
           },
           "secretName": "FabrikamUserName"
        }
     }
   }
}

Metodtips – definitionsparametrar för arbetsflöde

Följ dessa metodtips för att se till att Logic App Designer kan visa arbetsflödesdefinitionsparametrar korrekt:

Mer information om parametrar för arbetsflödesdefinition finns i Parametrar – Arbetsflödesdefinitionsspråk.

Anslutningsresursdefinitioner

När logikappen skapar och använder anslutningar till andra tjänster och system med hjälp av hanterade anslutningsappar innehåller mallobjektet resources resursdefinitionerna för dessa anslutningar. Även om du skapar anslutningar inifrån en logikapp är anslutningar separata Azure-resurser med egna resursdefinitioner. Om anslutningen dessutom använder en lokal datagatewayresurs finns den här resursdefinitionen separat från anslutningsresursdefinitionen. Mer information finns i Resursdefinitioner för lokal datagateway och Microsoft.Web connectionGateways.

Om du vill granska anslutningsresursdefinitioner laddar du ned logikappen från Azure till Visual Studio, vilket är det enklaste sättet att skapa en giltig parameteriserad logikappmall som är mest redo för distribution.

{
   "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
   "contentVersion": "1.0.0.0",
   "parameters": {<template-parameters>},
   "variables": {},
   "functions": [],
   "resources": [
      {
         <logic-app-resource-definition>
      },
      // Start connection resource definitions
      {
         <connection-resource-definition-1>
      },
      {
         <connection-resource-definition-2>
      }
   ],
   "outputs": {}
}

Anslutningsresursdefinitioner refererar till mallens toppnivåparametrar för deras värden så att du kan ange dessa värden vid distributionen med hjälp av en parameterfil. Kontrollera att anslutningar använder samma Azure-resursgrupp och plats som din logikapp.

Här är ett exempel på en resursdefinition för en Office 365 Outlook-anslutning och motsvarande mallparametrar:

{
   "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
   "contentVersion": "1.0.0.0",
   // Template parameters
   "parameters": {
      "LogicAppName": {<parameter-definition>},
      "LogicAppLocation": {<parameter-definition>},
      "office365_1_Connection_Name": {
         "type": "string",
         "defaultValue": "office365",
         "metadata": {
            "description": "The resource name for the Office 365 Outlook connection"
         }
      },
      "office365_1_Connection_DisplayName": {
         "type": "string",
         "defaultValue": "",
         "metadata": {
            "description": "The display name for the Office 365 Outlook connection"
         }
      }
   },
   "variables": {},
   "functions": [],
   "resources": [
      {
         <logic-app-resource-definition>
      },
      // Office 365 Outlook API connection resource definition
      {
         "type": "Microsoft.Web/connections",
         "apiVersion": "2016-06-01",
         // Template parameter reference for connection name
         "name": "[parameters('office365_1_Connection_Name')]",
         // Template parameter reference for connection resource location. Must match logic app location.
         "location": "[parameters('LogicAppLocation')]",
         "properties": {
            "api": {
               // Connector ID
               "id": "[concat(subscription().id, '/providers/Microsoft.Web/locations/', parameters('LogicAppLocation'), '/managedApis/', 'office365')]"
            },
            // Template parameter reference for connection display name
            "displayName": "[parameters('office365_1_Connection_DisplayName')]"
         }
      }
   ],
   "outputs": {}
}

Logikappens resursdefinition fungerar också med anslutningsresursdefinitioner på följande sätt:

  • I arbetsflödesdefinitionen parameters deklarerar objektet en $connections parameter för de anslutningsvärden som ska användas vid logic app-körning. Dessutom använder utlösaren eller åtgärden som skapar en anslutning motsvarande värden som passerar genom den här $connections parametern.

  • Utanför arbetsflödesdefinitionen men fortfarande i logikappens resursdefinition anger ett annat parameters objekt de värden som ska användas vid körning för parametern $connections genom att referera till motsvarande mallparametrar. Dessa värden använder malluttryck för att referera till resurser som på ett säkert sätt lagrar metadata för anslutningarna i logikappen.

    Metadata kan till exempel innehålla niska veze och åtkomsttoken som du kan lagra i Azure Key Vault. Om du vill skicka dessa värden till dina mallparametrar refererar du till nyckelvalvet i parameterfilen som används av mallen vid distributionen. Mer information om skillnader i referensparametrar finns i Referenser till parametrar senare i det här avsnittet.

    När du öppnar logikappens arbetsflödesdefinition i kodvyn via Azure-portalen eller Visual Studio $connections visas objektet utanför arbetsflödesdefinitionen men på samma nivå. Den här ordningen i kodvyn gör dessa parametrar enklare att referera till när du uppdaterar arbetsflödesdefinitionen manuellt:

    {
       "$connections": {<workflow-definition-parameter-connection-values-runtime},
       "definition": {<workflow-definition>}
    }
    
  • Logikappens resursdefinition har ett dependsOn objekt som anger beroenden för de anslutningar som används av logikappen.

Varje anslutning som du skapar har ett unikt namn i Azure. När du skapar flera anslutningar till samma tjänst eller system läggs varje anslutningsnamn till med ett tal, vilket ökar med varje ny anslutning som skapas, till exempel office365, office365-1och så vidare.

Det här exemplet visar interaktionerna mellan logikappens resursdefinition och en anslutningsresursdefinition för Office 365 Outlook:

{
   "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
   "contentVersion": "1.0.0.0",
   // Template parameters
   "parameters": {
      "LogicAppName": {<parameter-definition>},
      "LogicAppLocation": {<parameter-definition>},
      "office365_1_Connection_Name": {<parameter-definition>},
      "office365_1_Connection_DisplayName": {<parameter-definition>}
   },
   "variables": {},
   "functions": [],
   "resources": [
      {
         // Start logic app resource definition
         "properties": {
            <...>,
            "definition": {
               <...>,
               "parameters": {
                  // Workflow definition "$connections" parameter
                  "$connections": {
                     "defaultValue": {},
                     "type": "Object"
                  }
               },
               <...>
            },
            "parameters": {
               // Workflow definition "$connections" parameter values to use at runtime
               "$connections": {
                  "value": {
                     "office365": {
                        // Template parameter references
                        "id": "[concat(subscription().id, '/providers/Microsoft.Web/locations/', parameters('LogicAppLocation'), '/managedApis/', 'office365')]",
                        "connectionId": "[resourceId('Microsoft.Web/connections', parameters('office365_1_Connection_Name'))]",
                        "connectionName": "[parameters('office365_1_Connection_Name')]"
                     }
                  }
               }
            }
         },
         <other-logic-app-resource-information>,
         "dependsOn": [
            "[resourceId('Microsoft.Web/connections', parameters('office365_1_Connection_Name'))]"
         ]
         // End logic app resource definition
      },
      // Office 365 Outlook API connection resource definition
      {
         "type": "Microsoft.Web/connections",
         "apiVersion": "2016-06-01",
         // Template parameter reference for connection name
         "name": "[parameters('office365_1_Connection_Name')]",
         // Template parameter reference for connection resource location. Must match logic app location.
         "location": "[parameters('LogicAppLocation')]",
         "properties": {
            "api": {
               // Connector ID
               "id": "[concat(subscription().id, '/providers/Microsoft.Web/locations/', parameters('LogicAppLocation'), '/managedApis/', 'office365')]"
            },
            // Template parameter reference for connection display name
            "displayName": "[parameters('office365_1_Connection_DisplayName')]"
         }
      }
   ],
   "outputs": {}
}

Resursdefinitioner för lokal datagateway

Om anslutningen använder en lokal datagatewayresurs finns den här resursdefinitionen separat från resursdefinitionen för anslutningsappen. Följ dessa steg för att visa datagatewayens resursdefinition:

  1. I Azure-portalen letar du upp och visar Azure-resursen för din lokala datagateway.

  2. På resursmenyn går du till Automation och väljer Exportera mall.

    När Azure har genererat mallen visas gatewayens resursdefinition i kodfönstret.

Mer information finns i Microsoft.Web connectionGateways.

Säkra anslutningsparametrar

För en anslutningsparameter som hanterar känslig information, lösenord, åtkomstnycklar eller hemligheter innehåller anslutningens resursdefinition ett parameterValues objekt som anger dessa värden i namn/värde-parformat. Om du vill dölja den här informationen kan du deklarera eller redigera mallparametrarna för dessa värden med hjälp av parametertyperna securestring eller secureobject . Du kan sedan lagra den informationen i Azure Key Vault. Om du vill skicka dessa värden till dina mallparametrar refererar du till nyckelvalvet i parameterfilen som används av mallen vid distributionen.

Här är ett exempel som tillhandahåller kontonamnet och åtkomstnyckeln för en Azure Blob Storage-anslutning:

Parameterfil

{
   "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
   "contentVersion": "1.0.0.0",
   // Template parameter values
   "parameters": {
      "LogicAppName": {
         "value": "Email-Processor-Logic-App"
      },
      "LogicAppLocation": {
         "value": "westeurope"
      },
      "azureblob_1_Connection_Name": {
         "value": "Fabrikam-Azure-Blob-Storage-Connection"
      },
      "azureblob_1_Connection_DisplayName": {
         "value": "Fabrikam-Storage"
      },
      "azureblob_1_accountName": {
         "value": "Fabrikam-Storage-Account"
      },
      "azureblob_1_accessKey": {
         "reference": {
            "keyVault": {
               "id": "/subscriptions/<Azure-subscription-ID>/resourceGroups/<Azure-resource-group-name>/Microsoft.KeyVault/vaults/fabrikam-key-vault"
            },
            "secretName": "FabrikamStorageKey"
         }
      }
   }
}

Mall

{
   "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
   "contentVersion": "1.0.0.0",
   // Template parameters
   "parameters": {
      "LogicAppName": {<parameter-definition>},
      "LogicAppLocation": {<parameter-definition>},
      "azureblob_1_Connection_Name": {<parameter-definition>},
      "azureblob_1_Connection_DisplayName": {<parameter-definition>},
      "azureblob_1_accountName": {
         "type": "string",
         "defaultValue": "",
         "metadata": {
            "description": "Name of the storage account the connector should use."
         }
      },
      "azureblob_1_accessKey": {
         "type": "secureobject",
         "metadata": {
            "description": "Specify a valid primary/secondary storage account access key."
         }
      }
   },
   "variables": {},
   "functions": [],
   "resources": [
      {
         "properties": {
            "state": "Disabled",
            "definition": {
               "$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
               "actions": {
                  // Azure Blob Storage action
                  "Create_blob": {
                     "type": "ApiConnection",
                     "inputs": {
                        "host": {
                           "connection": {
                              // Workflow definition parameter reference for values to use at runtime
                              "name": "@parameters('$connections')['azureblob']['connectionId']"
                           }
                        },
                     },
                     "method": "post",
                     "body": "@triggerBody()?['Body']",
                     "path": "/datasets/default/files",
                     "queries": {
                        "folderPath": "/emails",
                        "name": "@triggerBody()?['Subject']",
                        "queryParametersSingleEncoded": true
                     },
                     "runAfter": {},
                     "runtimeConfiguration": {
                        "contentTransfer": {
                           "transferMode": "Chunked"
                        }
                     }
                  }
               },
               "parameters": {
                  // Workflow definition parameter for values to use at runtime
                  "$connections": {
                     "defaultValue": {},
                     "type": "Object"
                  }
               },
               "triggers": {<trigger-definition>},
               "contentVersion": "1.0.0.0",
               "outputs": {}
            },
            "parameters": {
               "$connections": {
                  "value": {
                     // Template parameter references for values to use at runtime
                     "azureblob": {
                        "id": "[concat(subscription().id, '/providers/Microsoft.Web/locations/', parameters('LogicAppLocation'), '/managedApis/', 'azureblob')]",
                        "connectionId": "[resourceId('Microsoft.Web/connections', parameters('azureblob_1_Connection_Name'))]",
                        "connectionName": "[parameters('azureblob_1_Connection_Name')]"
                    }
                  }
               }
            },
            "name": "[parameters('LogicAppName')]",
            "type": "Microsoft.Logic/workflows",
            "location": "[parameters('LogicAppLocation')]",
            "tags": {
               "displayName": "LogicApp"
            },
            "apiVersion": "2019-05-01",
            // Template parameter reference for value to use at deployment
            "dependsOn": [
               "[resourceId('Microsoft.Web/connections', parameters('azureblob_1_Connection_Name'))]"
            ]
         }
      },
      // Azure Blob Storage API connection resource definition
      {
         "type": "Microsoft.Web/connections",
         "apiVersion": "2016-06-01",
         "name": "[parameters('azureblob_1_Connection_Name')]",
         "location": "[parameters('LogicAppLocation')]",
         "properties": {
            "api": {
               "id": "[concat(subscription().id, '/providers/Microsoft.Web/locations/', parameters('LogicAppLocation'), '/managedApis/', 'azureblob')]"
            },
            "displayName": "[parameters('azureblob_1_Connection_DisplayName')]",
            // Template parameter reference for values to use at deployment
            "parameterValues": {
               "accountName": "[parameters('azureblob_1_accountName')]",
               "accessKey": "[parameters('azureblob_1_accessKey')]"
            }
         }
      }
   ],
   "outputs": {}
}

Autentisera anslutningar

Efter distributionen fungerar logikappen från slutpunkt till slutpunkt med giltiga parametrar. Du måste dock fortfarande auktorisera OAuth-anslutningar för att generera giltiga åtkomsttoken för autentisering av dina autentiseringsuppgifter. Mer information finns i Auktorisera OAuth-anslutningar.

Vissa anslutningar stöder användning av microsoft entra-tjänstens huvudnamn för att auktorisera anslutningar för en logikapp som är registrerad i Microsoft Entra-ID. Den här azure Data Lake-anslutningsresursdefinitionen visar till exempel hur du refererar till mallparametrarna som hanterar tjänstens huvudnamns information och hur mallen deklarerar dessa parametrar:

Definition av anslutningsresurs

{
   <other-template-objects>
   "type": "Microsoft.Web/connections",
   "apiVersion": "2016-06-01",
   "name": "[parameters('azuredatalake_1_Connection_Name')]",
   "location": "[parameters('LogicAppLocation')]",
   "properties": {
      "api": {
         "id": "[concat(subscription().id, '/providers/Microsoft.Web/locations/', 'resourceGroup().location', '/managedApis/', 'azuredatalake')]"
      },
      "displayName": "[parameters('azuredatalake_1_Connection_DisplayName')]",
      "parameterValues": {
         "token:clientId": "[parameters('azuredatalake_1_token:clientId')]",
         "token:clientSecret": "[parameters('azuredatalake_1_token:clientSecret')]",
         "token:TenantId": "[parameters('azuredatalake_1_token:TenantId')]",
         "token:grantType": "[parameters('azuredatalake_1_token:grantType')]"
      }
   }
}
Attribut beskrivning
token:clientId Programmet eller klient-ID:t som är associerat med tjänstens huvudnamn
token:clientSecret Nyckelvärdet som är associerat med tjänstens huvudnamn
token:TenantId Katalog-ID:t för din Microsoft Entra-klientorganisation
token:grantType Den begärda beviljandetypen, som måste vara client_credentials. Mer information finns i Microsoft platforma za identitete och OAuth 2.0-klientens autentiseringsuppgifter.

Mallparameterdefinitioner

Mallens objekt på den översta nivån parameters deklarerar dessa parametrar för exempelanslutningen:

{
   "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
   "contentVersion": "1.0.0.0",
   "parameters": {
      "azuredatalake_1_Connection_Name": {
        "type": "string",
        "defaultValue": "azuredatalake"
      },
      "azuredatalake_1_Connection_DisplayName": {
        "type": "string",
        "defaultValue": "<connection-name>"
      },
      "azuredatalake_1_token:clientId": {
        "type": "securestring",
        "metadata": {
          "description": "Client (or Application) ID of the Azure Active Directory application."
        }
      },
      "azuredatalake_1_token:clientSecret": {
        "type": "securestring",
        "metadata": {
          "description": "Client secret of the Azure Active Directory application."
        }
      },
      "azuredatalake_1_token:TenantId": {
        "type": "securestring",
        "metadata": {
          "description": "The tenant ID of for the Azure Active Directory application."
        }
      },
      "azuredatalake_1_token:resourceUri": {
        "type": "string",
        "metadata": {
          "description": "The resource you are requesting authorization to use."
        }
      },
      "azuredatalake_1_token:grantType": {
        "type": "string",
        "metadata": {
          "description": "Grant type"
        },
        "defaultValue": "client_credentials",
        "allowedValues": [
          "client_credentials"
        ]
      },
      // Other template parameters
   }
   // Other template objects
}

Mer information om hur du arbetar med tjänstens huvudnamn finns i följande avsnitt:

Referenser till parametrar

Om du vill referera till mallparametrar kan du använda malluttryck med mallfunktioner som utvärderas vid distributionen. Malluttryck använder hakparenteser ([]):

"<attribute-name>": "[parameters('<template-parameter-name>')]"

Om du vill referera till parametrar för arbetsflödesdefinition använder du uttryck och funktioner för arbetsflödesdefinitionsspråk, som utvärderas vid körning. Du kanske märker att vissa mallfunktioner och arbetsflödesdefinitionsfunktioner har samma namn. Definitionsuttryck för arbetsflöden börjar med symbolen "at" (@):

"<attribute-name>": "@parameters('<workflow-definition-parameter-name>')"

Du kan skicka mallparametervärden till arbetsflödesdefinitionen för logikappen som ska användas vid körning. Undvik dock att använda mallparametrar, uttryck och syntax i arbetsflödesdefinitionen eftersom Logic App Designer inte stöder mallelement. Dessutom kan mallsyntax och uttryck komplicera koden på grund av skillnader i när uttryck utvärderas.

Följ i stället de här allmänna stegen för att deklarera och referera till de parametrar för arbetsflödesdefinition som ska användas vid körning, deklarera och referera till de mallparametrar som ska användas vid distributionen och ange de värden som ska skickas vid distributionen med hjälp av en parameterfil. Fullständig information finns i avsnittet Arbetsflödesdefinition och parametrar tidigare i det här avsnittet.

  1. Skapa mallen och deklarera mallparametrarna för de värden som ska accepteras och användas vid distributionen.

  2. I arbetsflödesdefinitionen deklarerar du parametrarna för de värden som ska accepteras och användas vid körning. Du kan sedan referera till dessa värden i hela och inom arbetsflödesdefinitionen.

  3. I objektet parameters som ligger utanför arbetsflödesdefinitionen men som fortfarande finns i logikappens resursdefinition anger du värdena för parametrarna för arbetsflödesdefinitionen genom att referera till motsvarande mallparametrar. På så sätt kan du skicka mallparametervärden till definitionsparametrarna för arbetsflödet.

  4. I parameterfilen anger du de värden som mallen ska använda vid distributionen.

Fullständig exempelmall

Här är den parameteriserade exempelmallen som används i det här avsnittets exempel:

{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
   "parameters": {
      "LogicAppName": {
         "type": "string",
         "minLength": 1,
         "maxLength": 80,
         "defaultValue": "MyLogicApp",
         "metadata": {
            "description": "The resource name to use for the logic app"
         }
      },
      "LogicAppLocation": {
         "type": "string",
         "minLength": 1,
         "defaultValue": "[resourceGroup().location]",
         "metadata": {
            "description": "The resource location to use for the logic app"
         }
      },
      "office365_1_Connection_Name": {
         "type": "string",
         "defaultValue": "office365",
         "metadata": {
            "description": "The resource name to use for the Office 365 Outlook connection"
         }
      },
      "office365_1_Connection_DisplayName": {
         "type": "string",
         "defaultValue": "",
         "metadata": {
            "description": "The display name to use for the Office 365 Outlook connection"
         }
      },
      "azureblob_1_Connection_Name": {
         "type": "string",
         "defaultValue": "azureblob",
         "metadata": {
            "description": "The resource name to use for the Azure Blob storage account connection"
         }
      },
      "azureblob_1_Connection_DisplayName": {
         "type": "string",
         "defaultValue": "",
         "metadata": {
            "description": "Name of the storage account the connector should use."
         }

      },
      "azureblob_1_accountName": {
         "type": "string",
         "defaultValue": "",
         "metadata": {
            "description": "Name of the storage account the connector should use."
         }
      },
      "azureblob_1_accessKey": {
         "type": "securestring",
         "metadata": {
            "description": "Specify a valid primary/secondary storage account access key."
         }
      },
      "LogicAppIntegrationAccount": {
         "type":"string",
         "minLength": 1,
         "defaultValue": "/subscriptions/<Azure-subscription-ID>/resourceGroups/fabrikam-integration-account-rg/providers/Microsoft.Logic/integrationAccounts/fabrikam-integration-account",
         "metadata": {
            "description": "The ID to use for the integration account"
         }
      }
   },
   "variables": {},
   "resources": [
      {
         "properties": {
            "state": "Disabled",
            "integrationAccount": {
              "id": "[parameters('LogicAppIntegrationAccount')]"
            },
            "definition": {
               "$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
               "actions": {
                  "Create_blob": {
                     "type": "ApiConnection",
                     "inputs": {
                        "host": {
                           "connection": {
                              "name": "@parameters('$connections')['azureblob']['connectionId']"
                           }
                        }
                     },
                     "method": "post",
                     "body": "@triggerBody()?['Body']",
                     "path": "/datasets/default/files",
                     "queries": {
                        "folderPath": "/emails",
                        "name": "@triggerBody()?['Subject']",
                        "queryParametersSingleEncoded": true
                     },
                     "runAfter": {},
                     "runtimeConfiguration": {
                        "contentTransfer": {
                           "transferMode": "Chunked"
                        }
                     }
                  }
               },
               "parameters": {
                  "$connections": {
                     "defaultValue": {},
                     "type": "Object"
                  }
               },
               "triggers": {
                  "When_a_new_email_arrives": {
                     "type": "ApiConnection",
                     "inputs": {
                        "host": {
                           "connection": {
                              "name": "@parameters('$connections')['office365']['connectionId']"
                           }
                        },
                        "method": "get",
                        "path": "/Mail/OnNewEmail",
                        "queries": {
                           "folderPath": "Inbox",
                           "importance": "Any",
                           "fetchOnlyWithAttachment": false,
                           "includeAttachments": false
                        }
                     },
                     "recurrence": {
                        "frequency": "Day",
                        "interval": 1
                     },
                     "splitOn": "@triggerBody()?['value']"
                  }
               },
               "contentVersion": "1.0.0.0",
               "outputs": {}
            },
            "parameters": {
               "$connections": {
                  "value": {
                     "azureblob": {
                        "id": "[concat(subscription().id, '/providers/Microsoft.Web/locations/', parameters('LogicAppLocation'), '/managedApis/', 'azureblob')]",
                        "connectionId": "[resourceId('Microsoft.Web/connections', parameters('azureblob_1_Connection_Name'))]",
                        "connectionName": "[parameters('azureblob_1_Connection_Name')]"
                     },
                     "office365": {
                        "id": "[concat(subscription().id, '/providers/Microsoft.Web/locations/', parameters('LogicAppLocation'), '/managedApis/', 'office365')]",
                        "connectionId": "[resourceId('Microsoft.Web/connections', parameters('office365_1_Connection_Name'))]",
                        "connectionName": "[parameters('office365_1_Connection_Name')]"
                     }
                  }
               }
            },
            "accessControl": {}
         },
         "name": "[parameters('LogicAppName')]",
         "type": "Microsoft.Logic/workflows",
         "location": "[parameters('LogicAppLocation')]",
         "tags": {
            "displayName": "LogicApp"
         },
         "apiVersion": "2019-05-01",
         "dependsOn": [
            "[resourceId('Microsoft.Web/connections', parameters('azureblob_1_Connection_Name'))]",
            "[resourceId('Microsoft.Web/connections', parameters('office365_1_Connection_Name'))]"
         ]
      },
      {
         "type": "Microsoft.Web/connections",
         "apiVersion": "2016-06-01",
         "name": "[parameters('office365_1_Connection_Name')]",
         "location": "[parameters('LogicAppLocation')]",
         "properties": {
            "api": {
                "id": "[concat(subscription().id, '/providers/Microsoft.Web/locations/', parameters('LogicAppLocation'), '/managedApis/', 'office365')]"
            },
            "displayName": "[parameters('office365_1_Connection_DisplayName')]"
         }
      },
      {
         "type": "Microsoft.Web/connections",
         "apiVersion": "2016-06-01",
         "name": "[parameters('azureblob_1_Connection_Name')]",
         "location": "[parameters('LogicAppLocation')]",
         "properties": {
            "api": {
               "id": "[concat(subscription().id, '/providers/Microsoft.Web/locations/', parameters('LogicAppLocation'), '/managedApis/', 'azureblob')]"
            },
            "displayName": "[parameters('azureblob_1_Connection_DisplayName')]",
            "parameterValues": {
               "accountName": "[parameters('azureblob_1_accountName')]",
               "accessKey": "[parameters('azureblob_1_accessKey')]"
            }
         }
      }
   ],
   "outputs": {}
}

Nästa steg