Omówienie: Automatyzowanie wdrażania usługi Azure Logic Apps przy użyciu szablonów usługi Azure Resource Manager

Dotyczy: Azure Logic Apps (Zużycie)

Gdy wszystko będzie gotowe do zautomatyzowania tworzenia i wdrażania aplikacji logiki, możesz rozwinąć podstawową definicję przepływu pracy aplikacji logiki do szablonu usługi Azure Resource Manager. Ten szablon definiuje infrastrukturę, zasoby, parametry i inne informacje dotyczące aprowizacji i wdrażania aplikacji logiki. Definiując parametry dla wartości, które różnią się we wdrożeniu, znane również jako parametryzacja, można wielokrotnie i spójnie wdrażać aplikacje logiki na podstawie różnych potrzeb wdrażania.

Jeśli na przykład wdrożysz w środowiskach na potrzeby programowania, testowania i produkcji, prawdopodobnie będziesz używać różnych parametry połączenia dla każdego środowiska. Można zadeklarować parametry szablonu, które akceptują różne parametry połączenia, a następnie przechowywać te ciągi w osobnym pliku parametrów. Dzięki temu można zmienić te wartości bez konieczności aktualizowania i ponownego wdrażania szablonu. W przypadku scenariuszy, w których wartości parametrów są poufne lub muszą być zabezpieczone, takie jak hasła i wpisy tajne, można przechowywać te wartości w usłudze Azure Key Vault i pobierać te wartości w pliku parametrów. Jednak w tych scenariuszach należy ponownie wdrożyć, aby pobrać bieżące wartości.

W tym omówieniu opisano atrybuty w szablonie usługi Resource Manager, który zawiera definicję przepływu pracy aplikacji logiki. Zarówno szablon, jak i definicja przepływu pracy używają składni JSON, ale istnieją pewne różnice, ponieważ definicja przepływu pracy jest również zgodna ze schematem języka definicji przepływu pracy. Na przykład wyrażenia szablonu i wyrażenia definicji przepływu pracy różnią się w zależności od tego, jak odwołują się do parametrów i wartości, które mogą akceptować.

Napiwek

Najprostszym sposobem uzyskania prawidłowego sparametryzowanego szablonu aplikacji logiki, który jest w większości gotowy do wdrożenia, użyj programu Visual Studio (bezpłatnej wersji Community lub nowszej) i narzędzi Azure Logic Apps Tools for Visual Studio. Następnie możesz utworzyć aplikację logiki w programie Visual Studio lub pobrać istniejącą aplikację logiki z platformy Azure do programu Visual Studio.

Możesz też utworzyć szablony aplikacji logiki przy użyciu programu Azure PowerShell z modułem LogicAppTemplate.

Przykładowa aplikacja logiki w tym temacie używa wyzwalacza usługi Office 365 Outlook uruchamianego po nadejściu nowej wiadomości e-mail i akcji usługi Azure Blob Storage, która tworzy obiekt blob dla treści wiadomości e-mail i przekazuje ten obiekt blob do kontenera usługi Azure Storage. W przykładach pokazano również, jak parametryzować wartości, które różnią się we wdrożeniu.

Aby uzyskać więcej informacji na temat szablonów usługi Resource Manager, zobacz następujące tematy:

Aby uzyskać informacje o zasobie szablonu specyficzne dla aplikacji logiki, kont integracji i artefaktów konta integracji, zobacz Typy zasobów Microsoft.Logic.

Przykładowe szablony aplikacji logiki można znaleźć w następujących przykładach:

W przypadku interfejsu API REST usługi Azure Logic Apps zacznij od omówienia interfejsu API REST usługi Azure Logic Apps.

Struktura szablonu

Na najwyższym poziomie szablon usługi Resource Manager jest zgodny z tą strukturą, która jest w pełni opisana w temacie Struktura szablonu usługi Azure Resource Manager i składnia :

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

W przypadku szablonu aplikacji logiki pracujesz głównie z tymi obiektami szablonu:

