Развертывание рабочего процесса Azure Logic Apps с помощью шаблона Azure Resource Manager

Завершено

Если вы работаете с Azure достаточно долго, то, скорее всего, слышали об Azure Resource Manager. Давайте обсудим назначение Resource Manager и посмотрим, из чего состоит шаблон Resource Manager.

Что такое Azure Resource Manager

Azure Resource Manager — это интерфейс для организации облачных ресурсов и управления ими. Resource Manager можно рассматривать как средство развертывания облачных ресурсов.

Если вы знакомы с группами ресурсов Azure, вы знаете, что они позволяют рассматривать наборы связанных ресурсов как единую единицу. Именно Resource Manager обеспечивает формирование групп ресурсов, которые позволяют развертывать все ресурсы, управлять ими или удалять их одновременно.

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

Что такое шаблоны Resource Manager

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

Шаблон Resource Manager представляет собой файл JSON, то есть обеспечивает декларативную автоматизацию. Декларативная автоматизация означает, что вы определяете необходимые ресурсы, но не то, как они создаются. Иными словами, вы просто указываете, что вам требуется, а Resource Manager отвечает за правильное развертывание ресурсов.

Декларативную автоматизацию можно уподобить тому, как файлы HTML отображаются в веб-браузерах. Файл HTML описывает то, какие элементы должны отображаться на странице, но не то, как они отображаются. За способ отображения отвечает веб-браузер.

Примечание.

Вы можете услышать шаблоны Resource Manager, называемые шаблонами ARM. Мы предпочитаем полные имена шаблонов Azure Resource Manager или шаблонов Resource Manager.

Зачем нужны шаблоны Resource Manager

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

Вот еще некоторые преимущества:

  • Шаблоны повышают согласованность.

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

  • Шаблоны упрощают срочные и сложные развертывания.

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

  • Шаблоны сокращают количество выполняемых вручную задач, чреватых ошибками.

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

  • Шаблоны — это код.

    Шаблоны позволяют выражать требования в виде кода. Их можно рассматривать в качестве инфраструктуры как кода, то есть их можно использовать совместно, тестировать и управлять их версиями так же, как в случае с любым другим программным обеспечением. Кроме того, поскольку шаблоны представляют собой код, они позволяют документировать ход развертывания. Большинство пользователей хранят шаблоны в одной из систем управления версиями, например Git. С помощью журнала изменений можно следить за тем, как шаблон (и развертывание) развивался с течением времени.

  • Шаблоны обеспечивают повторное использование.

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

  • Шаблоны можно связывать.

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

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

Содержимое шаблона Resource Manager

Примечание.

Здесь приведено несколько примеров кода, которые дают представление о структуре каждого раздела. Не волнуйтесь, если увидите что-то незнакомое вам. Вы можете просматривать шаблоны других пользователей и писать свои собственные, так как вы получаете более практический опыт.

Возможно, вы уже использовали формат JavaScript Object Notation (нотация объектов JavaScript, или же JSON) для передачи данных между серверами и веб-приложениями. JSON — это популярный способ описания конфигурации приложений и инфраструктуры.

JSON позволяет выражать хранимые данные как объект, например виртуальная машина, в текстовой форме. По своей сути документ JSON является коллекцией пар "ключ-значение". Каждый ключ — это строка. Значением может быть строка, число, логическое выражение, список значений или объект, представляющий собой другую коллекцию пар "ключ-значение".

Шаблон Resource Manager может содержать перечисленные ниже разделы.

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

Хотя эти разделы выражаются с помощью JSON, они не связаны с языком JSON. Рассмотрим каждый раздел подробнее.

Параметры

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

Ниже приведен пример, демонстрирующий два параметра: один для имени пользователя виртуальной машины и один для его пароля.

"parameters": {
  "adminUsername": {
    "type": "string",
    "metadata": {
      "description": "Username for the Virtual Machine."
    }
  },
  "adminPassword": {
    "type": "securestring",
    "metadata": {
      "description": "Password for the Virtual Machine."
    }
  }
}

Переменные

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

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

"variables": {
  "nicName": "myVMNic",
  "addressPrefix": "10.0.0.0/16",
  "subnetName": "Subnet",
  "subnetPrefix": "10.0.0.0/24",
  "publicIPAddressName": "myPublicIP",
  "virtualNetworkName": "MyVNET"
}

