Zřízení virtuálního počítače s Linuxem pomocí Bicep

Dokončeno

Základním prvkem šablony Bicep je resource, který určuje prostředek Azure. Každý prostředek obsahuje sadu obecných vlastností a vlastností specifických pro prostředky. Například šablona použitá v následujícím příkladu popisuje virtuální síť Azure. Zatímco vlastnosti názvu a umístění jsou obecné, addressPrefix je specifické pro prostředek. Řetězec Microsoft.Network/virtualNetworks@2021-05-01 vedle prostředku určuje jeho verzi rozhraní API a virtualNetwork položka představuje symbolický název, který poskytuje způsob, jak odkazovat na prostředek v rámci šablony.

Kromě elementu resource obsahuje následující ukázková šablona také element parametru, který umožňuje přiřadit název virtuální síti během nasazování. Pokud v tuto chvíli nepřiřazujete název, použije se výchozí hodnota lnx-bcp-vnet . Element popisu je příkladem dekorátoru, jak je označeno úvodním @ znakem. Jejím účelem je popsat roli parametru a její výstup se zobrazí vedle textového pole parametru, když pomocí webu Azure Portal zkontrolujete nebo nasadíte odpovídající šablonu Azure Resource Manageru. Pomocí následujícího příkladu kódu zřiďte virtuální počítač s Linuxem pomocí Bicep:

@description('Name of the virtual network')
param virtualNetworkName string = 'lnx-bcp-vnet'

resource virtualNetwork 'Microsoft.Network/virtualNetworks@2021-05-01' = {
  name: virtualNetworkName
  location: location
  properties: {
    addressSpace: {
      addressPrefixes: [
        addressPrefix
      ]
    }
  }
}

Nasazení virtuálního počítače s Linuxem pomocí šablon Bicep

Práce s Bicep zahrnuje vytváření a nasazování šablon. Ke zjednodušení a vylepšení prostředí pro vytváření použijte Visual Studio Code s rozšířením Bicep. Stejné rozšíření také podporuje nasazení založená na Bicep. Pokud dáváte přednost aktivaci nasazení z příkazového řádku nebo jako součást skriptované úlohy, můžete rozhraní příkazového řádku Bicep nainstalovat a použít jako samostatný nástroj nebo ho použít přímo z relace Azure CLI. Azure CLI nainstaluje rozhraní příkazového řádku Bicep automaticky během prvního vyvolání libovolného az bicep příkazu. Chcete-li však provést ruční instalaci Bicep, spusťte az bicep install.

Proces zřizování virtuálního počítače Azure s Linuxem pomocí Bicep obvykle zahrnuje následující posloupnost kroků vysoké úrovně:

  • Identifikace vhodné image virtuálního počítače
  • Určete vhodnou velikost virtuálního počítače.
  • Vytvoření šablony Bicep
  • Zahajte nasazení šablony Bicep.

Když nasadíte šablony Bicep, úloha označovaná jako transpilace je automaticky převede na ekvivalentní šablony Azure Resource Manageru. Převod mezi formáty Bicep a Azure Resource Manager můžete provést také spuštěním bicep build příkazů a bicep decompile příkazů.

Pokud chcete identifikovat vhodnou image a velikost virtuálního počítače, postupujte podle kroků popsaných v předchozích lekcích tohoto modulu. Tato lekce se zaměřuje na úlohy specifické pro Bicep.

Vytvoření šablony Bicep

Pokud chcete vytvořit šablonu Bicep, začněte spuštěním relace editoru Visual Studio Code s nainstalovaným rozšířením Bicep. Dále vytvořte soubor s názvem main.bicep. Do souboru přidejte následující obsah a uložte změnu:

Poznámka:

Názvy souborů, které zvolíte pro soubory Bicep, jsou libovolné, i když je vhodné zvolit název, který odpovídá obsahu nebo účelu souboru. Pro příponu souboru byste měli použít .bicep .

