Шаблоны ARM для развертывания ваших ресурсов в Azure

Tags: Azure

На прошлой неделе мы говорили о непрерывной интеграции и развертывании в Azure. Мы создали службу приложений и развернули приложение .NET Core с помощью Visual Studio Team Services (VSTS), Azure и Visual Studio. В этой статье мы рассмотрим развертывание ваших ресурсов Azure или инфраструктуры с помощью Azure Resource Manager и ARM Templates. В этом сообщении мы снова будем использовать Azure, VSTS и Visual Studio 2017. Мы рекомендуем вам прочитать предыдущий пост, если вы еще не знакомы с Azure и VSTS.

Пример кода для этого сообщения можно найти здесь.

Шаблоны ARM

Итак, что это за шаблон Azure Resource Manager или ARM? В принципе, это только некоторые JSON, которые описывают ресурсы, такие как службы приложений, базы данных и учетные записи хранилища, которые вы хотите иметь в Azure. Azure может обрабатывать этот шаблон и создавать или обновлять наши ресурсы на основе шаблона. Это также называется Инфраструктура как код или (IaC). Предполагается, что вы знаете, что такое JSON, поэтому мы не будем объяснять это здесь.

Шаблоны ARM являются декларативными, что означает, что вы описываете то, что вы хотите, а не как вы хотите это видеть. На практике это означает, что вы не пишете код для фактического создания ресурсов, а просто указываете, какие ресурсы вы хотите иметь.

Шаблоны ARM в Azure

Итак, давайте посмотрим, как это выглядит. Если вы перейдете на ресурс в Azure, любой ресурс, вы сможете получить шаблон ARM из меню слева. У нас все еще есть imunique Web App из предыдущего поста, поэтому давайте посмотрим, как это выглядит. Просто найдите пункт меню Automation Script.

 

С левой стороны панели, которая открывается, вы можете найти различные узлы, которые составляют шаблон ARM.

Узлы шаблонов ARM

Как вы можете видеть, этот (сгенерированный) шаблон имеет три входных параметра, без переменных и три реальных ресурса. Параметр - это вход для скрипта, переменная - вычисленное значение. Пока нас больше интересуют ресурсы. У нас есть «serverfarm» или план хостинга; фактическое веб-приложение, imunique; и привязка имени узла, что делает ваше веб-приложение доступным на imunique.azurewebsites.net (Azure создала это для нас).

Вот часть фактического шаблона JSON, описывающего (часть) веб-приложения.

Итак, есть хорошие новости и плохие новости. Хорошей новостью является то, что Azure может создать для нас большинство шаблонов ARM. Плохая новость заключается в том, что они не всегда имеют высокое или даже полезное качество. Конечно, мы можем настроить их, как нам нравится.

Проекты Azure Resource Group

Давайте создадим собственный шаблон ARM. Откройте Visual Studio 2017 и создайте новый проект «Azure Resource Group» (находится в разделе «Облако») и назовите его как угодно. Мы назвали свое решение AzureResourceSamples, и у разных проектов есть шаблоны ARM для разных ресурсов. Вы также можете найти его здесь.

После создания проекта вы можете выбрать предварительно определенный шаблон из Visual Studio, например, веб-приложение. Вы также можете получить шаблон из шаблонов Azure Quickstart в GitHub. Их буквально сотни, от веб-приложений до виртуальных машин до баз данных. Вы также можете выбрать пустой шаблон, возможно добавить ресурсы позже. Я выбрал «Веб-приложение» из шаблонов Visual Studio. Это создает веб-приложение с планом хостинга, Application Insights и автомасштабированием. Шаблон ARM можно найти в файле WebSite.json. Рекомендуем тщательно его изучить.

Первое, что мы можем сделать, это щелкнуть правой кнопкой мыши «AutoScaleSettings» в контуре JSON и удалить его. На данный момент нам также не нужны все правила предупреждений Application Insights, поэтому также удалите их. На самом деле, давайте оставим его простым и удалим «AppInsightsComponent». У нас остался очень простой шаблон, который просто создает план хостинга и веб-приложение. Вот узел ресурсов, в котором есть веб-приложение и план хостинга, но не параметры и переменные.

 

"resources": [
 {
   "apiVersion": "2015-08-01",
   "name": "[parameters('hostingPlanName')]",
   "type": "Microsoft.Web/serverfarms",
   "location": "[resourceGroup().location]",
   "tags": {
     "displayName": "HostingPlan"
   },
   "sku": {
     "name": "[parameters('skuName')]",
     "capacity": "[parameters('skuCapacity')]"
   },
   "properties": {
     "name": "[parameters('hostingPlanName')]"
   }
 },
 {
   "apiVersion": "2015-08-01",
   "name": "[variables('webSiteName')]",
   "type": "Microsoft.Web/sites",
   "location": "[resourceGroup().location]",
   "tags": {
     "[concat('hidden-related:', resourceGroup().id, '/providers/Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]": "Resource",
     "displayName": "Website"
   },
   "dependsOn": [
     "[resourceId('Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]"
   ],
   "properties": {
     "name": "[variables('webSiteName')]",
     "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', parameters('hostingPlanName'))]"
   }
 }
]

 

Развертывание в Visual Studio

Теперь давайте разберем их в Azure с помощью Visual Studio. Просто нажмите правой кнопкой мыши на свой проект и выберите «Deploy», а затем «New» в раскрывающемся меню. В появившейся форме вы можете установить свою учетную запись Microsoft, свою подписку Azure, группу ресурсов, которую вы хотите развернуть, и параметры шаблона (они хранятся в файле * .parameters.json). Убедитесь, что вы заполняете свои значения параметров, или развертывание завершится с ошибкой. Теперь просто нажмите кнопку «Deploy» и перейдите на свой портал Azure. Если все пойдет правильно, вы должны увидеть новый план хостинга и новое веб-приложение в выбранной вами группе ресурсов.

