Menyebarkan Azure Virtual Machine menggunakan C# dan templat Resource Manager

Artikel ini menunjukkan kepada Anda cara menyebarkan templat Resource Manager Azure menggunakan C#. Template yang Anda buat menyebarkan satu mesin virtual yang menjalankan Windows Server di jaringan virtual baru dengan satu subnet.

Untuk deskripsi terperinci tentang sumber daya komputer virtual, lihat Komputer virtual dalam templat Resource Manager Azure. Untuk informasi selengkapnya tentang semua sumber daya dalam templat, lihat panduan templat Resource Manager Azure.

Dibutuhkan sekitar 10 menit untuk melakukan langkah-langkah ini.

Membuat proyek Visual Studio

Pada langkah ini, Anda memastikan bahwa Visual Studio diinstal dan Anda membuat aplikasi konsol yang digunakan untuk menyebarkan template.

  1. Jika Belum, instal Visual Studio. Pilih pengembangan desktop .NET di halaman Beban Kerja, lalu klik Instal. Dalam ringkasan, Anda dapat melihat bahwa .NET Framework 4 - 4.6 alat pengembangan dipilih secara otomatis untuk Anda. Jika Anda telah menginstal Visual Studio, Anda dapat menambahkan beban kerja .NET menggunakan Peluncur Visual Studio.
  2. Di Visual Studio, klik File>Baru>Proyek.
  3. Di TemplatesVisual> C#, pilih Aplikasi Konsol (.NET Framework), masukkan myDotnetProject untuk nama proyek, pilih lokasi proyek, lalu klik OK.

Menginstal paket

Paket NuGet adalah cara termudah untuk menginstal pustaka yang Anda butuhkan untuk menyelesaikan langkah-langkah ini. Untuk mendapatkan pustaka yang Anda butuhkan dalam Visual Studio, lakukan langkah-langkah berikut:

  1. Klik ToolsNuget>Package Manager, lalu klik Konsol Manajer Paket.

  2. Ketik perintah ini di konsol:

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

Membuat file

Pada langkah ini, Anda membuat file template yang menyebarkan sumber daya dan file parameter yang memasok nilai parameter ke template. Anda juga membuat file otorisasi yang digunakan untuk melakukan operasi Resource Manager Azure.

Membuat file template

  1. Di Penjelajah Solusi, klik kanan myDotnetProjectAddNew>>Item, lalu pilih File Teks di Visual C# Item. Beri nama file CreateVMTemplate.json, lalu klik Tambahkan.

  2. Tambahkan kode JSON ini ke file yang Anda buat:

    {
      "$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. Simpan file CreateVMTemplate.json.

Membuat file parameter

Untuk menentukan nilai untuk parameter sumber daya dalam templat, Anda membuat file parameter yang berisi nilai.

  1. Di Penjelajah Solusi, klik kanan myDotnetProjectAddNew>>Item, lalu pilih File Teks di Visual C# Item. Beri nama file Parameters.json, lalu klik Tambahkan.

  2. Tambahkan kode JSON ini ke file yang Anda buat:

    {
      "$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. Simpan file Parameters.json.

Membuat file otorisasi

Sebelum Anda dapat menyebarkan templat, pastikan Anda memiliki akses ke perwakilan layanan Active Directory. Dari perwakilan layanan, Anda memperoleh token untuk mengautentikasi permintaan ke Azure Resource Manager. Anda juga harus merekam ID aplikasi, kunci autentikasi, dan ID penyewa yang Anda butuhkan dalam file otorisasi.

  1. Di Penjelajah Solusi, klik kanan myDotnetProjectAddNew>>Item, lalu pilih File Teks di Visual C# Item. Beri nama file azureauth.properties, lalu klik Tambahkan.

  2. Tambahkan properti otorisasi ini:

    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/
    

    Ganti < subscription-id > dengan pengidentifikasi langganan, < id aplikasi> dengan pengidentifikasi aplikasi Direktori Aktif, <kunci autentikasi> dengan kunci aplikasi, dan <id penyewa> dengan pengidentifikasi penyewa.

  3. Simpan file azureauth.properties.

  4. Atur variabel lingkungan dalam Windows bernama AZURE_AUTH_LOCATION dengan jalur lengkap ke file otorisasi yang Anda buat, misalnya Anda dapat menggunakan perintah PowerShell berikut:

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

Membuat klien manajemen

  1. Buka file Program.cs untuk proyek yang Anda buat. Kemudian, tambahkan pernyataan ini ke pernyataan yang ada di bagian atas file:

    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. Untuk membuat klien manajemen, tambahkan kode ini ke metode Utama:

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

Membuat grup sumber daya

Untuk menentukan nilai untuk aplikasi, tambahkan kode ke metode Utama:

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

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

Buat akun penyimpanan

Templat dan parameter disebarkan dari akun penyimpanan di Azure. Pada langkah ini, Anda membuat akun dan mengunggah file.

Untuk membuat akun, tambahkan kode ini ke metode Utama:

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

Sebarkan templat

Sebarkan templat dan parameter dari akun penyimpanan yang dibuat.

Untuk menyebarkan templat, tambahkan kode ini ke metode Utama:

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

Hapus sumber daya

Karena Anda ditagih untuk sumber daya yang digunakan di Azure, menghapus sumber daya yang tidak lagi diperlukan merupakan latihan yang baik. Anda tidak perlu menghapus setiap sumber daya secara terpisah dari grup sumber daya. Hapus grup sumber daya dan semua sumber dayanya dihapus secara otomatis.

Untuk menghapus grup sumber daya, tambahkan kode ini ke metode Utama:

azure.ResourceGroups.DeleteByName(groupName);

Menjalankan aplikasi

Dibutuhkan waktu sekitar lima menit agar aplikasi konsol ini berjalan total dari awal hingga akhir.

  1. Untuk menjalankan aplikasi konsol, klik Mulai.

  2. Sebelum Menekan Enter untuk mulai menghapus sumber daya, Anda bisa membutuhkan waktu beberapa menit untuk memverifikasi pembuatan sumber daya di portal Microsoft Azure. Klik status penyebaran untuk melihat informasi tentang penyebaran.

Langkah berikutnya