Использование функций Azure Resource Manager для экономии времени при создании шаблонов ARM
Использование Azure Resource Manager с шаблонами помогает организации создавать ресурсы и решения Azure предсказуемым и согласованным образом. В этой статье мы собираемся создавать шаблоны ARM и исследовать процесс именования ресурсов, определения местоположения и обеспечения того, чтобы API был динамическим, а не вводился вручную.vi
Именование ваших ресурсов
При развертывании ресурсов у облачного администратора есть несколько вариантов: выбрать имя на лету, использовать соглашение об именовании или сочетание, при котором часть имени вводится при запуске шаблона ARM, а затем к нему добавляются некоторые случайные символы.
При создании шаблонов ARM мы можем начать просто с запроса префикса ресурса (в нашем случае мы создадим параметр с именем StorageAccount. Мой любимый метод — использовать , что означает, что если пользователь ничего не вводит, мы используем предопределенный как стандартное значение.
«параметры»: {
«StorageAccountPrefix»: {
«тип»: «строка»,
«значение по умолчанию»: «ap6sa6»
}
},
На данный момент у нас определен префикс, но учетные записи хранения, как и некоторые другие ресурсы в Microsoft Azure, должны иметь уникальное имя. Лучший способ добиться этого — использовать функцию uniqueString(), которая создаст хэш значения, которое мы вводим между скобками. Поскольку мы хотим быть как можно более динамичными, мы можем использовать функцию resourcegroup().id, которая вернет идентификатор ресурса текущей группы ресурсов. Объединение обеих функций сгенерирует хэш из 13 символов, который мы добавим к префиксу, который мы определили в разделе параметров.
Еще одна часть головоломки — у нас есть префикс, который мы будем использовать для учетной записи хранения, и мы знаем, как создать уникальную и согласованную строку для добавления, но нам нужно объединить обе эти части информации. Мы можем сделать это с помощью функции concat(), которая собирает всю добавленную нами информацию.
В конце концов, мы хотим сохранить простоту и сохранить как можно больше недвижимости. При этом мы можем использовать , которая будет применять три функции, которые мы только что видели, в одной строке. Вот нашего исходного шаблона ARM.
«переменные»: {
«vStorageAccountName»: «[concat (параметры ('StorageAccountPrefix'), uniqueString (resourceGroup (). ID))]»
},
Указание вашего местоположения
Один атрибут, который необходимо определить, — это нового ресурса, который мы пытаемся развернуть. Если мы используем Visual Studio, мы можем воспользоваться возможностями IntelliSense, которые предоставят все доступные возможности. Это хорошо работает для атрибута местоположения, как показано на изображении ниже. Примечание. Если вы не получаете эту информацию, нажмите Ctrl + Space, и отобразится список.
Однако определение местоположения допустимо, если нам нужно выполнить развертывание в разных средах — нам, возможно, придется вернуться к коду и ввести новое местоположение, что не очень хорошо, верно? Мы можем воспользоваться функцией ResourceGroup().location, и вместо нее будет использоваться расположение группы ресурсов, что сэкономит время и сохранит шаблон ARM в чистоте, а также позволит избежать ненужных ручных изменений.
Вместо ввода имени местоположения просто добавьте код, и ваше местоположение всегда будет использовать одно и то же местоположение группы ресурсов, что имеет смысл — обычно вы хотите развернуть свои ресурсы в том же месте, где находится ваша группа ресурсов.
«местоположение»: «[resourceGroup().location]»,
Определение вашей версии API
Что диктует, какие функции доступны в шаблоне ARM, так это API, который мы используем, и при использовании последнего API у нас есть доступ ко всем интересным ресурсам. В некоторых случаях нам может потребоваться форсировать определенный API, хотя это должно быть исключением, а не правилом. Мы будем использовать новейший API, доступный в качестве стандарта.
Мы можем использовать функцию Providers(), где мы указываем поставщика и тип ресурса и получаем первую позицию (последний доступный API) массива, содержащего все доступные версии API.
"apiVersion": "[providers('Microsoft.Storage','storageAccounts').apiVersions[0]]"
Чтобы проверить API, доступный для любого данного поставщика ресурсов, мы можем использовать следующий командлет (элементы, выделенные жирным шрифтом, должны быть заменены в соответствии с вашими требованиями — в этом примере мы проверяем Microsoft.Storage/storageAccounts). Имейте в виду, что мы также можем использовать преимущества IntelliSense при использовании Visual Studio.
Если вы хотите проверить с помощью PowerShell, убедитесь, что вы подключены к Microsoft Azure, и выполните следующий командлет.
((Get-AzureRmResourceProvider -ProviderNamespace Microsoft.Storage).ResourceTypes | where { $_.ResourceTypeName -eq "storageAccounts" } ).ApiVersions
Создание учетной записи хранения
Пришло время добавить функции, которые мы рассмотрели в предыдущих разделах, в простом развертывании ресурсов. Мы начнем с простой учетной записи хранения. Мы будем использовать Visual Studio, чтобы добавить ресурс в совершенно новый шаблон ARM, и мы включим изменения, которые мы представили в этой статье.
Окончательный сценарий теоретически будет похож на приведенный ниже код. Если пользователь ничего не добавляет, будет использоваться учетная запись хранения, использующая наше соглашение об именах (префикс ap6sa6<randon>).
Прелесть этого кода в том, что мы не указываем местоположение (используя местоположение группы ресурсов). API и имя добавляются автоматически и без ручного вмешательства.
{
«$schema»: «https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#»,
«Версия контента»: «1.0.0.0»,
«параметры»: {
«StorageAccountPrefix»: {
«тип»: «строка»,
«значение по умолчанию»: «ap6sa6»
},
«StorageAccountType»: {
«тип»: «строка»,
«значение по умолчанию»: «Стандарт_LRS»,
«допустимые значения»: [
«Стандарт_LRS»,
«Стандарт_ЗРС»,
«Стандарт_GRS»,
«Стандарт_РАГРС»,
«Премиум_LRS»
]
}
},
«переменные»: {
«vStorageAccountName»: «[concat (параметры ('StorageAccountPrefix'), uniqueString (resourceGroup (). ID))]»
},
"Ресурсы": [
{
«имя»: «[переменные ('vStorageAccountName')]»,
«тип»: «Microsoft.Storage/storageAccounts»,
«местоположение»: «[resourceGroup().location]»,
«apiVersion»: «[провайдеры ('Microsoft.Storage', 'storageAccounts').apiVersions[0]]»,
"арт": {
«имя»: «[параметры ('StorageAccountType')]»
},
"зависит от": [],
«вид»: «Хранение»
}
],
«выходы»: {}
}
Существует несколько способов протестировать развертывание. Самый простой — проверить портал Azure. У нас должен быть развернут ресурс, как показано на изображении ниже.
На уровне группы ресурсов мы можем проверить развертывания и проверить ввод, вывод и сам шаблон, который использовался для развертывания ресурсов в группе ресурсов, включая создание нашей учетной записи хранения с использованием шаблонов ARM.
Проверка вашего кода с помощью раздела вывода
Использование приведенного выше кода и некоторых методов для проверки правильности развертывания ресурса определенно полезно. Однако мы можем воспользоваться разделом в шаблоне ARM, чтобы отправить некоторую информацию обратно, и это помогает при устранении неполадок.
Например, добавление приведенного ниже кода для указания имени учетной записи хранения, используемой версии API, ее местоположения и т. д. может оказаться полезным.
«выходы»: {
«Имя учетной записи хранения»: {
«тип»: «строка»,
«значение»: «[переменные ('vStorageAccountName')]»
},
«Версия API учетной записи хранения»: {
«тип»: «строка»,
«значение»: «[провайдеры ('Microsoft.Storage','storageAccounts').apiVersions[0]]”
},
«Идентификатор ресурса учетной записи хранилища»: {
«тип»: «строка»,
«value»: «[resourceId('Microsoft.Storage/storageAccounts',variables('vStorageAccountName'))]”
},
«Расположение учетной записи хранения»: {
«тип»: «строка»,
«значение»: «[resourceGroup().location]»
}
}
}
При развертывании с помощью Visual Studio мы видим вывод в окне вывода и можем проверить результаты, как показано на изображении ниже.
Как видите, использование функций ARM при создании шаблонов ARM относительно безболезненно и принесет много пользы.