Atrybut opis
parameters Deklaruje parametry szablonu do akceptowania wartości używanych podczas tworzenia i dostosowywania zasobów na potrzeby wdrażania na platformie Azure. Na przykład te parametry akceptują wartości nazwy i lokalizacji aplikacji logiki, połączeń i innych zasobów niezbędnych do wdrożenia. Te wartości parametrów można przechowywać w pliku parametrów, który został opisany w dalszej części tego tematu. Aby uzyskać ogólne informacje, zobacz Parametry — struktura i składnia szablonu usługi Resource Manager.
resources Definiuje zasoby do tworzenia lub aktualizowania i wdrażania w grupie zasobów platformy Azure, takich jak aplikacja logiki, połączenia, konta usługi Azure Storage itd. Aby uzyskać ogólne informacje, zobacz Resources — Resource Manager template structure and syntax (Zasoby — struktura szablonu usługi Resource Manager i składnia).

Szablon aplikacji logiki używa tego formatu nazwy pliku:

<logic-app-name>.json

Ważne

Składnia szablonu uwzględnia wielkość liter, dlatego upewnij się, że używasz spójnej wielkości liter.

Parametry szablonu

Szablon aplikacji logiki ma wiele parameters obiektów, które istnieją na różnych poziomach i wykonują różne funkcje. Na przykład na najwyższym poziomie można zadeklarować parametry szablonu dla wartości do akceptowania i używania podczas wdrażania podczas tworzenia i wdrażania zasobów na platformie Azure, na przykład:

  • Aplikacja logiki

  • Połączenia używane przez aplikację logiki do uzyskiwania dostępu do innych usług i systemów za pośrednictwem łączników zarządzanych

  • Inne zasoby wymagane przez aplikację logiki do wdrożenia

    Jeśli na przykład aplikacja logiki używa konta integracji dla scenariuszy biznesowych (B2B), obiekt najwyższego poziomu parameters szablonu deklaruje parametr, który akceptuje identyfikator zasobu dla tego konta integracji.

Poniżej przedstawiono ogólną strukturę i składnię definicji parametrów, która jest w pełni opisana przez parametry — struktura i składnia szablonu usługi Resource Manager:

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

W tym przykładzie przedstawiono tylko parametry szablonu dla wartości używanych do tworzenia i wdrażania tych zasobów na platformie Azure:

  • Nazwa i lokalizacja aplikacji logiki
  • Identyfikator używany dla konta integracji połączonego z aplikacją logiki
{
   "$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": {}
}

Z wyjątkiem parametrów, które obsługują wartości poufne lub muszą być zabezpieczone, takie jak nazwy użytkowników, hasła i wpisy tajne, wszystkie te parametry obejmują defaultValue atrybuty, chociaż w niektórych przypadkach wartości domyślne są pustymi wartościami. Wartości wdrożenia do użycia dla tych parametrów szablonu są dostarczane przez przykładowy plik parametrów opisany w dalszej części tego tematu.

Aby uzyskać więcej informacji na temat zabezpieczania parametrów szablonu, zobacz następujące tematy:

Inne obiekty szablonu często odwołują się do parametrów szablonu, dzięki czemu mogą używać wartości przekazywanych przez parametry szablonu, na przykład:

  • Obiekt zasobów szablonu opisany w dalszej części tego tematu definiuje każdy zasób na platformie Azure, który chcesz utworzyć i wdrożyć, na przykład definicję zasobów aplikacji logiki. Te zasoby często używają wartości parametrów szablonu, takich jak nazwa i lokalizacja aplikacji logiki oraz informacje o połączeniu.

  • Na bardziej szczegółowych poziomach definicji zasobów aplikacji logiki obiekt parametrów definicji przepływu pracy deklaruje parametry dla wartości używanych w środowisku uruchomieniowym aplikacji logiki. Można na przykład zadeklarować parametry definicji przepływu pracy dla nazwy użytkownika i hasła używanego przez wyzwalacz HTTP do uwierzytelniania. Aby określić wartości parametrów definicji przepływu pracy, użyj parameters obiektu spoza definicji przepływu pracy, ale nadal wewnątrz definicji zasobu aplikacji logiki. W tym obiekcie zewnętrznym parameters można odwoływać się do wcześniej zadeklarowanych parametrów szablonu, które mogą akceptować wartości we wdrożeniu z pliku parametrów.

