С того момента разработчик записывает кусок кода для поддержки новой функции или исправить ошибку, начинается путешествие. Это путешествие, надеюсь, начнутся с каких-либо комминтов и протолкнуть в систему контроля источника. Конечная цель путешествия довольно ясна, производство (что бы то ни было в контексте). То, что происходит между между ними, может быть коротким и простым или длинным и сложным, время, когда путешествие принимает, в основном определяется процессом обеспечения качества и уровнем автоматизации конвейера CI/CD.
Сборка и выпуск
В наши дни для команд довольно распространены свои сборки, автоматизированные и вызванные новыми фиксациями. На этом первом этапе CI также довольно распространено, чтобы запустить некоторую форму тестирования (единицы). Следующим шагом является процесс выпуска, в большинстве случаев этот процесс примет сборку и развертывает его к окружающей среде, независимо от того, является ли она средой Qa, кольцо, канареесть или прямо к производству.
Но где это выпущено? Раньше он был металлической коробкой, но в эти дни, скорее всего, виртуальная машина, контейнер или некоторая служба хип-облака. Поскольку цели развертывания были более статическими и состоятельными, их создание часто не автоматизировано. Если вы не можете воссоздать свою среду со своей конфигурацией с учетом документации или автоматизации, вы страдаете от технической задолженности, которую вы не должны недооценивать!
Сохранение документации идеально в курсе
Основываясь на эмпирических доказательствах, будет удаленная вероятность того, что это произойдет. И если бы это, это все еще крайне неэффективно.
// TODO: write some documentation // TODO: Remove this code after 2009-01-01
Инфраструктура как код
Создание ваших ресурсов автоматически быстро погасит реально. Допустим, вы мечтаете о своем новом кусочке кода, который использует некоторые услуги хранения и веб-сервис в Azure, это всего несколько кликов, чтобы создать их в портале Azure. Но вы, вероятно, сделаете это в безопасной среде развития, у вас есть весь доступ, о котором вы можете мечтать. Ваши две новые услуги и их конфигурация также будут развернуты в одной или нескольких испытательных средах и производственной среде. Скрипты и параметризация создания этих ресурсов их сделают вас более эффективными. Дополнительное преимущество заключается в том, что ваши сценарии могут быть рассмотрены, и что проблемы с нами, например, Конвенция об именах может быть замечено рано. Если вы относитесь к сценариям в качестве кода и храните их в системе управления версией, у вас есть идеальная историческая запись о том, как был создан ресурс.
Отлично давайте сделаем это! Скажи мне как!
Как всегда, есть более одного способа достичь этого. Azure обнажает API для манипулирования ресурсами, есть много инструментов, которые могут поговорить с этими API. На данный момент давайте сосредоточимся на параметрах, ближайших к самому Azure, которое может быть довольно легко вызвано на лазурном трубопроводе.
Следующие три варианта содержат пример, который принимается с официальных страниц документации Azure. Эти примеры показывают создание Azure Web App с планом обслуживания.
Шаблоны руки
Может быть, самый распространенный способ сделать «инфраструктуру в виде кода» в Azure — использовать шаблоны руки. ARM подписывается для Azure Resource Manager и был стандартным набором API в течение нескольких лет сейчас, сервисы, называемые «Classic» в Azure, контролируются ASM ASM (Azure Service Management).
Шаблоны ARM — это представление JSON одного или нескольких ресурсов в Azure. В одном шаблоне вы можете определить сложный набор ресурсов и их зависимости в группе ресурсов. Если вы находитесь в портале Azure, вы можете перейти на любой ресурс и экспортировать шаблон ARM, это звучит как путь, чтобы начать не так ли? Несмотря на то, что это звучит как идеальное и простое решение, это создаст сложный скрипт, который намного лучше читается машиной, чем человеком. Если вы посмотрите на пример ниже, он может быть достаточно читабелен, но для меня что-то вроде этого сложно писать с нуля без слишком большого количества опыта.
{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "webAppName": { "type": "string", "metadata": { "description": "Base name of the resource such as web app name and app service plan" }, "minLength": 2 }, "sku":{ "type": "string", "defaultValue" : "S1", "metadata": { "description": "The SKU of App Service Plan, by default is Standard S1" } }, "location": { "type": "string", "defaultValue": "[resourceGroup().location]", "metadata": { "description": "Location for all resources" } } }, "variables": { "webAppPortalName": "[concat(parameters('webAppName'), '-webapp')]", "appServicePlanName": "[concat('AppServicePlan-', parameters('webAppName'))]" }, "resources": [ { "apiVersion": "2018-02-01", "type": "Microsoft.Web/serverfarms", "kind": "app", "name": "[variables('appServicePlanName')]", "location": "[parameters('location')]", "properties": {}, "dependsOn": [], "sku": { "name": "[parameters('sku')]" } }, { "apiVersion": "2018-11-01", "type": "Microsoft.Web/sites", "kind": "app", "name": "[variables('webAppPortalName')]", "location": "[parameters('location')]", "properties": { "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', variables('appServicePlanName'))]" }, "dependsOn": [ "[resourceId('Microsoft.Web/serverfarms', variables('appServicePlanName'))]" ] } ] }
Azure CLI Scripts
Инструменты командной строки повсюду приобрели популярность в последние годы, поэтому имеет Azure CLI. Azure CLI в основном является версией командной строки Azure Portal с хорошей признательностью функций из-за функциональности встроенной справки. Поскольку вы можете сценарировать использование инструмента командной строки в PowerShell или Bash, вы можете создавать параметризованные сценарии автоматизации, которые вы можете хранить в управлении источником и запущенным в CD-трубопроводах. Поток создания ресурсов будет похож на шаги, которые вы обычно предпринимаете, чтобы создать что-то в портале.
az group create -l westeurope -n MyResourceGroup az appservice plan create -g MyResourceGroup -n MyPlan -l westeurope az webapp create -g MyResourceGroup -p MyPlan -n MyUniqueAppName
Библиотеки управления Azure для .NET
Обычно вы увидите эту библиотеку внутри частей вашего приложения, которая должна контролировать инфраструктуру в Azure. Например, если у вас есть Multi Talant SaaS-приложение, которое имеет базы данных SQL для каждого арендатора, вы можете использовать библиотеки для создания новой БД на новой регистрации клиента. Возможно, у вас есть некоторые действительно конкретные требования к масштабированию, которые вы можете автоматизировать из вашего приложения. Но если разработчики комфортно написать C # весь день, это также может быть прекрасным способом скрипта/кода создание ресурсов. С библиотеками управления Azure можно определить услуги, используя API.
IAzure azure = Azure.Authenticate(credFile).WithDefaultSubscription(); var webApp = azure.WebApps.Define(appName) .WithRegion(Region.USWest) .WithNewResourceGroup(rgName) .WithNewFreeAppServicePlan() .Create();
Делать выбор
Самая важная часть охватывает тот факт, что важно совершить определение инфраструктуры, который ваш код должен работать в систему контроля источника. Это все еще похоже, что официальная рекомендация — использовать шаблоны руки. Сильная часть шаблонов ARM — это то, что вы не определяете скрипт, но вы определяете состояние, в котором вы хотите, чтобы ваши ресурсы, это означает, что у вас воспроизводимое поведение, независимо от государства, с которым вы начинаете. Команды Azure CLI просты для записи с нуля, но вы не определяете полное состояние, как с шаблонами ARM, так что вам может потребоваться скрипт немного потока. Большинство команд являются идемпотентными и не будут бросать ошибки на отдыхе ресурса, но я обнаружил, что некоторые команды все еще имеют некоторые Неожиданное поведение Отказ Использование библиотек управления Azure обеспечивает максимальный контроль в комплексных установках, и они, безусловно, имеют свое место Но вы строете еще одно приложение вместо просто сценария.
Полезные ссылки:
Оригинал: «https://dev.to/oscarvantol/infrastructure-as-code-on-azure-1opn»