Aracılığıyla paylaş


C# ve Resource Manager şablonu kullanarak bir Azure sanal makinesini dağıtma

bu makalede, C# kullanarak bir Azure Resource Manager şablonunun nasıl dağıtılacağı gösterilir. oluşturduğunuz şablon, tek bir alt ağ ile yeni bir sanal ağda Windows Server çalıştıran tek bir sanal makine dağıtır.

sanal makine kaynağının ayrıntılı bir açıklaması için bkz. Azure Resource Manager şablonundaki sanal makineler. şablondaki tüm kaynaklar hakkında daha fazla bilgi için bkz. Azure Resource Manager şablonukılavuzu.

Bu adımların uygulanması yaklaşık 10 dakika sürer.

Visual Studio projesi oluşturma

bu adımda, Visual Studio yüklendiğinden ve şablonu dağıtmak için kullanılan bir konsol uygulaması oluşturduğunuz için emin olursunuz.

  1. Henüz yapmadıysanız, Visual Studio' yi daha sonra yükleyebilirsiniz. Iş yükleri sayfasında .net masaüstü geliştirme ' yi seçin ve ardından yükler' i tıklatın. özet içinde, .NET Framework 4-4,6 geliştirme araçlarının sizin için otomatik olarak seçili olduğunu görebilirsiniz. Visual Studio zaten yüklediyseniz, Visual Studio başlatıcısı 'nı kullanarak .net iş yükünü ekleyebilirsiniz.
  2. Visual Studio ' de dosya>yeni>Project' ne tıklayın.
  3. şablonlar>Visual C#' de konsol uygulaması (.NET Framework)seçeneğini belirleyin, projenin adı için myDotnetProject girin, projenin konumunu seçin ve ardından tamam' a tıklayın.

Paketleri yükler

NuGet paketler, bu adımları tamamlaması için gereken kitaplıkları yüklemenin en kolay yoludur. Visual Studio gereken kitaplıkları almak için şu adımları uygulayın:

  1. araçlar>Nuget Paket Yöneticisive ardından Paket Yöneticisi konsolu' na tıklayın.

  2. Konsola şu komutları yazın:

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

Dosyaları oluşturma

Bu adımda, şablona parametre değerleri sağlayan bir şablon dosyası ve bir parametre dosyası oluşturacaksınız. ayrıca, Azure Resource Manager işlemlerini gerçekleştirmek için kullanılan bir yetkilendirme dosyası da oluşturursunuz.

Şablon dosyasını oluşturma

  1. Çözüm Gezgini ' de, myDotnetProject>yeni öğeekle> ' ye sağ tıklayın ve ardından Visual C# öğelerindemetin dosyası ' nı seçin. Createvmtemplate. JSONdosyasını adlandırın ve ardından Ekle' ye tıklayın.

  2. Bu JSON kodunu oluşturduğunuz dosyaya ekleyin:

    {
      "$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. CreateVMTemplate. json dosyasını kaydedin.

Parametreler dosyası oluşturma

Şablondaki kaynak parametrelerinin değerlerini belirtmek için değerleri içeren bir parametre dosyası oluşturursunuz.

  1. Çözüm Gezgini ' de, myDotnetProject>yeni öğeekle> ' ye sağ tıklayın ve ardından Visual C# öğelerindemetin dosyası ' nı seçin. Parameters. JSONdosyasını adlandırın ve ardından Ekle' ye tıklayın.

  2. Bu JSON kodunu oluşturduğunuz dosyaya ekleyin:

    {
      "$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. Parameters. json dosyasını kaydedin.

Yetkilendirme dosyasını oluşturma

Bir şablonu dağıtabilmeniz için önce bir Active Directory Hizmet sorumlusunaerişiminizin olduğundan emin olun. Hizmet sorumlusu ' ndan Azure Resource Manager istek kimlik doğrulaması için bir belirteç elde edersiniz. Ayrıca, yetkilendirme dosyasında ihtiyaç duyduğunuz uygulama KIMLIĞI, kimlik doğrulama anahtarı ve kiracı KIMLIĞINI de kaydetmeniz gerekir.

  1. Çözüm Gezgini ' de, myDotnetProject>yeni öğeekle> ' ye sağ tıklayın ve ardından Visual C# öğelerindemetin dosyası ' nı seçin. Dosyayı azureauth. Propertiesolarak adlandırın ve Ekle' ye tıklayın.

  2. Şu yetkilendirme özelliklerini ekleyin:

    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/
    

    Abonelik kimliği > , abonelik tanımlayıcıınız, uygulama kimliği Active Directory uygulama tanımlayıcısı, kimlik doğrulama anahtarı ve kiracı tanımlayıcısı ile Kiracı kimliği ile değiştirin < . <><><>

  3. Azureauth. Properties dosyasını kaydedin.

  4. Windows adlı AZURE_AUTH_LOCATION, oluşturduğunuz yetkilendirme dosyasının tam yolu ile bir ortam değişkeni ayarlayın, örneğin, aşağıdaki PowerShell komutunu kullanabilirsiniz:

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

Yönetim istemcisi oluşturma

  1. Oluşturduğunuz projenin program. cs dosyasını açın. Ardından, bu using deyimlerini dosyanın en üstündeki mevcut deyimlere ekleyin:

    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. Yönetim istemcisini oluşturmak için bu kodu Main yöntemine ekleyin:

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

Kaynak grubu oluşturma

Uygulamanın değerlerini belirtmek için, ana yönteme kod ekleyin:

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

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

Depolama hesabı oluşturma

Şablon ve parametreler, Azure 'daki bir depolama hesabından dağıtılır. Bu adımda, hesabı oluşturur ve dosyaları karşıya yüklersiniz.

Hesabı oluşturmak için bu kodu Main yöntemine ekleyin:

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

Şablonu dağıtma

Şablon ve parametreleri oluşturulan depolama hesabından dağıtın.

Şablonu dağıtmak için bu kodu Main yöntemine ekleyin:

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

Kaynakları silme

Azure 'da kullanılan kaynaklar için ücretlendirildiğiniz için, artık gerekli olmayan kaynakları silmek her zaman iyi bir uygulamadır. Her kaynağı bir kaynak grubundan ayrı olarak silmeniz gerekmez. Kaynak grubunu silin ve tüm kaynakları otomatik olarak silinir.

Kaynak grubunu silmek için, bu kodu Main yöntemine ekleyin:

azure.ResourceGroups.DeleteByName(groupName);

Uygulamayı çalıştırma

Bu konsol uygulamasının başlangıçtan sonuna kadar tam olarak çalıştırılması yaklaşık beş dakika sürer.

  1. Konsol uygulamasını çalıştırmak için Başlat' a tıklayın.

  2. Kaynakları silmeye başlamak üzere ENTER tuşuna basmadan önce Azure Portal kaynakların oluşturulmasını doğrulamak birkaç dakika sürebilir. Dağıtım hakkındaki bilgileri görmek için dağıtım durumuna tıklayın.

Sonraki adımlar