Podczas odwoływania się do parametrów wyrażenia szablonu i funkcje używają innej składni i zachowują się inaczej niż wyrażenia i funkcje definicji przepływu pracy. Aby uzyskać więcej informacji na temat tych różnic, zobacz Odwołania do parametrów w dalszej części tego tematu.

Najlepsze rozwiązania — parametry szablonu

Oto kilka najlepszych rozwiązań dotyczących definiowania parametrów:

Aby uzyskać więcej najlepszych rozwiązań dotyczących szablonów, zobacz Najlepsze rozwiązania dotyczące parametrów szablonu.

Plik parametrów szablonu

Aby podać wartości parametrów szablonu, zapisz te wartości w pliku parametrów. W ten sposób można używać różnych plików parametrów na podstawie potrzeb wdrożenia. Oto format nazwy pliku do użycia:

  • Nazwa pliku szablonu aplikacji logiki: <logic-app-name.json>
  • Nazwa pliku parametrów: <logic-app-name.parameters.json>

Oto struktura wewnątrz pliku parametrów, która zawiera odwołanie magazynu kluczy do przekazywania zabezpieczonej wartości parametru za pomocą usługi 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>
   }
}

Ten przykładowy plik parametrów określa wartości parametrów szablonu zadeklarowanych wcześniej w tym temacie:

{
   "$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"
      }
   }
}

Zasoby szablonu

Szablon zawiera obiekt, który jest tablicą resources zawierającą definicje dla każdego zasobu do utworzenia i wdrożenia na platformie Azure, takich jak definicja zasobu aplikacji logiki, definicje zasobów połączenia i wszelkie inne zasoby wymagane przez aplikację logiki do wdrożenia.

{
   "$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": {}
}

Uwaga

Szablony mogą zawierać definicje zasobów dla wielu aplikacji logiki, dlatego upewnij się, że wszystkie zasoby aplikacji logiki określają tę samą grupę zasobów platformy Azure. Podczas wdrażania szablonu w grupie zasobów platformy Azure przy użyciu programu Visual Studio zostanie wyświetlony monit o otwarcie aplikacji logiki. Ponadto projekt grupy zasobów platformy Azure może zawierać więcej niż jeden szablon, dlatego po wyświetleniu monitu upewnij się, że wybrano prawidłowy plik parametrów.

Wyświetlanie definicji zasobów

Aby przejrzeć definicje zasobów dla wszystkich zasobów w grupie zasobów platformy Azure, pobierz aplikację logiki z platformy Azure do programu Visual Studio, co jest najprostszym sposobem utworzenia prawidłowego sparametryzowanego szablonu aplikacji logiki, który jest głównie gotowy do wdrożenia.

Aby uzyskać ogólne informacje o zasobach szablonu i ich atrybutach, zobacz następujące tematy:

Definicja zasobu aplikacji logiki

Definicja zasobu przepływu pracy aplikacji logiki w szablonie rozpoczyna się od properties obiektu, który zawiera następujące informacje:

  • Stan aplikacji logiki podczas wdrażania
  • Identyfikator dowolnego konta integracji używanego przez aplikację logiki
  • Definicja przepływu pracy aplikacji logiki
  • parameters Obiekt, który ustawia wartości do użycia w czasie wykonywania
  • Inne informacje o zasobie aplikacji logiki, takie jak nazwa, typ, lokalizacja, ustawienia konfiguracji środowiska uruchomieniowego itd.
{
   "$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": {}
}

Poniżej przedstawiono atrybuty specyficzne dla definicji zasobu aplikacji logiki:

