Краткий обзор автоматизации развертывания Azure Logic Apps с помощью шаблонов Azure Resource Manager

Когда вы будете готовы к автоматизации создания и развертывания своего приложения логики, его определение базового рабочего процесса можно расширить в шаблон Azure Resource Manager. Этот шаблон определяет инфраструктуру, ресурсы, параметры и другую информацию для подготовки и развертывания приложения логики. С помощью определения параметров для значений, которые зависят от развертывания (параметризация), можно многократно и согласованно развертывать приложения логики в зависимости от определенных нужд.

Например, при развертывании в средах для разработки, тестирования и производства, скорее всего, будут использоваться разные строки подключения. Вы можете объявить параметры шаблонов, которые принимают разные строки подключения, которые затем будут храниться в отдельном файле параметров. Так эти значения можно изменять без обновления и повторного развертывания шаблона. Если у вас есть конфиденциальные или защищенные значения параметров, например пароли и секреты, вы можете хранить их значения в Azure Key Vault. Файл параметров будет получать значения из этой службы. Однако, чтобы получить текущие значения, придется повторно провести развертывание.

В этом обзоре описываются атрибуты в шаблоне Resource Manager, который включает определение рабочего процесса приложения логики. Шаблон и определение рабочего процесса используют синтаксис JSON. Однако в них есть и отличия, потому что определение рабочего процесса также соответствует схеме языка определения рабочего процесса. Например, выражения шаблона и определения рабочего процесса отличаются способом ссылки на параметры и значения, которые они могут принимать.

Совет

Проще всего создать шаблон параметризованного приложения логики, который почти готов к развертыванию, с помощью Visual Studio (бесплатный выпуск Community или более поздняя версия) и средств Azure Logic Apps для Visual Studio. Затем можно либо создать приложение логики в Visual Studio, либо найти и скачать существующее приложение логики с портала Azure в Visual Studio.

Шаблоны приложения логики можно создавать с помощью Azure PowerShell с модулем LogicAppTemplate.

В этой статье пример приложения логики использует триггер Office 365 Outlook, который срабатывает при поступлении нового электронного письма, а также действие Хранилища BLOB-объектов Azure, которое создает BLOB-объект для текста сообщения и отправляет его в контейнер хранилища Azure. В примерах также показано, как параметризовать значения, которые зависят от развертывания.

Дополнительные сведения о шаблонах Resource Manager см. в перечисленных ниже статьях.

Сведения о ресурсах шаблонов, связанных с приложениями логики, учетных записях интеграции, их артефактах и средах служб интеграции, см. в разделе Типы ресурсов Microsoft.Logic.

Примеры шаблонов приложений логики

О REST API Logic Apps можно узнать в этом обзоре.

Структура шаблона

На верхнем уровне шаблон Resource Manager соответствует приведенной ниже структуре, которая полностью описана в разделе Структура и синтаксис шаблона 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": {}
}

Основная работа ведется со следующими объектами шаблона.

Атрибут Описание
parameters Объявляет параметры шаблона для приема значений, которые используются при создании и настройке ресурсов для развертывания в Azure. Например, эти параметры принимают значения для названия и расположения приложения логики, подключений и других ресурсов, необходимых для развертывания. Эти значения параметров можно хранить в файле параметров, который описывается далее в статье. Общие сведения см. в разделе "Параметры" статьи "Структура и синтаксис шаблона Resource Manager".
resources Определяет ресурсы для создания или обновления и развертывания в группе ресурсов Azure, например приложение логики, подключения, учетные записи хранения Azure и т. д. Общие сведения см. в разделе "Ресурсы" статьи "Структура и синтаксис шаблона Resource Manager".

В шаблоне приложения логики используется следующий формат имени файла:

<logic-app-name>.json

Важно!

Синтаксис шаблона учитывает регистр, поэтому используйте его правильно.

Параметры шаблона

Шаблон приложения логики имеет несколько объектов parameters, которые существуют на разных уровнях и выполняют разные функции. Например, на верхнем уровне можно объявить параметры шаблона для значений, которые будут приниматься и использоваться при создании и развертывании ресурсов в Azure. Пример:

  • Ваше приложение логики.

  • Подключения, используемые логикой для доступа к другим службам и системам с помощью управляемых соединителей.

  • Другие ресурсы, необходимые приложению логики для развертывания.

    Например, если приложение логики использует учетную запись интеграции для сценариев B2B, то объект верхнего уровня шаблона parameters объявляет параметр, который принимает идентификатор ресурса для этой учетной записи интеграции.

