Rychlý start: Vytvoření virtuálního počítače s Ubuntu Linuxem pomocí souboru Bicep
Platí pro: ✔️ Virtuální počítače s Linuxem
V tomto rychlém startu se dozvíte, jak pomocí souboru Bicep nasadit virtuální počítač s Ubuntu Linuxem v Azure.
Bicep je jazyk specifický pro doménu (DSL), který k nasazování prostředků Azure používá deklarativní syntaxi. Poskytuje stručnou syntaxi, spolehlivou bezpečnost typů a podporu pro opakované použití kódu. Bicep nabízí nejlepší prostředí pro vytváření obsahu pro řešení infrastruktury jako kódu v Azure.
Požadavky
Pokud ještě nemáte předplatné Azure, vytvořte si napřed bezplatný účet.
Kontrola souboru Bicep
Soubor Bicep použitý v tomto rychlém startu pochází ze šablon Azure Pro rychlý start.
@description('The name of your Virtual Machine.')
param vmName string = 'simpleLinuxVM'
@description('Username for the Virtual Machine.')
param adminUsername string
@description('Type of authentication to use on the Virtual Machine. SSH key is recommended.')
@allowed([
'sshPublicKey'
'password'
])
param authenticationType string = 'password'
@description('SSH Key or password for the Virtual Machine. SSH key is recommended.')
@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 Ubuntu version for the VM. This will pick a fully patched image of this given Ubuntu version.')
@allowed([
'Ubuntu-2004'
'Ubuntu-2204'
])
param ubuntuOSVersion string = 'Ubuntu-2004'
@description('Location for all resources.')
param location string = resourceGroup().location
@description('The size of the VM')
param vmSize string = 'Standard_D2s_v3'
@description('Name of the VNET')
param virtualNetworkName string = 'vNet'
@description('Name of the subnet in the virtual network')
param subnetName string = 'Subnet'
@description('Name of the Network Security Group')
param networkSecurityGroupName string = 'SecGroupNet'
@description('Security Type of the Virtual Machine.')
@allowed([
'Standard'
'TrustedLaunch'
])
param securityType string = 'TrustedLaunch'
var imageReference = {
'Ubuntu-2004': {
publisher: 'Canonical'
offer: '0001-com-ubuntu-server-focal'
sku: '20_04-lts-gen2'
version: 'latest'
}
'Ubuntu-2204': {
publisher: 'Canonical'
offer: '0001-com-ubuntu-server-jammy'
sku: '22_04-lts-gen2'
version: 'latest'
}
}
var publicIPAddressName = '${vmName}PublicIP'
var networkInterfaceName = '${vmName}NetInt'
var osDiskType = 'Standard_LRS'
var subnetAddressPrefix = '10.1.0.0/24'
var addressPrefix = '10.1.0.0/16'
var linuxConfiguration = {
disablePasswordAuthentication: true
ssh: {
publicKeys: [
{
path: '/home/${adminUsername}/.ssh/authorized_keys'
keyData: adminPasswordOrKey
}
]
}
}
var securityProfileJson = {
uefiSettings: {
secureBootEnabled: true
vTpmEnabled: true
}
securityType: securityType
}
var extensionName = 'GuestAttestation'
var extensionPublisher = 'Microsoft.Azure.Security.LinuxAttestation'
var extensionVersion = '1.0'
var maaTenantName = 'GuestAttestation'
var maaEndpoint = substring('emptystring', 0, 0)
resource networkInterface 'Microsoft.Network/networkInterfaces@2023-09-01' = {
name: networkInterfaceName
location: location
properties: {
ipConfigurations: [
{
name: 'ipconfig1'
properties: {
subnet: {
id: virtualNetwork.properties.subnets[0].id
}
privateIPAllocationMethod: 'Dynamic'
publicIPAddress: {
id: publicIPAddress.id
}
}
}
]
networkSecurityGroup: {
id: networkSecurityGroup.id
}
}
}
resource networkSecurityGroup 'Microsoft.Network/networkSecurityGroups@2023-09-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@2023-09-01' = {
name: virtualNetworkName
location: location
properties: {
addressSpace: {
addressPrefixes: [
addressPrefix
]
}
subnets: [
{
name: subnetName
properties: {
addressPrefix: subnetAddressPrefix
privateEndpointNetworkPolicies: 'Enabled'
privateLinkServiceNetworkPolicies: 'Enabled'
}
}
]
}
}
resource publicIPAddress 'Microsoft.Network/publicIPAddresses@2023-09-01' = {
name: publicIPAddressName
location: location
sku: {
name: 'Basic'
}
properties: {
publicIPAllocationMethod: 'Dynamic'
publicIPAddressVersion: 'IPv4'
dnsSettings: {
domainNameLabel: dnsLabelPrefix
}
idleTimeoutInMinutes: 4
}
}
resource vm 'Microsoft.Compute/virtualMachines@2023-09-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: (securityType == 'TrustedLaunch') ? securityProfileJson : null
}
}
resource vmExtension 'Microsoft.Compute/virtualMachines/extensions@2023-09-01' = if (securityType == 'TrustedLaunch' && securityProfileJson.uefiSettings.secureBootEnabled && securityProfileJson.uefiSettings.vTpmEnabled) {
parent: vm
name: extensionName
location: location
properties: {
publisher: extensionPublisher
type: extensionName
typeHandlerVersion: extensionVersion
autoUpgradeMinorVersion: true
enableAutomaticUpgrade: true
settings: {
AttestationConfig: {
MaaSettings: {
maaEndpoint: maaEndpoint
maaTenantName: maaTenantName
}
}
}
}
}
output adminUsername string = adminUsername
output hostname string = publicIPAddress.properties.dnsSettings.fqdn
output sshCommand string = 'ssh ${adminUsername}@${publicIPAddress.properties.dnsSettings.fqdn}'
V souboru Bicep je definováno několik prostředků:
- Microsoft.Network/virtualNetworks/subnets: vytvořte podsíť.
- Microsoft.Storage/storageAccounts: Vytvořte účet úložiště.
- Microsoft.Network/networkInterfaces: vytvořte síťovou kartu.
- Microsoft.Network/networkSecurityGroups: Vytvořte skupinu zabezpečení sítě.
- Microsoft.Network/virtualNetworks: vytvořte virtuální síť.
- Microsoft.Network/publicIPAddresses: Vytvořte veřejnou IP adresu.
- Microsoft.Compute/virtualMachines: Vytvořte virtuální počítač.
Nasazení souboru Bicep
Uložte soubor Bicep jako main.bicep do místního počítače.
Nasaďte soubor Bicep pomocí Azure CLI nebo Azure PowerShellu.
az group create --name exampleRG --location eastus az deployment group create --resource-group exampleRG --template-file main.bicep --parameters adminUsername=<admin-username>
Poznámka:
Nahraďte <uživatelské jméno> správce jedinečným uživatelským jménem. Zobrazí se také výzva k zadání adminPasswordOrKey.
Po dokončení nasazení by se měla zobrazit zpráva, že nasazení bylo úspěšné.
Informace o nákladech se během procesu vytváření virtuálního počítače pro Bicep nezobrazují, jako jsou informace o nákladech na webu Azure Portal. Pokud chcete získat další informace o tom, jak fungují náklady na virtuální počítače, podívejte se na stránku Přehled optimalizace nákladů.
Kontrola nasazených prostředků
Pomocí webu Azure Portal, Azure CLI nebo Azure PowerShellu můžete zobrazit seznam nasazených prostředků ve skupině prostředků.
az resource list --resource-group exampleRG
Vyčištění prostředků
Pokud už nepotřebujete, odstraňte virtuální počítač a všechny prostředky ve skupině prostředků pomocí webu Azure Portal, Azure CLI nebo Azure PowerShellu.
az group delete --name exampleRG
Další kroky
V tomto rychlém startu jste nasadili jednoduchý virtuální počítač pomocí souboru Bicep. Další informace o virtuálních počítačích Azure najdete v kurzu pro virtuální počítače s Linuxem.