Atrybut Wymagania Type Opis
state Tak String Stan aplikacji logiki we wdrożeniu Enabled oznacza, że aplikacja logiki jest aktywna i Disabled oznacza, że aplikacja logiki jest nieaktywna. Jeśli na przykład nie jesteś gotowy do korzystania z aplikacji logiki, ale chcesz wdrożyć wersję roboczą, możesz użyć Disabled opcji .
integrationAccount Nie. Objekt Jeśli aplikacja logiki używa konta integracji, które przechowuje artefakty dla scenariuszy między firmami (B2B), ten obiekt zawiera id atrybut, który określa identyfikator konta integracji.
definition Tak Objekt Podstawowa definicja przepływu pracy aplikacji logiki, która jest tym samym obiektem, który jest wyświetlany w widoku kodu i jest w pełni opisany w temacie Dokumentacja schematu języka definicji przepływu pracy. W tej definicji parameters przepływu pracy obiekt deklaruje parametry wartości do użycia w środowisku uruchomieniowym aplikacji logiki. Aby uzyskać więcej informacji, zobacz Definicje i parametry przepływu pracy.

Aby wyświetlić atrybuty w definicji przepływu pracy aplikacji logiki, przejdź z widoku projektu do widoku kodu w witrynie Azure Portal lub programie Visual Studio albo za pomocą narzędzia takiego jak Eksplorator zasobów platformy Azure.

parameters Nie. Objekt Wartości parametrów definicji przepływu pracy do użycia w środowisku uruchomieniowym aplikacji logiki. Definicje parametrów dla tych wartości są wyświetlane wewnątrz obiektu parametrów definicji przepływu pracy. Ponadto jeśli aplikacja logiki używa łączników zarządzanych do uzyskiwania dostępu do innych usług i systemów, ten obiekt zawiera $connections obiekt, który ustawia wartości połączenia do użycia w czasie wykonywania.
accessControl Nie. Objekt Aby określić atrybuty zabezpieczeń aplikacji logiki, takie jak ograniczenie dostępu ip do wyzwalaczy żądań lub danych wejściowych i wyjściowych historii uruchamiania. Aby uzyskać więcej informacji, zobacz Bezpieczny dostęp do aplikacji logiki.
runtimeConfiguration Nie. Objekt Aby określić wszelkie operationOptions właściwości kontrolujące sposób działania aplikacji logiki w czasie wykonywania. Możesz na przykład uruchomić aplikację logiki w trybie wysokiej przepływności.

Aby uzyskać więcej informacji na temat definicji zasobów dla tych obiektów usługi Azure Logic Apps, zobacz Microsoft.Logic resource types (Typy zasobów Microsoft.Logic):

Definicja i parametry przepływu pracy

Definicja przepływu pracy aplikacji logiki jest wyświetlana w definition obiekcie, który jest wyświetlany w obiekcie wewnątrz properties definicji zasobu aplikacji logiki. Ten definition obiekt jest tym samym obiektem, który jest wyświetlany w widoku kodu i jest w pełni opisany w temacie Dokumentacja schematu języka definicji przepływu pracy. Definicja przepływu pracy zawiera parameters wewnętrzny obiekt deklaracji, w którym można zdefiniować nowe lub edytować istniejące parametry dla wartości używanych przez definicję przepływu pracy w czasie wykonywania. Następnie można odwoływać się do tych parametrów wewnątrz wyzwalacza lub akcji w przepływie pracy. Domyślnie ten parameters obiekt jest pusty, chyba że aplikacja logiki tworzy połączenia z innymi usługami i systemami za pośrednictwem łączników zarządzanych.

Aby ustawić wartości parametrów definicji przepływu pracy, użyj parameters obiektu spoza definicji przepływu pracy, ale nadal wewnątrz definicji zasobu aplikacji logiki. W tym obiekcie zewnętrznym parameters można następnie odwołać się do wcześniej zadeklarowanych parametrów szablonu, które mogą akceptować wartości podczas wdrażania z pliku parametrów.

Napiwek

Najlepszym rozwiązaniem jest brak bezpośredniego odwołania do parametrów szablonu, które są oceniane we wdrożeniu, z poziomu definicji przepływu pracy. Zamiast tego zadeklaruj parametr definicji przepływu pracy, który można następnie ustawić w parameters obiekcie, który znajduje się poza definicją przepływu pracy, ale nadal wewnątrz definicji zasobu aplikacji logiki. Aby uzyskać więcej informacji, zobacz Odwołania do parametrów.