Ниже приведена общая структура и синтаксис для определения параметра, который полностью описан в разделе "Параметры" статьи "Структура и синтаксис шаблона Resource Manager".

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

В примере ниже показаны параметры шаблона только для значений, используемых для создания и развертывания следующих ресурсов в Azure:

  • Названия и расположения вашего приложения логики.
  • Идентификатора для учетной записи интеграции, которая привязана к приложению логики.
{
   "$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": {}
}

За исключением параметров, обрабатывающих конфиденциальные или защищенные значения, например имена пользователей, пароли и секреты, все эти параметры включают атрибуты defaultValue, хотя в некоторых случаях значения по умолчанию пустые. Значения развертывания, используемые для этих параметров шаблона, предоставляются в примере файла параметров, описанном далее в статье.

Дополнительные сведения о защите параметров шаблонов:

Другие объекты шаблона часто ссылаются на параметры, чтобы использовать значения, которые через них проходят. Пример:

  • Объект ресурсов шаблона, описанный далее в статье, определяет каждый ресурс в Azure, который требуется создать и развернуть, например определение ресурса приложения логики. Эти ресурсы часто используют значения параметров шаблона, например название и расположение приложения логики, а также сведения о подключении.

  • На более глубоком уровне определения ресурса приложения логики объект параметров определения рабочего процесса объявляет параметры для значений, используемых в среде выполнения приложения логики. Например, вы можете объявить параметры определения рабочего процесса для имени пользователя и пароля, которые триггер HTTP использует для аутентификации. Чтобы указать значения для параметров определения рабочего процесса, используйте объект parameters, находящийся вне определения рабочего процесса, но по-прежнему внутри определения ресурса приложения логики. В этом внешнем объекте parameters можно ссылаться на ранее объявленные параметры шаблона, которые могут принимать значения при развертывании из файла параметров.

В случае ссылки на параметры выражения и функции шаблона используют другой синтаксис и ведут себя не так, как выражения и функции определения рабочего процесса. Дополнительные сведения об этих различиях см. в разделе Ссылки на параметры.

Рекомендации по параметрам шаблона

Ниже приведены рекомендации по определению параметров.

  • Объявляйте параметры только для значений, которые различаются в зависимости от потребностей развертывания. Не объявляйте параметры для значений, которые остаются одинаковыми во всех развертываниях.

  • Включайте атрибут defaultValue, который может указывать пустые значения, во все параметры, кроме конфиденциальных или защищенных значений. Всегда используйте защищенные параметры для имен пользователей, паролей и секретов. Чтобы скрыть или защитить конфиденциальные значения параметров, следуйте указаниям в следующих разделах.

  • Чтобы отличать названия параметров шаблона от названий параметров определения рабочего процесса, можно использовать описательный подход, например TemplateFabrikamPassword.

Дополнительные рекомендации по использованию шаблонов см. в разделе здесь.

Файл параметров шаблона

Чтобы предоставлять значения для параметров шаблона, сохраните их в файле параметров. Можно использовать разные файлы параметров в зависимости от потребностей развертывания. Форматы имен файлов:

  • Имя файла шаблона приложения логики: <logic-app-name>.json.
  • Имя файла параметров: <logic-app-name>.parameters.json.

Ниже приведена структура файла параметров, которая включает ссылку на хранилище ключей для передачи защищенного значения параметра с помощью 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>
   }
}

В следующем файле параметров указаны значения для параметров шаблона, объявленных ранее в статье.

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

Ресурсы шаблона

В шаблоне есть объект resources в виде массива, содержащего определения каждого ресурса для создания и развертывания в Azure, например определение ресурса приложения логики, определение ресурса подключения и другие ресурсы, которые нужны для развертывания приложения логики.

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

Примечание

Шаблоны могут включать определения ресурсов для нескольких приложений логики, поэтому убедитесь, что все ресурсы приложения логики используют одну и ту же группу ресурсов Azure. Во время развертывания шаблона в группе ресурсов Azure с помощью Visual Studio появится запрос на выбор приложения логики, которое необходимо открыть. Кроме того, проект группы ресурсов Azure может содержать более одного шаблона, поэтому при появлении запроса убедитесь, что выбран правильный файл параметров.