@description('The name of your virtual machine')
param vmName string = 'lnx-bcp-vm'

@description('Username for the virtual machine')
param adminUsername string

@description('Type of authentication to use on the virtual machine')
@allowed([
  'sshPublicKey'
  'password'
])
param authenticationType string = 'password'

@description('SSH Key or password for the virtual machine')
@secure()
param adminPasswordOrKey string

@description('Unique DNS Name for the Public IP used to access the virtual machine')
param dnsLabelPrefix string = toLower('${vmName}-${uniqueString(resourceGroup().id)}')

@description('The allowed Linux distribution and version for the VM')
@allowed([
  'Ubuntu-2204'
])
param ubuntuOSVersion string = 'Ubuntu-2204'

@description('Location for all resources')
param location string = resourceGroup().location

@description('The size of the VM')
param vmSize string = 'Standard_F4s'

@description('Name of the virtual network')
param virtualNetworkName string = 'lnx-bcp-vnet'

@description('Name of the subnet in the virtual network')
param subnetName string = 'subnet0'

@description('Name of the network security group')
param networkSecurityGroupName string = 'lnx-bcp-nsg'

var imageReference = {
  'Ubuntu-2204': {
    publisher: 'Canonical'
    offer: '0001-com-ubuntu-server-jammy'
    sku: '22_04-lts-gen2'
    version: 'latest'
  }
}
var publicIPAddressName = '${vmName}-pip'
var networkInterfaceName = '${vmName}-nic'
var osDiskType = 'Standard_LRS'
var subnetAddressPrefix = '10.3.0.0/24'
var addressPrefix = '10.3.0.0/16'
var linuxConfiguration = {
  disablePasswordAuthentication: true
  ssh: {
    publicKeys: [
      {
        path: '/home/${adminUsername}/.ssh/authorized_keys'
        keyData: adminPasswordOrKey
      }
    ]
  }
}

resource networkInterface 'Microsoft.Network/networkInterfaces@2021-05-01' = {
  name: networkInterfaceName
  location: location
  properties: {
    ipConfigurations: [
      {
        name: 'ipconfig1'
        properties: {
          subnet: {
            id: subnet.id
          }
          privateIPAllocationMethod: 'Dynamic'
          publicIPAddress: {
            id: publicIPAddress.id
          }
        }
      }
    ]
    networkSecurityGroup: {
      id: networkSecurityGroup.id
    }
  }
}

resource networkSecurityGroup 'Microsoft.Network/networkSecurityGroups@2021-05-01' = {
  name: networkSecurityGroupName
  location: location
  properties: {
    securityRules: [
      {
        name: 'ssh'
        properties: {
          priority: 1000
          protocol: 'Tcp'
          access: 'Allow'
          direction: 'Inbound'
          sourceAddressPrefix: '*'
          sourcePortRange: '*'
          destinationAddressPrefix: '*'
          destinationPortRange: '22'
        }
      }
    ]
  }
}

resource virtualNetwork 'Microsoft.Network/virtualNetworks@2021-05-01' = {
  name: virtualNetworkName
  location: location
  properties: {
    addressSpace: {
      addressPrefixes: [
        addressPrefix
      ]
    }
  }
}

resource subnet 'Microsoft.Network/virtualNetworks/subnets@2021-05-01' = {
  parent: virtualNetwork
  name: subnetName
  properties: {
    addressPrefix: subnetAddressPrefix
    privateEndpointNetworkPolicies: 'Enabled'
    privateLinkServiceNetworkPolicies: 'Enabled'
  }
}

resource publicIPAddress 'Microsoft.Network/publicIPAddresses@2021-05-01' = {
  name: publicIPAddressName
  location: location
  sku: {
    name: 'Basic'
  }
  properties: {
    publicIPAllocationMethod: 'Dynamic'
    publicIPAddressVersion: 'IPv4'
    dnsSettings: {
      domainNameLabel: dnsLabelPrefix
    }
    idleTimeoutInMinutes: 4
  }
}