Ta składnia pokazuje, gdzie można zadeklarować parametry zarówno na poziomach definicji szablonu, jak i przepływu pracy, wraz z tym, gdzie można ustawić te wartości parametrów, odwołując się do parametrów definicji szablonu i przepływu pracy:

{
   "$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": {}
}

Parametry definicji bezpiecznego przepływu pracy

W przypadku parametru definicji przepływu pracy, który obsługuje poufne informacje, hasła, klucze dostępu lub wpisy tajne w czasie wykonywania, zadeklaruj lub edytuj parametr, aby użyć typu parametru securestring lub secureobject . Możesz odwoływać się do tego parametru w definicji przepływu pracy i w niej. Na najwyższym poziomie szablonu zadeklaruj parametr o tym samym typie, aby obsłużyć te informacje we wdrożeniu.

Aby ustawić wartość parametru definicji przepływu pracy, użyj parameters obiektu spoza definicji przepływu pracy, ale nadal wewnątrz definicji zasobu aplikacji logiki, aby odwołać się do parametru szablonu. Na koniec, aby przekazać wartość do parametru szablonu podczas wdrażania, zapisz wartość w usłudze Azure Key Vault i odwołaj się do tego magazynu kluczy w pliku parametrów używanym przez szablon podczas wdrażania.

W tym przykładowym szablonie pokazano, jak można wykonać te zadania, definiując zabezpieczone parametry w razie potrzeby, aby można było przechowywać ich wartości w usłudze Azure Key Vault:

  • Zadeklaruj parametry zabezpieczone dla wartości używanych do uwierzytelniania dostępu.
  • Użyj tych wartości zarówno na poziomach definicji szablonu, jak i przepływu pracy.
  • Podaj te wartości przy użyciu pliku parametrów.

Szablon

{
   "$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": {}
}

Plik parametrów

{
   "$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"
        }
     }
   }
}

Najlepsze rozwiązania — parametry definicji przepływu pracy

Aby upewnić się, że projektant aplikacji logiki może poprawnie wyświetlać parametry definicji przepływu pracy, postępuj zgodnie z następującymi najlepszymi rozwiązaniami:

Aby uzyskać więcej informacji na temat parametrów definicji przepływu pracy, zobacz Parametry — język definicji przepływu pracy.

Definicje zasobów połączenia

Gdy aplikacja logiki tworzy i używa połączeń z innymi usługami i systemem przy użyciu łączników zarządzanych, obiekt szablonu resources zawiera definicje zasobów dla tych połączeń. Mimo że połączenia są tworzone z poziomu aplikacji logiki, połączenia są oddzielnymi zasobami platformy Azure z własnymi definicjami zasobów. Ponadto jeśli połączenie korzysta z lokalnego zasobu bramy danych, ta definicja zasobu istnieje oddzielnie od definicji zasobu łącznika. Aby uzyskać więcej informacji, zobacz Definicje zasobów lokalnej bramy danych i Microsoft.Web connectionGateways.

Aby przejrzeć definicje zasobów połączenia, pobierz aplikację logiki z platformy Azure do programu Visual Studio, co jest najprostszym sposobem utworzenia prawidłowego sparametryzowanego szablonu aplikacji logiki, który jest w większości gotowy do wdrożenia.

{
   "$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": {}
}

Definicje zasobów połączenia odwołują się do parametrów najwyższego poziomu szablonu dla ich wartości, aby można było podać te wartości we wdrożeniu przy użyciu pliku parametrów. Upewnij się, że połączenia używają tej samej grupy zasobów i lokalizacji platformy Azure co aplikacja logiki.

Oto przykładowa definicja zasobu dla połączenia usługi Office 365 Outlook i odpowiednie parametry szablonu:

{
   "$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": {}
}