Просмотр определений ресурсов

Чтобы просмотреть определения всех ресурсов в группе Azure, скачайте приложение логики из Azure в Visual Studio. Это самый простой способ создать параметризованный шаблон приложения логики, который практически готов к развертыванию.

Общие сведения о ресурсах шаблонов и их атрибутах

Определение ресурсов приложения логики

Определение ресурсов рабочего процесса приложения логики в шаблоне начинается с объекта properties, который содержит следующие сведения.

  • Состояние приложения логики при развертывании.
  • Идентификатор учетной записи интеграции, используемой приложением логики.
  • Определение рабочего процесса приложения логики.
  • Объект parameters, который задает значения для использования во время выполнения.
  • Другие сведения о ресурсах приложения логики, например его название, тип, расположение, параметры конфигурации среды выполнения и т. д.
{
   "$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": "2016-06-01",
         "dependsOn": [
         ]
      }
      // End logic app resource definition
   ],
   "outputs": {}
}

Некоторые атрибуты определения ресурсов приложения логики

Атрибут Обязательно Тип Описание
state Да Строка Состояние приложения логики при развертывании. Enabled означает, что приложение логики запущено, Disabled — что приложение логики неактивно. Если вы не готовы запускать приложение логики, но хотите развернуть черновую версию, используйте параметр Disabled.
integrationAccount Нет Объект Если приложение логики использует учетную запись интеграции, которая хранит артефакты для сценариев B2B, этот объект включает атрибут id, содержащий идентификатор учетной записи интеграции.
definition Да Объект Определение базового рабочего процесса приложения логики. Этот объект также появляется в представлении кода и полностью описан в статье Справочник по схемам языка определения рабочего процесса. В этом определении рабочего процесса объект parameters объявляет параметры для значений, используемых в среде выполнения приложения логики. См. дополнительные сведения об Определении и параметрах рабочего процесса.

Чтобы просмотреть атрибуты в определении рабочего процесса приложения логики, переключитесь с режима разработки на представление кода на портале Azure или в Visual Studio или с помощью инструмента, например обозревателя ресурсов Azure.

parameters Нет Объект Значения параметров определения рабочего процесса, используемые во время выполнения приложения логики. Определения параметров для этих значений отображаются в объекте параметров определения рабочего процесса. Кроме того, если приложение логики использует управляемые соединители для доступа к другим службам и системам, этот объект включает объект $connections, который задает значения подключения на время выполнения.
accessControl Нет Объект Используется для указания атрибутов безопасности приложения логики, например ограниченного доступа по протоколу IP к триггерам запросов или входным и выходным данным журнала выполнения. Дополнительные сведения см. в статье Безопасный доступ к приложениям логики.
runtimeConfiguration Нет Объект Позволяет указывать свойства operationOptions для контроля поведения логики приложения во время выполнения. Например, приложение логики можно запустить в режиме высокой пропускной способности.

Дополнительные сведения об определениях ресурсов для этих объектов Logic Apps см. в статье Типы ресурсов Microsoft.Logic:

Определение и параметры рабочего процесса

Определение рабочего процесса приложения логики отображается в объекте definition, который находится в объекте properties внутри определения ресурсов приложения логики. Объект definition также появляется в представлении кода и подробно описан в Справочнике по схемам языка определения рабочего процесса. Определение рабочего процесса включает внутренний объект объявления parameters, в котором можно определить новые или изменить существующие параметры для значений, используемых определением рабочего процесса во время выполнения. Затем можно сослаться на эти параметры внутри триггера или действий в рабочем процессе. По умолчанию объект parameters пуст, если приложение логики не создает подключения к другим службам и системам через управляемые соединители.

Чтобы указать значения для параметров определения рабочего процесса, используйте объект parameters, находящийся вне определения рабочего процесса, но внутри определения ресурса приложения логики. В этом внешнем объекте parameters можно ссылаться на ранее объявленные параметры шаблона, которые могут принимать значения при развертывании из файла параметров.

Совет

Рекомендуется не ссылаться непосредственно на параметры шаблона, которые оцениваются при развертывании, из определения рабочего процесса. Чтобы объявлять параметр определения рабочего процесса, используйте объект parameters, находящийся вне определения рабочего процесса, но внутри определения ресурса приложения логики. Дополнительную информацию см. в разделе Ссылки на параметры.