resource vm 'Microsoft.Compute/virtualMachines@2021-11-01' = {
  name: vmName
  location: location
  properties: {
    hardwareProfile: {
      vmSize: vmSize
    }
    storageProfile: {
      osDisk: {
        createOption: 'FromImage'
        managedDisk: {
          storageAccountType: osDiskType
        }
      }
      imageReference: imageReference[ubuntuOSVersion]
    }
    networkProfile: {
      networkInterfaces: [
        {
          id: networkInterface.id
        }
      ]
    }
    osProfile: {
      computerName: vmName
      adminUsername: adminUsername
      adminPassword: adminPasswordOrKey
      linuxConfiguration: ((authenticationType == 'password') ? null : linuxConfiguration)
    }
    securityProfile: json('null')
  }
}

output adminUsername string = adminUsername
output fqdn string = publicIPAddress.properties.dnsSettings.fqdn
output sshCommand string = 'ssh ${adminUsername}@${publicIPAddress.properties.dnsSettings.fqdn}'

Poznámka:

Tato šablona je založená na obsahu šablon Azure Pro rychlý start úložiště GitHub.

Zahájení nasazení šablony Bicep

Po uložení souboru main.bicep můžete pokračovat v nasazení založeném na šabloně. Nejprve na místním počítači spusťte relaci Azure CLI a spusťte az login ověření. Budete muset zadat přihlašovací údaje uživatele s dostatečnými oprávněními ke zřízení prostředků ve vašem předplatném Azure. V dalším kroku změňte aktuální adresář na adresář, ve kterém se nachází soubor main.bicep . Případně můžete spustit relaci Prostředí Bash služby Azure Cloud Shell a tento soubor nahrát do svého domovského adresáře v prostředí Azure Cloud Shell.

Potom spuštěním následujícího příkazu z ověřené relace Azure CLI vytvořte skupinu prostředků, která bude obsahovat všechny prostředky, které jsou součástí následného nasazení:

az group create --name rg-lnx-bcp --location eastus

Než budete pokračovat, můžete se ujistit, že používáte nejnovější verzi rozhraní příkazového řádku Bicep spuštěním následujícího příkazu:

az bicep upgrade

Nakonec spusťte následující příkaz:

az deployment group create --resource-group rg-lnx-bcp --template-file main.bicep --parameters adminUsername=azureuser

Poznámka:

Tento příkaz zahrnuje --parameters přepínač, který v tomto případě nastaví název místního správce pro virtuální počítač Azure, který nasazujete. Azure CLI vás vyzve k zadání odpovídajícího hesla, protože výchozí hodnota parametru adminPasswordOrKey není nastavená.

Virtuální počítač Azure by měl začínat krátce, obvykle během několika minut. Pokud se k němu chcete připojit, identifikujte plně kvalifikovaný název domény (FQDN) přidružený k jeho síťovému rozhraní tak, že zkontrolujete výstup, který nasazení vygeneruje. Případně můžete použít shCommand hodnotu. Po zobrazení výzvy zadejte nově nastavené heslo pro ověření při navazování připojení SSH.

Pokud jste nezaznamenali výstupní hodnoty nasazení Bicep, můžete je znovu zobrazit spuštěním následujícího příkazu:

az deployment group show \
  --resource-group rg-lnx-bcp \
  --name main \
  --query properties.outputs

Výstup ve formátu JSON by měl vypadat podobně jako v následujícím obsahu:

{
  "adminUsername": {
    "type": "String",
    "value": "azureuser"
  },
  "fqdn": {
    "type": "String",
    "value": "lnx-bcp-vm-example.eastus.cloudapp.azure.com"
  },
  "sshCommand": {
    "type": "String",
    "value": "ssh azureuser@lnx-bcp-vm-example.eastus.cloudapp.azure.com"
  }
}