Definicja zasobu aplikacji logiki działa również z definicjami zasobów połączenia na następujące sposoby:

  • Wewnątrz definicji parameters przepływu pracy obiekt deklaruje $connections parametr dla wartości połączenia do użycia w środowisku uruchomieniowym aplikacji logiki. Ponadto wyzwalacz lub akcja, która tworzy połączenie, używa odpowiednich wartości przekazywanych przez ten $connections parametr.

  • Poza definicją przepływu pracy, ale nadal wewnątrz definicji zasobu aplikacji logiki inny parameters obiekt ustawia wartości używane w czasie wykonywania parametru $connections , odwołując się do odpowiednich parametrów szablonu. Te wartości używają wyrażeń szablonów do odwołowania się do zasobów, które bezpiecznie przechowują metadane dla połączeń w aplikacji logiki.

    Na przykład metadane mogą zawierać parametry połączenia i tokeny dostępu, które można przechowywać w usłudze Azure Key Vault. Aby przekazać te wartości do parametrów szablonu, należy odwołać się do tego magazynu kluczy w pliku parametrów używanym przez szablon podczas wdrażania. Aby uzyskać więcej informacji na temat różnic w odwoływania się do parametrów, zobacz Odwołania do parametrów w dalszej części tego tematu.

    Po otwarciu definicji przepływu pracy aplikacji logiki w widoku kodu za pośrednictwem witryny Azure Portal lub programu Visual Studio obiekt jest wyświetlany poza definicją przepływu pracy, $connections ale na tym samym poziomie. Ta kolejność w widoku kodu ułatwia odwołowanie się do tych parametrów podczas ręcznego aktualizowania definicji przepływu pracy:

    {
       "$connections": {<workflow-definition-parameter-connection-values-runtime},
       "definition": {<workflow-definition>}
    }
    
  • Definicja zasobu aplikacji logiki zawiera dependsOn obiekt, który określa zależności od połączeń używanych przez aplikację logiki.

Każde utworzone połączenie ma unikatową nazwę na platformie Azure. Podczas tworzenia wielu połączeń z tą samą usługą lub systemem każda nazwa połączenia jest dołączana z liczbą, która zwiększa się wraz z każdym nowym połączeniem utworzonym, na przykład office365, office365-1i tak dalej.

W tym przykładzie przedstawiono interakcje między definicją zasobu aplikacji logiki a definicją zasobu połączenia dla usługi 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": {}
}

Definicje zasobów lokalnej bramy danych

Jeśli połączenie korzysta z lokalnego zasobu bramy danych, ta definicja zasobu istnieje oddzielnie od definicji zasobu łącznika. Aby wyświetlić definicję zasobów bramy danych, wykonaj następujące kroki:

  1. W witrynie Azure Portal znajdź i wyświetl zasób platformy Azure dla lokalnej bramy danych.

  2. W menu zasobów w obszarze Automatyzacja wybierz pozycję Eksportuj szablon.

    Po wygenerowaniu szablonu przez platformę Azure definicja zasobu bramy zostanie wyświetlona w oknie kodu.

Aby uzyskać więcej informacji, zobacz Microsoft.Web connectionGateways.

Parametry bezpiecznego połączenia

W przypadku parametru połączenia obsługującego poufne informacje, hasła, klucze dostępu lub wpisy tajne definicja zasobu połączenia zawiera parameterValues obiekt określający te wartości w formacie pary nazwa-wartość. Aby ukryć te informacje, możesz zadeklarować lub edytować parametry szablonu dla tych wartości przy użyciu securestring typów parametrów lub secureobject . Następnie możesz przechowywać te informacje w usłudze Azure Key Vault. Aby przekazać te wartości do parametrów szablonu, należy odwołać się do tego magazynu kluczy w pliku parametrów używanym przez szablon podczas wdrażania.

Oto przykład, który zawiera nazwę konta i klucz dostępu dla połączenia usługi Azure Blob Storage:

Plik parametrów

{
   "$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"
         }
      }
   }
}

Szablon

{
   "$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": {}
}

Uwierzytelnianie połączeń