Приведенный ниже синтаксис показывает, где можно объявить параметры на уровнях определения шаблона и рабочего процесса, а также где можно задать значения этих параметров, ссылаясь на параметры определения шаблона и рабочего процесса.

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

Защищенные параметры определения рабочего процесса

Объявляйте и редактируйте параметр, обрабатывающий конфиденциальную информацию, например пароли, ключи доступа или секреты, во время выполнения, с помощью типа securestring или secureobject. Вы можете ссылаться на этот параметр по всему определению рабочего процесса и внутри него. Чтобы работать с конфиденциальной информацией во время развертывания, на верхнем уровне шаблона объявляйте параметр того же типа.

Чтобы задать значение для параметра определения рабочего процесса, используйте объект parameters, находящийся вне определения рабочего процесса, но внутри определения ресурса приложения логики, для ссылки на параметр шаблона. Наконец, чтобы передать значение в параметр шаблона во время развертывания, сохраните это значение в Azure Key Vault и укажите Key Vault в файле параметров, который шаблон использует во время развертывания.

В следующем примере шаблона показано, как можно выполнять подобные задачи с помощью определения защищенных параметров, чтобы хранить их значения в Azure Key Vault:

  • Объявите защищенные параметры для значений, используемых для аутентификации.
  • Используйте эти значения на уровнях определения шаблона и рабочего процесса.
  • Указывайте эти значения в файле параметров.

Шаблон

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

Файл параметров

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

Рекомендации для параметров определения рабочего процесса

Чтобы обеспечить правильное отображение параметров определения рабочего процесса в конструкторе приложений логики, следуйте приведенным ниже рекомендациям.

Дополнительные сведения о параметрах определения рабочего процесса см. в разделе "Параметры" статьи "Язык определения рабочего процесса".

Определения ресурсов подключения

Когда приложение логики создает и использует подключения к другим службам и системам с помощью управляемых соединителей, объект шаблона resources содержит определения ресурсов для этих подключений. Хотя подключения создаются в приложении логики, они представляют собой отдельные ресурсы Azure с собственными определениями. Чтобы просмотреть определения ресурсов подключения, скачайте приложение логики из Azure в Visual Studio. Это самый простой способ создать параметризованный шаблон приложения логики, который практически готов к развертыванию.

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

Определения ресурсов подключения ссылаются на параметры шаблона верхнего уровня, чтобы эти значения можно было указать при развертывании с помощью файла параметров. Убедитесь, что подключения используют ту же группу ресурсов и расположение в Azure, что и приложение логики.

Ниже приведен пример определения ресурсов для подключения 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": {
         "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": {}
}

Определение ресурсов приложения логики также работает с определениями ресурсов подключения:

  • Внутри определения рабочего процесса объект parameters объявляет параметр $connections для значений подключения, которые используются во время выполнения приложения логики. Кроме того, триггер или действие, которые создают подключение, используют соответствующие значения, передаваемые через параметр $connections.

  • Вне определения рабочего процесса, но внутри определения ресурса приложения логики другой объект parameters задает значения, которые будут использоваться во время выполнения для параметра $connections, ссылаясь на соответствующие параметры шаблона. Эти значения используют выражения шаблона, чтобы ссылаться на ресурсы, которые безопасно хранят метаданные для подключений в приложении логики.

    Например, метаданные могут содержать строки подключения и маркеры доступа, которые можно хранить в Azure Key Vault. Чтобы передать эти значения в параметры шаблона, нужно сослаться на это хранилище ключей в файле параметров, который используется шаблоном во время развертывания. Дополнительные сведения о различиях между ссылочными параметрами см. в разделе Ссылки на параметры в этой статье.

    Когда вы открываете определение рабочего процесса логики приложения в представлении кода на портале Azure или в Visual Studio, объект $connections появляется вне определения рабочего процесса, но на том же уровне. Следующий порядок в представлении кода упрощает ссылку параметров во время обновления определения рабочего процесса вручную.

    {
       "$connections": {<workflow-definition-parameter-connection-values-runtime},
       "definition": {<workflow-definition>}
    }
    
  • Определение ресурсов приложения логики содержит объект dependsOn, указывающий зависимости от подключений, используемых приложением логики.

Каждое создаваемое подключение имеет уникальное название в Azure. При создании нескольких подключений к одной и той же службе или системе к их названию добавляется число, которое увеличивается каждый раз. Пример: office365, office365-1 и т. д.

