Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье показано, как развернуть шаблон Azure Resource Manager с помощью C#. Создаваемый шаблон развертывает одну виртуальную машину под управлением Windows Server в новой виртуальной сети с одной подсетью.
Подробное описание ресурса виртуальной машины см. в разделе "Виртуальные машины" в шаблоне Azure Resource Manager. Дополнительные сведения обо всех ресурсах в шаблоне см. в пошаговом руководстве по шаблону Azure Resource Manager.
Для выполнения этих действий требуется около 10 минут.
Создание проекта Visual Studio
На этом шаге необходимо установить Visual Studio и создать консольное приложение, используемое для развертывания шаблона.
- Если вы еще не сделали этого, установите Visual Studio. Выберите .NET разработку настольных приложений на странице "Рабочие нагрузки" и нажмите Установить. В сводке вы увидите, что для вас автоматически выбраны средства разработки .NET Framework 4 –4.6 . Если вы уже установили Visual Studio, можно добавить рабочую нагрузку .NET с помощью средства запуска Visual Studio.
- В Visual Studio щелкните "Файл>нового>проекта".
- В шаблонах>Visual C# выберите консольное приложение (.NET Framework), введите myDotnetProject для имени проекта, выберите расположение проекта и нажмите кнопку "ОК".
Установка пакетов
Пакеты NuGet — это самый простой способ установить библиотеки, необходимые для выполнения этих действий. Чтобы получить необходимые библиотеки в Visual Studio, сделайте следующее:
Щелкните " Сервис>Nuget Package Manager" и выберите консоль диспетчера пакетов.
Введите следующие команды в консоли:
Install-Package Microsoft.Azure.Management.Fluent Install-Package WindowsAzure.Storage
Создание файлов
На этом шаге вы создадите файл шаблона, который развертывает ресурсы и файл параметров, предоставляющий значения параметров шаблону. Вы также создаете файл авторизации, используемый для выполнения операций Azure Resource Manager.
Создание файла шаблона
В обозревателе решений щелкните правой кнопкой мыши myDotnetProject>Добавить>новый элемент и выберите текстовый файл в элементах Visual C#. Присвойте файлу имяCreateVMTemplate.jsonи нажмите кнопку "Добавить".
Добавьте этот код JSON в созданный файл:
{ "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "adminUsername": { "type": "string" }, "adminPassword": { "type": "securestring" } }, "variables": { "vnetID": "[resourceId('Microsoft.Network/virtualNetworks','myVNet')]", "subnetRef": "[concat(variables('vnetID'),'/subnets/mySubnet')]", }, "resources": [ { "apiVersion": "2016-03-30", "type": "Microsoft.Network/publicIPAddresses", "name": "myPublicIPAddress", "location": "[resourceGroup().location]", "properties": { "publicIPAllocationMethod": "Dynamic", "dnsSettings": { "domainNameLabel": "myresourcegroupdns1" } } }, { "apiVersion": "2016-03-30", "type": "Microsoft.Network/virtualNetworks", "name": "myVNet", "location": "[resourceGroup().location]", "properties": { "addressSpace": { "addressPrefixes": [ "10.0.0.0/16" ] }, "subnets": [ { "name": "mySubnet", "properties": { "addressPrefix": "10.0.0.0/24" } } ] } }, { "apiVersion": "2016-03-30", "type": "Microsoft.Network/networkInterfaces", "name": "myNic", "location": "[resourceGroup().location]", "dependsOn": [ "[resourceId('Microsoft.Network/publicIPAddresses/', 'myPublicIPAddress')]", "[resourceId('Microsoft.Network/virtualNetworks/', 'myVNet')]" ], "properties": { "ipConfigurations": [ { "name": "ipconfig1", "properties": { "privateIPAllocationMethod": "Dynamic", "publicIPAddress": { "id": "[resourceId('Microsoft.Network/publicIPAddresses','myPublicIPAddress')]" }, "subnet": { "id": "[variables('subnetRef')]" } } } ] } }, { "apiVersion": "2016-04-30-preview", "type": "Microsoft.Compute/virtualMachines", "name": "myVM", "location": "[resourceGroup().location]", "dependsOn": [ "[resourceId('Microsoft.Network/networkInterfaces/', 'myNic')]" ], "properties": { "hardwareProfile": { "vmSize": "Standard_DS1" }, "osProfile": { "computerName": "myVM", "adminUsername": "[parameters('adminUsername')]", "adminPassword": "[parameters('adminPassword')]" }, "storageProfile": { "imageReference": { "publisher": "MicrosoftWindowsServer", "offer": "WindowsServer", "sku": "2012-R2-Datacenter", "version": "latest" }, "osDisk": { "name": "myManagedOSDisk", "caching": "ReadWrite", "createOption": "FromImage" } }, "networkProfile": { "networkInterfaces": [ { "id": "[resourceId('Microsoft.Network/networkInterfaces','myNic')]" } ] } } } ] }
Сохраните файл CreateVMTemplate.json.
Создание файла параметров
Чтобы указать значения параметров ресурса в шаблоне, создайте файл параметров, содержащий значения.
В обозревателе решений щелкните правой кнопкой мыши myDotnetProject>Добавить>новый элемент и выберите текстовый файл в элементах Visual C#. Присвойте файлу имяParameters.jsonи нажмите кнопку "Добавить".
Добавьте этот код JSON в созданный файл:
{ "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json", "contentVersion": "1.0.0.0", "parameters": { "adminUserName": { "value": "azureuser" }, "adminPassword": { "value": "Azure12345678" } } }
Сохраните файл Parameters.json.
Создание файла авторизации
Прежде чем развернуть шаблон, убедитесь, что у вас есть доступ к субъекту-службе Active Directory. Из учетной записи службы вы получаете токен для проверки подлинности запросов в Azure Resource Manager. Кроме того, необходимо записать идентификатор приложения, ключ проверки подлинности и идентификатор клиента, необходимый в файле авторизации.
В обозревателе решений щелкните правой кнопкой мыши myDotnetProject>Добавить>новый элемент и выберите текстовый файл в элементах Visual C#. Назовите файл azureauth.properties, а затем нажмите Добавить.
Добавьте следующие свойства авторизации:
subscription=<subscription-id> client=<application-id> key=<authentication-key> tenant=<tenant-id> managementURI=https://management.core.windows.net/ baseURL=https://management.azure.com/ authURL=https://login.windows.net/ graphURL=https://graph.microsoft.com/
Замените <идентификатор подписки> вашим идентификатором подписки, <идентификатор приложения> идентификатором приложения Active Directory, <ключ проверки подлинности> ключом приложения, и <идентификатор арендатора> идентификатором клиента.
Сохраните файл azureauth.properties.
Задайте переменную среды в Windows с именем AZURE_AUTH_LOCATION с полным путем к созданному файлу авторизации, например можно использовать следующую команду PowerShell:
[Environment]::SetEnvironmentVariable("AZURE_AUTH_LOCATION", "C:\Visual Studio 2019\Projects\myDotnetProject\myDotnetProject\azureauth.properties", "User")
Создание клиента управления
Откройте файл Program.cs для созданного проекта. Затем добавьте эти инструкции using к существующим инструкциям в верхней части файла.
using Microsoft.Azure.Management.Compute.Fluent; using Microsoft.Azure.Management.Compute.Fluent.Models; using Microsoft.Azure.Management.Fluent; using Microsoft.Azure.Management.ResourceManager.Fluent; using Microsoft.Azure.Management.ResourceManager.Fluent.Core; using Microsoft.WindowsAzure.Storage; using Microsoft.WindowsAzure.Storage.Blob;
Чтобы создать клиент управления, добавьте этот код в метод Main:
var credentials = SdkContext.AzureCredentialsFactory .FromFile(Environment.GetEnvironmentVariable("AZURE_AUTH_LOCATION")); var azure = Azure .Configure() .WithLogLevel(HttpLoggingDelegatingHandler.Level.Basic) .Authenticate(credentials) .WithDefaultSubscription();
Создайте группу ресурсов
Чтобы указать значения для приложения, добавьте код в метод Main:
var groupName = "myResourceGroup";
var location = Region.USWest;
var resourceGroup = azure.ResourceGroups.Define(groupName)
.WithRegion(location)
.Create();
Создание учетной записи хранения
Шаблон и параметры развертываются из учетной записи хранения в Azure. На этом шаге вы создадите учетную запись и отправьте файлы.
Чтобы создать учетную запись, добавьте этот код в метод Main:
string storageAccountName = SdkContext.RandomResourceName("st", 10);
Console.WriteLine("Creating storage account...");
var storage = azure.StorageAccounts.Define(storageAccountName)
.WithRegion(Region.USWest)
.WithExistingResourceGroup(resourceGroup)
.Create();
var storageKeys = storage.GetKeys();
string storageConnectionString = "DefaultEndpointsProtocol=https;"
+ "AccountName=" + storage.Name
+ ";AccountKey=" + storageKeys[0].Value
+ ";EndpointSuffix=core.windows.net";
var account = CloudStorageAccount.Parse(storageConnectionString);
var serviceClient = account.CreateCloudBlobClient();
Console.WriteLine("Creating container...");
var container = serviceClient.GetContainerReference("templates");
container.CreateIfNotExistsAsync().Wait();
var containerPermissions = new BlobContainerPermissions()
{ PublicAccess = BlobContainerPublicAccessType.Container };
container.SetPermissionsAsync(containerPermissions).Wait();
Console.WriteLine("Uploading template file...");
var templateblob = container.GetBlockBlobReference("CreateVMTemplate.json");
templateblob.UploadFromFileAsync("..\\..\\CreateVMTemplate.json").Result();
Console.WriteLine("Uploading parameters file...");
var paramblob = container.GetBlockBlobReference("Parameters.json");
paramblob.UploadFromFileAsync("..\\..\\Parameters.json").Result();
Развертывание шаблона
Разверните шаблон и параметры из созданной учетной записи хранения.
Чтобы развернуть шаблон, добавьте этот код в метод Main:
var templatePath = "https://" + storageAccountName + ".blob.core.windows.net/templates/CreateVMTemplate.json";
var paramPath = "https://" + storageAccountName + ".blob.core.windows.net/templates/Parameters.json";
var deployment = azure.Deployments.Define("myDeployment")
.WithExistingResourceGroup(groupName)
.WithTemplateLink(templatePath, "1.0.0.0")
.WithParametersLink(paramPath, "1.0.0.0")
.WithMode(Microsoft.Azure.Management.ResourceManager.Fluent.Models.DeploymentMode.Incremental)
.Create();
Console.WriteLine("Press enter to delete the resource group...");
Console.ReadLine();
Удаление ресурсов
Так как плата взимается за ресурсы, используемые в Azure, всегда рекомендуется удалять ресурсы, которые больше не нужны. Вам не нужно удалять каждый ресурс отдельно от группы ресурсов. Удалите группу ресурсов и все ее ресурсы автоматически удаляются.
Чтобы удалить группу ресурсов, добавьте этот код в метод Main:
azure.ResourceGroups.DeleteByName(groupName);
Запуск приложения
Для полного запуска консольного приложения потребуется около пяти минут.
Чтобы запустить консольное приложение, нажмите кнопку "Пуск".
Прежде чем нажать клавишу ВВОД, чтобы начать удаление ресурсов, вы можете потратить несколько минут на проверку создания ресурсов в портале Azure. Нажмите на статус развертывания, чтобы увидеть информацию о развертывании.
Дальнейшие действия
- Если при развертывании возникли проблемы, необходимо ознакомиться с распространенными ошибками развертывания Azure с помощью Azure Resource Manager.
- Узнайте, как развернуть виртуальную машину и ее вспомогательные ресурсы, просмотрите раздел "Развертывание виртуальной машины Azure с помощью C#".