Aprowizowanie maszyny wirtualnej z systemem Linux przy użyciu Bicep
Podstawowym elementem szablonu Bicep jest zasób, który wyznacza zasób platformy Azure. Każdy zasób zawiera zestaw właściwości ogólnych i właściwości specyficznych dla zasobów. Na przykład szablon używany w poniższym przykładzie opisuje sieć wirtualną platformy Azure. Chociaż właściwości nazwy i lokalizacji są ogólne, addressPrefix
jest specyficzny dla zasobu. Microsoft.Network/virtualNetworks@2021-05-01
Ciąg obok zasobu wyznacza jego wersję interfejsu API, a virtualNetwork
wpis reprezentuje jego nazwę symboliczną, która umożliwia odwołowanie się do zasobu w szablonie.
Oprócz elementu zasobu poniższy przykładowy szablon zawiera również element parametru, który umożliwia przypisanie nazwy do sieci wirtualnej podczas wdrażania. Jeśli w tym czasie nie przypiszesz nazwy, zamiast tego zostanie wybrana wartość domyślna lnx-bcp-vnet
. Element description jest przykładem dekoratora wskazanego przez znak wiodący @
. Jego celem jest opisanie roli parametru, a jego dane wyjściowe są wyświetlane obok pola tekstowego parametru, gdy używasz witryny Azure Portal do przeglądania lub wdrażania odpowiedniego szablonu usługi Azure Resource Manager. Użyj następującego przykładu kodu, aby aprowizować maszynę wirtualną z systemem Linux przy użyciu aplikacji 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
]
}
}
}
Wdrażanie maszyny wirtualnej z systemem Linux przy użyciu szablonów Bicep
Praca z aplikacją Bicep obejmuje tworzenie i wdrażanie szablonów. Aby uprościć i ulepszyć środowisko tworzenia, użyj programu Visual Studio Code z rozszerzeniem Bicep. To samo rozszerzenie obsługuje również wdrożenia oparte na Bicep. Jeśli wolisz wyzwolić wdrożenie z poziomu wiersza polecenia lub w ramach zadania skryptowego, możesz zainstalować interfejs wiersza polecenia Bicep i użyć go jako autonomicznego narzędzia lub użyć go bezpośrednio z poziomu sesji interfejsu wiersza polecenia platformy Azure. Interfejs wiersza polecenia platformy Azure automatycznie instaluje interfejs wiersza polecenia Bicep podczas pierwszego wywołania dowolnego az bicep
polecenia. Jednak aby wykonać ręczną instalację Bicep, uruchom polecenie az bicep install
.
W rzeczywistości proces aprowizacji maszyny wirtualnej platformy Azure z systemem Linux przy użyciu aplikacji Bicep zwykle obejmuje następującą sekwencję kroków wysokiego poziomu:
- Zidentyfikuj odpowiedni obraz maszyny wirtualnej.
- Zidentyfikuj odpowiedni rozmiar maszyny wirtualnej.
- Tworzenie szablonu Bicep.
- Zainicjuj wdrożenie szablonu Bicep.
Podczas wdrażania szablonów Bicep zadanie nazywane transpilacją automatycznie konwertuje je na równoważne szablony usługi Azure Resource Manager. Można również wykonać konwersję między formatami Bicep i Azure Resource Manager, uruchamiając bicep build
odpowiednio polecenia i bicep decompile
.
Aby zidentyfikować odpowiedni obraz i rozmiar maszyny wirtualnej, wykonaj kroki opisane we wcześniejszych lekcjach tego modułu. Ta lekcja koncentruje się na zadaniach specyficznych dla Bicep.
Tworzenie szablonu Bicep
Aby utworzyć szablon Bicep, zacznij od uruchomienia sesji programu Visual Studio Code z zainstalowanym rozszerzeniem Bicep. Następnie utwórz plik o nazwie main.bicep. Dodaj następującą zawartość do pliku, a następnie zapisz zmianę:
Uwaga
Nazwy plików wybrane dla plików Bicep są dowolne, chociaż dobrym rozwiązaniem jest wybranie nazwy, która odzwierciedla zawartość lub cel pliku, i należy użyć ciągu ".bicep" dla rozszerzenia pliku.
@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}'
Uwaga
Ten szablon jest oparty na zawartości repozytorium GitHub Szablony szybkiego startu platformy Azure.
Inicjowanie wdrożenia szablonu Bicep
Po zapisaniu pliku main.bicep możesz kontynuować wdrażanie oparte na szablonach. Najpierw uruchom sesję interfejsu wiersza polecenia platformy Azure na komputerze lokalnym i uruchom polecenie az login
w celu uwierzytelnienia. Musisz podać poświadczenia użytkownika z wystarczającymi uprawnieniami, aby aprowizować zasoby w ramach subskrypcji platformy Azure. Następnie zmień bieżący katalog na ten, w którym znajduje się plik main.bicep . Alternatywnie możesz uruchomić sesję powłoki Bash usługi Azure Cloud Shell i przekazać ten plik do katalogu macierzystego w środowisku usługi Azure Cloud Shell.
Następnie uruchom następujące polecenie z uwierzytelnionej sesji interfejsu wiersza polecenia platformy Azure, aby utworzyć grupę zasobów, która będzie zawierać wszystkie zasoby będące częścią kolejnego wdrożenia:
az group create --name rg-lnx-bcp --location eastus
Przed kontynuowaniem warto upewnić się, że używasz najnowszej wersji interfejsu wiersza polecenia Bicep, uruchamiając następujące polecenie:
az bicep upgrade
Na koniec zainicjuj wdrożenie, uruchamiając następujące polecenie:
az deployment group create --resource-group rg-lnx-bcp --template-file main.bicep --parameters adminUsername=azureuser
Uwaga
To polecenie zawiera --parameters
przełącznik, który w tym przypadku ustawia nazwę administratora lokalnego dla wdrażanej maszyny wirtualnej platformy Azure. Interfejs wiersza polecenia platformy Azure monituje o podanie odpowiedniego hasła, ponieważ wartość domyślna parametru adminPasswordOrKey
nie jest ustawiona.
Maszyna wirtualna platformy Azure powinna zacząć działać krótko, zazwyczaj w ciągu kilku minut. Aby nawiązać z nim połączenie, zidentyfikuj w pełni kwalifikowaną nazwę domeny (FQDN) skojarzoną z interfejsem sieciowym, przeglądając dane wyjściowe generowane przez wdrożenie. Alternatywnie możesz użyć shCommand
wartości . Po wyświetleniu monitu podaj nowo ustawione hasło do uwierzytelnienia podczas nawiązywania połączenia SSH.
Jeśli nie zarejestrowano wartości wyjściowych wdrożenia Bicep, możesz je wyświetlić ponownie, uruchamiając następujące polecenie:
az deployment group show \
--resource-group rg-lnx-bcp \
--name main \
--query properties.outputs
Dane wyjściowe sformatowane w formacie JSON powinny przypominać następującą zawartość:
{
"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"
}
}