Подготовка виртуальной машины Linux с помощью Bicep
Основной элемент шаблона Bicep — это resource
ресурс Azure. Каждый ресурс содержит набор универсальных и конкретных свойств ресурсов. Например, шаблон, используемый в следующем примере, описывает виртуальную сеть Azure. Хотя свойства имени и расположения являются универсальными, addressPrefix
зависит от ресурса. Строка Microsoft.Network/virtualNetworks@2021-05-01
рядом с ресурсом обозначает свою версию API, а virtualNetwork
запись представляет его символическое имя, которое предоставляет способ ссылки на ресурс в шаблоне.
resource
Помимо элемента, приведенный ниже пример шаблона также включает элемент параметра, позволяющий назначить имя виртуальной сети во время развертывания. Если вы не назначите имя в то время, вместо этого применяется значение lnx-bcp-vnet
по умолчанию. Элемент description является примером декоратора, как указано ведущим @
символом. Его цель — описать роль параметра, а выходные данные отображаются рядом с текстовым полем параметра при использовании портал Azure для проверки или развертывания соответствующего шаблона Azure Resource Manager. Используйте следующий пример кода для подготовки виртуальной машины Linux с помощью 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
]
}
}
}
Развертывание виртуальной машины Linux с помощью шаблонов Bicep
Работа с Bicep включает создание и развертывание шаблонов. Чтобы упростить и улучшить возможности разработки, используйте Visual Studio Code с расширением Bicep. Это же расширение также поддерживает развертывания на основе Bicep. Если вы предпочитаете активировать развертывание из командной строки или в рамках скриптовой задачи, вы можете установить и использовать Bicep CLI в качестве автономной программы или использовать его непосредственно из сеанса Azure CLI. Azure CLI автоматически устанавливает интерфейс командной строки Bicep во время первого вызова любой az bicep
команды. Однако для выполнения ручной установки Bicep выполните команду az bicep install
.
Фактически процесс подготовки виртуальной машины Azure под управлением Linux с помощью Bicep обычно включает в себя следующую последовательность высокоуровневых шагов:
- Определите подходящий образ виртуальной машины.
- Определите подходящий размер виртуальной машины.
- Создание шаблона Bicep.
- Инициируйте развертывание шаблона Bicep.
При развертывании шаблонов Bicep задача, называемая транспилированием, автоматически преобразует их в эквивалентные шаблоны Azure Resource Manager. Вы также можете выполнить преобразование между форматами Bicep и Azure Resource Manager, выполнив bicep build
bicep decompile
команды соответственно.
Чтобы определить подходящий образ виртуальной машины и размер, выполните действия, описанные в предыдущих уроках этого модуля. В этом уроке основное внимание уделяется задачам Bicep.
Создание шаблона Bicep
Чтобы создать шаблон Bicep, начните с запуска сеанса Visual Studio Code с установленным расширением Bicep. Затем создайте файл с именем main.bicep. Добавьте в файл следующее содержимое, а затем сохраните изменение:
Примечание.
Имена файлов, выбранные для файлов Bicep, являются произвольными, хотя рекомендуется выбрать имя, которое отражает содержимое файла или назначение. Для расширения файла следует использовать 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}'
Примечание.
Этот шаблон основан на содержимом репозитория GitHub Azure Quickstart Templates.
Инициирование развертывания шаблона Bicep
После сохранения файла main.bicep можно продолжить развертывание на основе шаблона. Сначала запустите сеанс Azure CLI на локальном компьютере и выполните az login
проверку подлинности. Вам потребуется предоставить учетные данные пользователя с достаточными привилегиями для подготовки ресурсов в подписке Azure. Затем измените текущий каталог на тот, где находится файл main.bicep . Кроме того, вы можете запустить сеанс Azure Cloud Shell Bash и отправить этот файл в домашний каталог в среде Azure Cloud Shell.
Затем выполните следующую команду из сеанса Azure CLI, прошедшего проверку подлинности, чтобы создать группу ресурсов, которая будет содержать все ресурсы, которые являются частью последующего развертывания:
az group create --name rg-lnx-bcp --location eastus
Прежде чем продолжить, вам может потребоваться убедиться, что вы используете последнюю версию интерфейса командной строки Bicep, выполнив следующую команду:
az bicep upgrade
Наконец, инициируйте развертывание, выполнив следующую команду:
az deployment group create --resource-group rg-lnx-bcp --template-file main.bicep --parameters adminUsername=azureuser
Примечание.
Эта команда включает --parameters
переключатель, который в этом случае задает имя локального администратора для развернутой виртуальной машины Azure. Azure CLI запрашивает указать соответствующий пароль, так как значение adminPasswordOrKey
по умолчанию параметра не задано.
Виртуальная машина Azure должна начать работу в ближайшее время, как правило, в течение нескольких минут. Чтобы подключиться к нему, определите полное доменное имя (FQDN), связанное с сетевым интерфейсом, просматривая выходные данные, создаваемые развертыванием. Кроме того, можно использовать shCommand
это значение. При появлении запроса укажите новый пароль для проверки подлинности при установке подключения SSH.
Если вы не записали выходные значения развертывания Bicep, их можно отобразить снова, выполнив следующую команду:
az deployment group show \
--resource-group rg-lnx-bcp \
--name main \
--query properties.outputs
Выходные данные в формате JSON должны выглядеть следующим образом:
{
"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"
}
}