В примере ниже показано взаимодействие между определением ресурсов приложения логики и определением ресурсов подключения для 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": {}
}

Защищенные параметры подключения

Определение ресурсов подключения для параметров, которые содержат конфиденциальную информацию, например пароли, ключи доступа и секреты, содержит объект parameterValues, в котором указаны эти значения в формате пары "имя-значение". Чтобы скрыть эти сведения, можно объявить или изменить параметры шаблона для этих значений с помощью типов параметра securestring или secureobject. Затем эти сведения можно сохранить в Azure Key Vault. Чтобы передать эти значения в параметры шаблона, нужно сослаться на это хранилище ключей в файле параметров, который используется шаблоном во время развертывания.

Ниже приведен пример, в котором указаны название учетной записи и ключ доступа для подключения к Хранилищу BLOB-объектов Azure.

Файл параметров

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

Шаблон

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

Авторизация подключений

После развертывания приложение логики будет полноценно работать с допустимыми параметрами. Однако подключения OAuth все равно нужно авторизовывать, чтобы создавать допустимые маркеры доступа для проверки подлинности учетных данных. Дополнительные сведения см. в разделе Авторизация подключений OAuth.

Некоторые подключения можно авторизовывать для приложений логики, зарегистрированных в Azure AD, с помощью субъекта-службы Azure Active Directory (Azure AD). Например, в приведенном ниже определении ресурсов подключения озера данных Azure показано, как ссылаться на параметры шаблона, которые обрабатывают сведения о субъекте-службе, а также о том, как шаблон объявляет эти параметры.

Определения ресурсов подключения

{
   <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')]"
      }
   }
}
Атрибут Описание
token:clientId Приложение или идентификатор клиента, связанные с субъектом-службой.
token:clientSecret Значение ключа, связанное с субъектом-службой.
token:TenantId Идентификатор каталога вашего клиента Azure AD.
token:grantType Запрошенный тип предоставления разрешения, который должен иметь значение client_credentials. Дополнительные сведения см. в статье Платформа удостоверений Майкрософт и поток учетных данных клиента OAuth 2.0.

Определения параметров шаблона

Пример объявления параметров объектом верхнего уровня шаблона parameters для подключения:

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

Дополнительные сведения о работе с субъектами-службами:

Ссылки на параметры

Для ссылки на параметры шаблона можно использовать выражения шаблонов с функциями, которые оцениваются во время развертывания. В выражениях шаблона используются квадратные скобки ( [] ):

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

Для ссылки на параметры определения рабочего процесса используются выражения и функции языка определения рабочих процессов, которые оцениваются во время выполнения. Некоторые функции шаблона и функции определения рабочего процесса имеют одинаковые названия. Выражения определений рабочего процесса начинаются с символа @ :

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

Вы можете передать значения параметров шаблона в определение рабочего процесса, чтобы приложение логики использовало их во время выполнения. При этом не рекомендуется использовать параметры, выражения и синтаксис шаблона в определении рабочего процесса, так как конструктор приложений логики не поддерживает элементы шаблона. Кроме того, синтаксис и выражения шаблона могут усложнить код из-за различий в момент оценки выражений.

Вместо этого следуйте инструкциям о том, как объявлять и ссылаться на параметры определения рабочего процесса во время выполнения, объявлять и ссылаться на параметры шаблона во время развертывания, а также указывать значения, которые будут передаваться во время развертывания с помощью файла параметров. Полные сведения см. в разделе Определение и параметры рабочего процесса выше.

  1. Создайте шаблон и объявите его параметры для значений, которые следует принимать и использовать во время развертывания.

  2. В определении рабочего процесса объявите параметры для значений, которые следует принимать и использовать во время выполнения. Затем можно сослаться на эти значения по всему определению рабочего процесса и в нем.

  3. В объекте parameters, который находится вне определения рабочего процесса, но внутри определения ресурсов приложения логики, задайте значения параметров определения рабочего процесса, указав соответствующие параметры шаблона. Таким образом можно передать значения параметров шаблона в параметры определения рабочего процесса.

  4. В файле параметров укажите значения для шаблона, который будет использоваться во время развертывания развертывании.

Пример шаблона

Ниже приведен пример параметризованного шаблона, который используется в примерах этой статьи.

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

Дальнейшие действия