توفير جهاز ظاهري Linux باستخدام Bicep
العنصر الأساسي لقالب Bicep هو المورد، الذي يعين مورد Azure. يحتوي كل مورد على مجموعة من الخصائص العامة وخصائص خاصة بالموارد. على سبيل المثال، يصف القالب المستخدم في المثال التالي شبكة Azure الظاهرية. في حين أن خصائص الاسم والموقع عامة، addressPrefix
فإنهما خاصان بالموارد. Microsoft.Network/virtualNetworks@2021-05-01
تعين السلسلة الموجودة بجانب المورد إصدار API الخاص به، ويمثل virtualNetwork
الإدخال اسمه الرمزي، والذي يوفر طريقة للإشارة إلى المورد داخل القالب.
بالإضافة إلى عنصر المورد، يتضمن نموذج القالب التالي أيضا عنصر معلمة يمكنك من تعيين اسم للشبكة الظاهرية أثناء النشر. إذا لم تقم بتعيين اسم في ذلك الوقت، يتم تطبيق القيمة الافتراضية بدلا من lnx-bcp-vnet
ذلك. عنصر الوصف هو مثال على مصمم الديكور، كما هو موضح بالحرف البادئة @
. الغرض منه هو وصف دور المعلمة، ويظهر إخراجها بجانب مربع نص المعلمة عند استخدام مدخل Microsoft 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 CLI تلقائيا أثناء الاستدعاء الأول لأي 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 repo 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 CLI عن طريق تشغيل الأمر التالي:
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 VM قريبا، عادة في غضون بضع دقائق. للاتصال به، حدد اسم المجال المؤهل بالكامل (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"
}
}