Wdrażanie maszyny wirtualnej platformy Azure przy użyciu języka C# i Resource Manager szablonu
W tym artykule pokazano, jak wdrożyć szablon usługi Azure Resource Manager użyciu języka C#. Szablon, który utworzysz, wdraża pojedynczą maszynę wirtualną z systemem Windows Server w nowej sieci wirtualnej z pojedynczą podsiecią.
Aby uzyskać szczegółowy opis zasobu maszyny wirtualnej, zobacz Virtual machines in an Azure Resource Manager template (Maszyny wirtualne w szablonie usługi Azure Resource Manager Wirtualne). Aby uzyskać więcej informacji na temat wszystkich zasobów w szablonie, zobacz Przewodnik po szablonie Resource Manager Azure.
Te kroki potrwają około 10 minut.
Tworzenie projektu programu Visual Studio
W tym kroku upewnisz się, że Visual Studio zainstalowana aplikacja konsolowa i aplikacja konsolowa używana do wdrażania szablonu.
- Jeśli nie zostało to jeszcze zainstalowane, zainstaluj Visual Studio. Wybierz pozycję Tworzenie aplikacji klasycznych dla programu .NET na stronie Obciążenia, a następnie kliknij przycisk Zainstaluj. W podsumowaniu widać, że automatycznie .NET Framework 4–4.6 narzędzi deweloperskie. Jeśli masz już zainstalowane Visual Studio, możesz dodać obciążenie .NET przy użyciu aplikacji Visual Studio Launcher.
- W Visual Studio kliknij pozycję PlikNowy>>Project.
- W pozycji>SzablonyVisual C# wybierz pozycję Aplikacja konsoli (.NET Framework),wprowadź nazwę projektu myDotnetProject, wybierz lokalizację projektu, a następnie kliknij przycisk OK.
Instalowanie pakietów
NuGet to najprostszy sposób instalowania bibliotek potrzebnych do ukończenia tych kroków. Aby uzyskać biblioteki potrzebne w programie Visual Studio, wykonaj następujące kroki:
Kliknij pozycjęNarzędziaNarzędzia> Menedżer pakietów, a następnie kliknij pozycję Menedżer pakietów Konsoli.
Wpisz następujące polecenia w konsoli:
Install-Package Microsoft.Azure.Management.Fluent Install-Package WindowsAzure.Storage
Tworzenie plików
W tym kroku utworzysz plik szablonu, który wdraża zasoby, oraz plik parametrów, który dostarcza wartości parametrów do szablonu. Utworzysz również plik autoryzacji, który jest używany do wykonywania operacji Resource Manager Azure.
Tworzenie pliku szablonu
W Eksplorator rozwiązań kliknij prawym przyciskiem myszy pozycję myDotnetProjectAddNowy>>element, a następnie wybierz pozycję Plik tekstowy w elementach Visual C#. Nadaj plikowi nazwę CreateVMTemplate.json, a następnie kliknij przycisk Dodaj.
Dodaj ten kod JSON do utworzonego pliku:
{ "$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')]" } ] } } } ] }
Zapisz plik CreateVMTemplate.json.
Tworzenie pliku parametrów
Aby określić wartości parametrów zasobów w szablonie, należy utworzyć plik parametrów zawierający wartości.
W Eksplorator rozwiązań kliknij prawym przyciskiem myszy pozycję myDotnetProjectAddNowy>>element, a następnie wybierz pozycję Plik tekstowy w elementach Visual C#. Nadaj plikowi nazwę Parameters.json, a następnie kliknij przycisk Dodaj.
Dodaj ten kod JSON do utworzonego pliku:
{ "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json", "contentVersion": "1.0.0.0", "parameters": { "adminUserName": { "value": "azureuser" }, "adminPassword": { "value": "Azure12345678" } } }
Zapisz plik Parameters.json.
Tworzenie pliku autoryzacji
Przed wdrożeniem szablonu upewnij się, że masz dostęp do jednostki usługi Active Directory. Z jednostki usługi uzyskujesz token do uwierzytelniania żądań do usługi Azure Resource Manager. Należy również zarejestrować identyfikator aplikacji, klucz uwierzytelniania i identyfikator dzierżawy, których potrzebujesz w pliku autoryzacji.
W Eksplorator rozwiązań kliknij prawym przyciskiem myszy pozycję myDotnetProjectAddNowy>>element, a następnie wybierz pozycję Plik tekstowy w elementach Visual C#. Nadaj plikowi nazwę azureauth.properties, a następnie kliknij przycisk Dodaj.
Dodaj następujące właściwości autoryzacji:
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/
Zastąp <element subscription-id> identyfikatorem subskrypcji, <identyfikatorem aplikacji> identyfikatorem aplikacji usługi Active Directory, <kluczem> uwierzytelniania kluczem aplikacji, <a identyfikator dzierżawy> identyfikatorem dzierżawy.
Zapisz plik azureauth.properties.
Ustaw zmienną środowiskową w Windows o nazwie AZURE_AUTH_LOCATION pełną ścieżką do utworzonego pliku autoryzacji, na przykład możesz użyć następującego polecenia programu PowerShell:
[Environment]::SetEnvironmentVariable("AZURE_AUTH_LOCATION", "C:\Visual Studio 2019\Projects\myDotnetProject\myDotnetProject\azureauth.properties", "User")
Tworzenie klienta zarządzania
Otwórz plik Program.cs dla utworzonego projektu. Następnie dodaj te instrukcje using do istniejących instrukcji w górnej części pliku:
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;
Aby utworzyć klienta zarządzania, dodaj ten kod do metody Main:
var credentials = SdkContext.AzureCredentialsFactory .FromFile(Environment.GetEnvironmentVariable("AZURE_AUTH_LOCATION")); var azure = Azure .Configure() .WithLogLevel(HttpLoggingDelegatingHandler.Level.Basic) .Authenticate(credentials) .WithDefaultSubscription();
Tworzenie grupy zasobów
Aby określić wartości dla aplikacji, dodaj kod do metody Main:
var groupName = "myResourceGroup";
var location = Region.USWest;
var resourceGroup = azure.ResourceGroups.Define(groupName)
.WithRegion(location)
.Create();
Tworzenie konta magazynu
Szablon i parametry są wdrażane z konta magazynu na platformie Azure. W tym kroku utworzysz konto i przekażemy pliki.
Aby utworzyć konto, dodaj ten kod do metody 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();
Wdrożenie szablonu
Wd wdrażaj szablon i parametry z utworzonego konta magazynu.
Aby wdrożyć szablon, dodaj ten kod do metody 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();
Usuwanie zasobów
Ponieważ opłaty są naliczane za zasoby używane na platformie Azure, zawsze dobrym rozwiązaniem jest usunięcie zasobów, które nie są już potrzebne. Nie musisz usuwać każdego zasobu oddzielnie od grupy zasobów. Usuń grupę zasobów, a wszystkie jej zasoby zostaną automatycznie usunięte.
Aby usunąć grupę zasobów, dodaj ten kod do metody Main:
azure.ResourceGroups.DeleteByName(groupName);
Uruchamianie aplikacji
Całkowite uruchomienie tej aplikacji konsolowej od początku do końca powinno zająć około pięciu minut.
Aby uruchomić aplikację konsolowa, kliknij przycisk Uruchom.
Przed naciśnięciem klawisza Enter w celu rozpoczęcia usuwania zasobów może potrwać kilka minut, aby zweryfikować utworzenie zasobów w Azure Portal. Kliknij stan wdrożenia, aby wyświetlić informacje o wdrożeniu.
Następne kroki
- Jeśli wystąpiły problemy z wdrożeniem, następnym krokiem będzie przyjrzenie się tematowi Rozwiązywanie typowych błędów wdrażania platformy Azure przy użyciu usługi Azure Resource Manager.
- Dowiedz się, jak wdrożyć maszynę wirtualną i jej zasoby obsługi, przeglądając temat Wdrażanie maszyny wirtualnej platformy Azure przy użyciu języka C#.