Dela via


Distribuera en virtuell Azure-dator med C# och en Resource Manager-mall

Den här artikeln visar hur du distribuerar en Azure Resource Manager-mall med hjälp av C#. Mallen som du skapar distribuerar en enda virtuell dator som kör Windows Server i ett nytt virtuellt nätverk med ett enda undernät.

En detaljerad beskrivning av resursen för den virtuella datorn finns i Virtuella datorer i en Azure Resource Manager-mall. Mer information om alla resurser i en mall finns i genomgång av Azure Resource Manager-mallar.

Det tar cirka 10 minuter att utföra de här stegen.

Skapa ett Visual Studio-projekt

I det här steget ser du till att Visual Studio är installerat och att du skapar ett konsolprogram som används för att distribuera mallen.

  1. Om du inte redan har gjort det installerar du Visual Studio. Välj .NET-skrivbordsutveckling på sidan Arbetsbelastningar och klicka sedan på Installera. I sammanfattningen kan du se att .NET Framework 4–4.6-utvecklingsverktyg väljs automatiskt åt dig. Om du redan har installerat Visual Studio kan du lägga till .NET-arbetsbelastningen med hjälp av Visual Studio Launcher.
  2. I Visual Studio klickar du på File>New>Project.
  3. I Mallar>Visual C#väljer du Console App (.NET Framework), anger myDotnetProject för projektets namn, väljer platsen för projektet och klickar sedan på OK.

Installera paketen

NuGet-paket är det enklaste sättet att installera de bibliotek som du behöver för att slutföra de här stegen. Utför följande steg för att hämta de bibliotek som du behöver i Visual Studio:

  1. Klicka på Tools>NuGet Package Manageroch klicka sedan på Package Manager Console.

  2. Skriv följande kommandon i konsolen:

    Install-Package Microsoft.Azure.Management.Fluent
    Install-Package WindowsAzure.Storage
    

Skapa filerna

I det här steget skapar du en mallfil som distribuerar resurserna och en parameterfil som tillhandahåller parametervärden till mallen. Du skapar också en auktoriseringsfil som används för att utföra Azure Resource Manager-åtgärder.

Skapa mallfilen

  1. I Solution Explorer högerklickar du på myDotnetProject>Lägg till>nytt objektoch väljer sedan textfil i Visual C#-objekt. Ge filen namnet CreateVMTemplate.jsonoch klicka sedan på Lägg till.

  2. Lägg till den här JSON-koden i filen som du skapade:

    {
      "$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')]"
                }
              ]
            }
          }
        }
      ]
    }
    
  3. Spara filen CreateVMTemplate.json.

Skapa parameterfilen

Om du vill ange värden för resursparametrarna i mallen skapar du en parameterfil som innehåller värdena.

  1. I Solution Explorer högerklickar du på myDotnetProject>Lägg till>nytt objektoch väljer sedan textfil i Visual C#-objekt. Ge filen namnet Parameters.jsonoch klicka sedan på Lägg till.

  2. Lägg till den här JSON-koden i filen som du skapade:

    {
      "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json",
      "contentVersion": "1.0.0.0",
      "parameters": {
        "adminUserName": { "value": "azureuser" },
        "adminPassword": { "value": "Azure12345678" }
      }
    }
    
  3. Spara filen Parameters.json.

Skapa auktoriseringsfilen

Innan du kan distribuera en mall, se till att du har åtkomst till en Active Directory-tjänsthuvudnamn. Från tjänstens huvudnamn hämtar du en token för att autentisera begäranden till Azure Resource Manager. Du bör också registrera program-ID: t, autentiseringsnyckeln och det klient-ID som du behöver i auktoriseringsfilen.

  1. I Solution Explorer högerklickar du på myDotnetProject>Lägg till>nytt objektoch väljer sedan textfil i Visual C#-objekt. Ge filen namnet azureauth.propertiesoch klicka sedan på Lägg till.

  2. Lägg till följande auktoriseringsegenskaper:

    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/
    

    Ersätt <prenumerations-ID-> med din prenumerationsidentifierare, <program-ID> med Active Directory-programidentifieraren, <autentiseringsnyckel> med programnyckeln och <klient-ID> med klientidentifieraren.

  3. Spara filen azureauth.properties.

  4. Ange en miljövariabel i Windows med namnet AZURE_AUTH_LOCATION med den fullständiga sökvägen till auktoriseringsfilen som du skapade, till exempel kan du använda följande PowerShell-kommando:

    [Environment]::SetEnvironmentVariable("AZURE_AUTH_LOCATION", "C:\Visual Studio 2019\Projects\myDotnetProject\myDotnetProject\azureauth.properties", "User")
    

Skapa hanteringsklienten

  1. Öppna filen Program.cs för projektet som du skapade. Lägg sedan till dessa användningsuttryck i de befintliga uttrycken överst i filen:

    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;
    
  2. Om du vill skapa hanteringsklienten lägger du till den här koden i main-metoden:

    var credentials = SdkContext.AzureCredentialsFactory
        .FromFile(Environment.GetEnvironmentVariable("AZURE_AUTH_LOCATION"));
    
    var azure = Azure
        .Configure()
        .WithLogLevel(HttpLoggingDelegatingHandler.Level.Basic)
        .Authenticate(credentials)
        .WithDefaultSubscription();
    

Skapa en resursgrupp

Om du vill ange värden för programmet lägger du till kod i main-metoden:

var groupName = "myResourceGroup";
var location = Region.USWest;

var resourceGroup = azure.ResourceGroups.Define(groupName)
    .WithRegion(location)
    .Create();

Skapa ett lagringskonto

Mallen och parametrarna distribueras från ett lagringskonto i Azure. I det här steget skapar du kontot och laddar upp filerna.

Om du vill skapa kontot lägger du till den här koden i main-metoden:

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();

Distribuera mallen

Distribuera mallen och parametrarna från lagringskontot som skapades.

Om du vill distribuera mallen lägger du till den här koden i main-metoden:

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();

Ta bort resurserna

Eftersom du debiteras för resurser som används i Azure är det alltid bra att ta bort resurser som inte längre behövs. Du behöver inte ta bort varje resurs separat från en resursgrupp. Ta bort resursgruppen och alla dess resurser tas bort automatiskt.

Om du vill ta bort resursgruppen lägger du till den här koden i main-metoden:

azure.ResourceGroups.DeleteByName(groupName);

Kör programmet

Det bör ta ungefär fem minuter för konsolprogrammet att köras helt från början till slut.

  1. Om du vill köra konsolprogrammet klickar du på Starta.

  2. Innan du trycker på Ange för att börja ta bort resurser kan det ta några minuter att kontrollera att resurserna har skapats i Azure-portalen. Klicka på distributionsstatusen för att se information om distributionen.

Nästa steg