Po wdrożeniu aplikacja logiki działa kompleksowo z prawidłowymi parametrami. Jednak nadal musisz autoryzować wszystkie połączenia OAuth w celu wygenerowania prawidłowych tokenów dostępu na potrzeby uwierzytelniania poświadczeń. Aby uzyskać więcej informacji, zobacz Autoryzowanie połączeń OAuth.

Niektóre połączenia obsługują używanie jednostki usługi Entra firmy Microsoft do autoryzowania połączeń dla aplikacji logiki zarejestrowanej w identyfikatorze Entra firmy Microsoft. Na przykład ta definicja zasobu połączenia usługi Azure Data Lake pokazuje, jak odwoływać się do parametrów szablonu, które obsługują informacje jednostki usługi i jak szablon deklaruje następujące parametry:

Definicja zasobu połączenia

{
   <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')]"
      }
   }
}
Atrybut opis
token:clientId Identyfikator aplikacji lub klienta skojarzony z jednostką usługi
token:clientSecret Wartość klucza skojarzona z jednostką usługi
token:TenantId Identyfikator katalogu dla dzierżawy firmy Microsoft Entra
token:grantType Żądany typ udzielenia, który musi mieć wartość client_credentials. Aby uzyskać więcej informacji, zobacz Platforma tożsamości Microsoft i przepływ poświadczeń klienta OAuth 2.0.

Definicje parametrów szablonu

Obiekt najwyższego poziomu parameters szablonu deklaruje te parametry dla przykładowego połączenia:

{
   "$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
}

Aby uzyskać więcej informacji na temat pracy z jednostkami usługi, zobacz następujące tematy:

Odwołania do parametrów

Aby odwołać się do parametrów szablonu, można użyć wyrażeń szablonu z funkcjami szablonu, które są oceniane podczas wdrażania. Wyrażenia szablonów używają nawiasów kwadratowych ([]):

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

Aby odwołać się do parametrów definicji przepływu pracy, należy użyć wyrażeń i funkcji języka definicji przepływu pracy, które są oceniane w czasie wykonywania. Możesz zauważyć, że niektóre funkcje szablonu i funkcje definicji przepływu pracy mają taką samą nazwę. Wyrażenia definicji przepływu pracy zaczynają się od symbolu "at" (@):

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

Wartości parametrów szablonu można przekazać do definicji przepływu pracy aplikacji logiki do użycia w czasie wykonywania. Należy jednak unikać używania parametrów szablonu, wyrażeń i składni w definicji przepływu pracy, ponieważ projektant aplikacji logiki nie obsługuje elementów szablonu. Ponadto składnia szablonu i wyrażenia mogą komplikować kod z powodu różnic w korzystaniu z wyrażeń obliczanych.

Zamiast tego wykonaj następujące ogólne kroki, aby zadeklarować i odwołać się do parametrów definicji przepływu pracy do użycia w czasie wykonywania, zadeklarować i odwołać się do parametrów szablonu do użycia we wdrożeniu oraz określić wartości, które mają być przekazywane we wdrożeniu przy użyciu pliku parametrów. Aby uzyskać szczegółowe informacje, zobacz sekcję Definicja i parametry przepływu pracy we wcześniejszej części tego tematu.

  1. Utwórz szablon i zadeklaruj parametry szablonu dla wartości do akceptowania i używania podczas wdrażania.

  2. W definicji przepływu pracy zadeklaruj parametry wartości do akceptowania i używania w czasie wykonywania. Następnie możesz odwoływać się do tych wartości w definicji przepływu pracy i w niej.

  3. parameters W obiekcie, który znajduje się poza definicją przepływu pracy, ale nadal wewnątrz definicji zasobu aplikacji logiki, ustaw wartości parametrów definicji przepływu pracy, odwołując się do odpowiednich parametrów szablonu. W ten sposób można przekazać wartości parametrów szablonu do parametrów definicji przepływu pracy.

  4. W pliku parameters określ wartości szablonu do użycia we wdrożeniu.

Pełny przykładowy szablon

Oto sparametryzowany przykładowy szablon używany przez przykłady tego tematu:

{
  "$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": {}
}

Następne kroki