Если ресурс, который вы развертываете, уже существует, Azure обновит этот ресурс, чтобы он соответствовал шаблону ARM. Вы можете установить буквально каждое свойство, которое вы можете установить через портал Azure в шаблоне ARM.

Несколько заметок, рассматривающих синтаксис шаблонов ARM: когда вам нужна нестатическая строка (параметр, переменная или результат функции), вы можете использовать синтаксис «[...]». Чтобы использовать параметр, вы можете использовать «[parameter ('paramName')]» и использовать переменную, которую вы можете использовать «[variable ('varName')]». Другая очень удобная функция - concat, которую вы можете использовать как [concat('staticstring', variable('nonstatic'))]  Другими полезными функциями являются resourceGroup() и subscription(), которые могут использоваться для получения идентификатора или местоположения текущей группы ресурсов или идентификатора подписки.

Развертывание на ресурсе

Поскольку вы можете повторно использовать планы хостинга, вы можете не захотеть их развернуть. Создание шаблона только с хостинговым планом легко. Просто создайте пустой шаблон и добавьте ресурс «App Service Plan (Server Farm)». Результат в значительной степени соответствует тому, что мы уже имели в предыдущем примере, но без веб-приложения

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

Параметры

Первое, что мы собираемся сделать, это добавить наши собственные параметры. Мы хотим иметь возможность устанавливать хостинг-план, группу ресурсов плана хостинга (по умолчанию Azure будет выглядеть в текущей группе ресурсов) и имя вашего веб-приложения,  что нам не нужно случайное имя, как в предыдущем примере. Мы задали значения «hostingPlanName» и «hostingPlanResourceGroup» по умолчанию, потому что мы, скорее всего, будем использовать эти значения (пока).

"parameters": {
 "hostingPlanName": {
   "defaultValue": "MySamplePlan",
   "type": "string"
 },
 "hostingPlanResourceGroup": {
   "defaultValue": "imunique",
   "type": "string"
 },
 "webSiteName": {
   "type": "string"
 }
},

Переменные

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

"variables": {
   "serverFarmId": "[concat('subscription/', subscription().id ,'/resourceGroups/', parameters('hostingPlanResourceGroup'),'/providers/Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]"
 },
 "resources": [
   {
     "apiVersion": "2015-08-01",
     "name": "[parameters('webSiteName')]",
     "type": "Microsoft.Web/sites",
     "location": "[resourceGroup().location]",
     "tags": {
       "[concat('hidden-related:', variables('serverFarmId'))]": "Resource",
       "displayName": "Website"
     },
     "properties": {
       "name": "[parameters('webSiteName')]",
       "serverFarmId": "[variables('serverFarmId')]"
     }
   }
 ]

Теперь попробуйте снова установить его в новую группу ресурсов, но сохраните существующий план хостинга из уже существующей группы ресурсов. Теперь вы можете развернуть это веб-приложение в любой группе ресурсов, используя любой план хостинга в любой другой группе ресурсов (в рамках одной и той же подписки).

Подключение VSTS к Azure Active Directory

Прежде чем мы пойдем дальше, мы должны сделать одну мелочь. Направляйтесь к Azure и ищите Team Services administration. Вы должны уметь видеть свою учетную запись VSTS. Просто нажмите на свою учетную запись и в появившейся панели параметров нажмите кнопку «Connect AAD». Это приведет к подключению ваших пользователей VSTS к Azure Active Directory (AAD). Нам понадобится это, когда мы начнем настраивать развертывание ресурсов для Azure в VSTS.

 

VSTS в Azure

Если это не заработает сразу, попробуйте сначала перейти в Azure AD и создать там каталог, а затем попробуйте снова подключиться.

Непрерывное развертывание с использованием VSTS

Теперь мы готовы развернуть наши шаблоны ARM с помощью наших веб-приложений или просто как самостоятельный выпуск. Перейдите к VSTS и создайте новый проект или используйте существующий. В своем проекте перейдите на вкладку релизов, создайте новый конвейер и выберите «Empty process».

Вы можете разместить примеры в VSTS. Мы использовали GitHub, и он идеален, чтобы подключить GitHub к VSTS (хотя это не входит в объем этой публикации, так что вам придется это понять). Это действительно легко сделать, просто создайте новый конвейер, добавьте артефакт и установите GitHub как тип источника. Оттуда VSTS проведет вас через настройку авторизации GitHub для VSTS.

Во всяком случае, создайте новый конвейер выпуска и установите артефакт в репозиторий шаблонов ARM. Вы можете включить непрерывное развертывание (используя значок молнии в верхнем правом углу вашего артефакта). Переименуйте среду в «Dev» или во что-то другое.

Следующее, что нам нужно установить, это шаблон - «Template». Это поле имеет кнопку обзора для нашего удобства, поэтому используйте его и выберите «WebSite.json» в папке «WebApp», чтобы VSTS создавал или обновлял веб-приложение. Сделайте то же самое для «Template parameters», но вместо этого выберите файл «WebSite.parameters.json». В поле «Override template parameters» вы можете переопределить параметры, которые вы должны сделать. «HostPlanName» и «hostPlanResourceName» должны иметь правильное значение по умолчанию, но вы можете захотеть изменить «webSiteName».

Как только вы их установите, вы готовы! Дайте вашему конвейеру имя, сохраните его и создайте новую версию. Если все будет хорошо, ваше веб-приложение должно быть создано в вашей учетной записи Azure.

Если все будет хорошо, вы можете клонировать среду Dev и просто перезаписать свои параметры (и, возможно, изменить группу ресурсов) и создать тестовую среду.

Завершение

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




No Comments

Add a Comment