Функции

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

"functions": [
  {
    "namespace": "contoso",
    "members": {
      "uniqueName": {
        "parameters": [
          {
            "name": "namePrefix",
            "type": "string"
          }
        ],
        "output": {
          "type": "string",
          "value": "[concat(toLower(parameters('namePrefix')), uniqueString(resourceGroup().id))]"
        }
      }
    }
  }
],

Ресурсы

В этом разделе определяются ресурсы Azure, составляющие развертывание.

Ниже приведен пример создания ресурса общедоступного IP-адреса.

{
  "type": "Microsoft.Network/publicIPAddresses",
  "name": "[variables('publicIPAddressName')]",
  "location": "[parameters('location')]",
  "apiVersion": "2018-08-01",
  "properties": {
    "publicIPAllocationMethod": "Dynamic",
    "dnsSettings": {
      "domainNameLabel": "[parameters('dnsLabelPrefix')]"
    }
  }
}

В этом случае тип ресурса — Microsoft.Network/publicIPAddresses. Его имя считывается из раздела переменных и его расположения (или региона Azure) считывается из раздела параметров.

Так как типы ресурсов могут со временем меняться, в apiVersion указывается версия, которую требуется использовать. По мере изменения типов ресурсов вы можете настраивать шаблоны для работы с новейшими функциями.

Выходные данные

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

В следующем примере показаны выходные данные с именем hostname. Полное доменное имя считывается из параметров общедоступного IP-адреса виртуальной машины.

"outputs": {
  "hostname": {
    "type": "string",
    "value": "[reference(variables('publicIPAddressName')).dnsSettings.fqdn]"
  }
}

Как развернуть рабочий процесс Azure Logic Apps в шаблоне?

Рабочий процесс Azure Logic Apps является ресурсом в Azure. Поэтому мы можем развернуть его в шаблоне, добавив его в список ресурсов для развертывания в resources разделе шаблона Resource Manager. Что конкретно можно добавить в раздел "Ресурсы", чтобы определить рабочий процесс? Мы добавляем определение рабочего процесса JSON в раздел "Ресурсы". Фактически, следующий фрагмент JSON демонстрирует шаблон Resource Manager для развертывания основного рабочего процесса, который описан в предыдущем разделе. Как видно из выделенного фрагмента, раздел "Ресурсы" содержит полное определение рабочего процесса.

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {},
    "variables": {},
    "resources": [
        {
            "type": "Microsoft.Logic/workflows",
            "apiVersion": "2017-07-01",
            "name": "HelloLogicAppsTemplate",
            "location": "westus2",
            "properties": {
                "state": "Enabled",
                "definition": {
                    "$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
                    "contentVersion": "1.0.0.0",
                    "parameters": {},
                    "triggers": {
                        "manual": {
                            "type": "Request",
                            "kind": "Http",
                            "inputs": {
                                "method": "GET",
                                "schema": {}
                            }
                        }
                    },
                    "actions": {
                        "Response": {
                            "runAfter": {},
                            "type": "Response",
                            "kind": "Http",
                            "inputs": {
                                "body": "Hello Logic Apps Template!",
                                "statusCode": 200
                            }
                        }
                    },
                    "outputs": {}
                },
                "parameters": {}
            }
        }
    ],
    "outputs": {
        "logicAppUrl": {
           "type": "string",
           "value": "[listCallbackURL(concat(resourceId('Microsoft.Logic/workflows/', 'HelloLogicAppsTemplate'), '/triggers/manual'), '2017-07-01').value]"
        }
     }
}

Развернуть этот шаблон можно с помощью одного из следующих методов:

  • развертывание с помощью портала Azure;
  • Развертывание с помощью модуля PowerShell Az
  • развертывание из Azure CLI.

В этом модуле мы будем развертывать шаблоны с помощью Azure CLI и команд az deployment group.

Как создается шаблон Resource Manager

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

Получить исходный шаблон можно несколькими способами:

  • на портале Azure создайте шаблон на основе ресурсов в существующей группе ресурсов;
  • начните работу с созданного вашей командой шаблона, который имеет похожее назначение;
  • Начните работу с шаблона быстрого запуска Azure. В следующей части вы узнаете, как это сделать.

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

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

В следующем уроке мы рассмотрим существующий шаблон, а затем развернем его из Azure CLI.