Membuat komputer virtual Linux dengan Azure CLI
Berlaku untuk: ✔️ mesin virtual Linux
Untuk membuat mesin virtual (VM) dengan cepat di Azure, Anda dapat menggunakan perintah Azure CLI tunggal yang menggunakan nilai default untuk membuat sumber daya pendukung yang diperlukan. Sumber daya seperti jaringan virtual, alamat IP publik, dan aturan grup keamanan jaringan secara otomatis dibuat. Untuk lebih mengontrol lingkungan Anda dalam penggunaan produksi, Anda dapat membuat sumber daya ini sebelumnya dan kemudian menambahkan VM Anda ke dalamnya. Artikel ini memandu Anda tentang cara membuat VM dan masing-masing sumber daya pendukung satu per satu.
Pastikan Anda telah memasang Azure CLI terbaru dan masuk ke akun Azure dengan login az.
Dalam contoh berikut ini, ganti nama parameter contoh dengan nilai Anda sendiri. Contoh nama parameter termasuk myResourceGroup, myVnet, dan myVM.
Buat grup sumber daya
Grup sumber daya Azure adalah kontainer logis tempat sumber daya Azure disebarkan dan dikelola. Grup sumber daya harus dibuat sebelum komputer virtual dan mendukung sumber daya jaringan virtual. Membuat grup sumber daya dengan membuat grup az. Contoh berikut ini menampilkan cara membuat grup sumber daya bernama myResourceGroup di lokasi eastus:
az group create --name myResourceGroup --location eastus
Secara default, output dari perintah Azure CLI ada di JavaScript Object Notation (JSON). Untuk mengubah output default ke daftar atau tabel, misalnya, gunakan az config set core.output=table. Anda juga dapat menambahkan --output
ke perintah apa pun untuk satu kali perubahan dalam format output. Contoh berikut menunjukkan output JSON dari perintah az group create
:
{
"id": "/subscriptions/guid/resourceGroups/myResourceGroup",
"location": "eastus",
"name": "myResourceGroup",
"properties": {
"provisioningState": "Succeeded"
},
"tags": null
}
Membuat jaringan virtual dan subnet
Selanjutnya Anda membuat jaringan virtual di Azure dan subnet tempat Anda dapat membuat VM. Gunakan buat vnet jaringan az untuk membuat jaringan virtual bernama myVnet dengan awalan alamat 192.168.0.0/16. Anda juga menambahkan subnet bernama mySubnet dengan awalan alamat 192.168.1.0/24:
az network vnet create \
--resource-group myResourceGroup \
--name myVnet \
--address-prefix 192.168.0.0/16 \
--subnet-name mySubnet \
--subnet-prefix 192.168.1.0/24
Output menunjukkan subnet dibuat secara logis di dalam jaringan virtual:
{
"addressSpace": {
"addressPrefixes": [
"192.168.0.0/16"
]
},
"dhcpOptions": {
"dnsServers": []
},
"etag": "W/\"e95496fc-f417-426e-a4d8-c9e4d27fc2ee\"",
"id": "/subscriptions/guid/resourceGroups/myResourceGroup/providers/Microsoft.Network/virtualNetworks/myVnet",
"location": "eastus",
"name": "myVnet",
"provisioningState": "Succeeded",
"resourceGroup": "myResourceGroup",
"resourceGuid": "ed62fd03-e9de-430b-84df-8a3b87cacdbb",
"subnets": [
{
"addressPrefix": "192.168.1.0/24",
"etag": "W/\"e95496fc-f417-426e-a4d8-c9e4d27fc2ee\"",
"id": "/subscriptions/guid/resourceGroups/myResourceGroup/providers/Microsoft.Network/virtualNetworks/myVnet/subnets/mySubnet",
"ipConfigurations": null,
"name": "mySubnet",
"networkSecurityGroup": null,
"provisioningState": "Succeeded",
"resourceGroup": "myResourceGroup",
"resourceNavigationLinks": null,
"routeTable": null
}
],
"tags": {},
"type": "Microsoft.Network/virtualNetworks",
"virtualNetworkPeerings": null
}
Membuat alamat IP publik
Sekarang mari buat alamat IP publik dengan buat alamat IP publik jaringan az. Alamat IP publik ini memungkinkan Anda menyambungkan ke VM dari Internet. Karena alamat default bersifat dinamis, buat entri DNS bernama dengan parameter --domain-name-label
. Contoh berikut membuat IP publik bernama myPublicIP dengan nama DNS mypublicdns. Karena nama DNS harus unik, berikan nama DNS unik Anda sendiri:
az network public-ip create \
--resource-group myResourceGroup \
--name myPublicIP \
--dns-name mypublicdns
Output:
{
"publicIp": {
"dnsSettings": {
"domainNameLabel": "mypublicdns",
"fqdn": "mypublicdns.eastus.cloudapp.azure.com",
"reverseFqdn": null
},
"etag": "W/\"2632aa72-3d2d-4529-b38e-b622b4202925\"",
"id": "/subscriptions/guid/resourceGroups/myResourceGroup/providers/Microsoft.Network/publicIPAddresses/myPublicIP",
"idleTimeoutInMinutes": 4,
"ipAddress": null,
"ipConfiguration": null,
"location": "eastus",
"name": "myPublicIP",
"provisioningState": "Succeeded",
"publicIpAddressVersion": "IPv4",
"publicIpAllocationMethod": "Dynamic",
"resourceGroup": "myResourceGroup",
"resourceGuid": "4c65de38-71f5-4684-be10-75e605b3e41f",
"tags": null,
"type": "Microsoft.Network/publicIPAddresses"
}
}
Membuat grup keamanan jaringan
Untuk mengontrol arus lalu lintas masuk dan keluar dari VM Anda, terapkan kelompok keamanan jaringan ke NIC virtual atau subnet. Contoh berikut menggunakan jaringan buat nsg jaringan az untuk membuat grup keamanan jaringan bernama myNetworkSecurityGroup:
az network nsg create \
--resource-group myResourceGroup \
--name myNetworkSecurityGroup
Anda menetapkan aturan yang memungkinkan atau menolak lalu lintas tertentu. Untuk mengizinkan koneksi masuk pada port 22 (untuk mengaktifkan akses SSH, buat aturan masuk dengan buat aturan nsg jaringan az. Contoh berikut membuat aturan bernama myNetworkSecurityGroupRuleSSH:
az network nsg rule create \
--resource-group myResourceGroup \
--nsg-name myNetworkSecurityGroup \
--name myNetworkSecurityGroupRuleSSH \
--protocol tcp \
--priority 1000 \
--destination-port-range 22 \
--access allow
Untuk memperbolehkan sambungan masuk pada port 80 (untuk lalu lintas web), tambahkan aturan grup keamanan jaringan lainnya. Contoh berikut membuat aturan bernama myNetworkSecurityGroupRuleHTTP:
az network nsg rule create \
--resource-group myResourceGroup \
--nsg-name myNetworkSecurityGroup \
--name myNetworkSecurityGroupRuleWeb \
--protocol tcp \
--priority 1001 \
--destination-port-range 80 \
--access allow
Periksa grup keamanan jaringan dan aturan dengan tampilkan nsg jaringan az:
az network nsg show --resource-group myResourceGroup --name myNetworkSecurityGroup
Output:
{
"defaultSecurityRules": [
{
"access": "Allow",
"description": "Allow inbound traffic from all VMs in VNET",
"destinationAddressPrefix": "VirtualNetwork",
"destinationPortRange": "*",
"direction": "Inbound",
"etag": "W/\"3371b313-ea9f-4687-a336-a8ebdfd80523\"",
"id": "/subscriptions/guid/resourceGroups/myResourceGroup/providers/Microsoft.Network/networkSecurityGroups/myNetworkSecurityGroup/defaultSecurityRules/AllowVnetInBound",
"name": "AllowVnetInBound",
"priority": 65000,
"protocol": "*",
"provisioningState": "Succeeded",
"resourceGroup": "myResourceGroup",
"sourceAddressPrefix": "VirtualNetwork",
"sourcePortRange": "*"
},
{
"access": "Allow",
"description": "Allow inbound traffic from azure load balancer",
"destinationAddressPrefix": "*",
"destinationPortRange": "*",
"direction": "Inbound",
"etag": "W/\"3371b313-ea9f-4687-a336-a8ebdfd80523\"",
"id": "/subscriptions/guid/resourceGroups/myResourceGroup/providers/Microsoft.Network/networkSecurityGroups/myNetworkSecurityGroup/defaultSecurityRules/AllowAzureLoadBalancerInBou",
"name": "AllowAzureLoadBalancerInBound",
"priority": 65001,
"protocol": "*",
"provisioningState": "Succeeded",
"resourceGroup": "myResourceGroup",
"sourceAddressPrefix": "AzureLoadBalancer",
"sourcePortRange": "*"
},
{
"access": "Deny",
"description": "Deny all inbound traffic",
"destinationAddressPrefix": "*",
"destinationPortRange": "*",
"direction": "Inbound",
"etag": "W/\"3371b313-ea9f-4687-a336-a8ebdfd80523\"",
"id": "/subscriptions/guid/resourceGroups/myResourceGroup/providers/Microsoft.Network/networkSecurityGroups/myNetworkSecurityGroup/defaultSecurityRules/DenyAllInBound",
"name": "DenyAllInBound",
"priority": 65500,
"protocol": "*",
"provisioningState": "Succeeded",
"resourceGroup": "myResourceGroup",
"sourceAddressPrefix": "*",
"sourcePortRange": "*"
},
{
"access": "Allow",
"description": "Allow outbound traffic from all VMs to all VMs in VNET",
"destinationAddressPrefix": "VirtualNetwork",
"destinationPortRange": "*",
"direction": "Outbound",
"etag": "W/\"3371b313-ea9f-4687-a336-a8ebdfd80523\"",
"id": "/subscriptions/guid/resourceGroups/myResourceGroup/providers/Microsoft.Network/networkSecurityGroups/myNetworkSecurityGroup/defaultSecurityRules/AllowVnetOutBound",
"name": "AllowVnetOutBound",
"priority": 65000,
"protocol": "*",
"provisioningState": "Succeeded",
"resourceGroup": "myResourceGroup",
"sourceAddressPrefix": "VirtualNetwork",
"sourcePortRange": "*"
},
{
"access": "Allow",
"description": "Allow outbound traffic from all VMs to Internet",
"destinationAddressPrefix": "Internet",
"destinationPortRange": "*",
"direction": "Outbound",
"etag": "W/\"3371b313-ea9f-4687-a336-a8ebdfd80523\"",
"id": "/subscriptions/guid/resourceGroups/myResourceGroup/providers/Microsoft.Network/networkSecurityGroups/myNetworkSecurityGroup/defaultSecurityRules/AllowInternetOutBound",
"name": "AllowInternetOutBound",
"priority": 65001,
"protocol": "*",
"provisioningState": "Succeeded",
"resourceGroup": "myResourceGroup",
"sourceAddressPrefix": "*",
"sourcePortRange": "*"
},
{
"access": "Deny",
"description": "Deny all outbound traffic",
"destinationAddressPrefix": "*",
"destinationPortRange": "*",
"direction": "Outbound",
"etag": "W/\"3371b313-ea9f-4687-a336-a8ebdfd80523\"",
"id": "/subscriptions/guid/resourceGroups/myResourceGroup/providers/Microsoft.Network/networkSecurityGroups/myNetworkSecurityGroup/defaultSecurityRules/DenyAllOutBound",
"name": "DenyAllOutBound",
"priority": 65500,
"protocol": "*",
"provisioningState": "Succeeded",
"resourceGroup": "myResourceGroup",
"sourceAddressPrefix": "*",
"sourcePortRange": "*"
}
],
"etag": "W/\"3371b313-ea9f-4687-a336-a8ebdfd80523\"",
"id": "/subscriptions/guid/resourceGroups/myResourceGroup/providers/Microsoft.Network/networkSecurityGroups/myNetworkSecurityGroup",
"location": "eastus",
"name": "myNetworkSecurityGroup",
"networkInterfaces": null,
"provisioningState": "Succeeded",
"resourceGroup": "myResourceGroup",
"resourceGuid": "47a9964e-23a3-438a-a726-8d60ebbb1c3c",
"securityRules": [
{
"access": "Allow",
"description": null,
"destinationAddressPrefix": "*",
"destinationPortRange": "22",
"direction": "Inbound",
"etag": "W/\"9e344b60-0daa-40a6-84f9-0ebbe4a4b640\"",
"id": "/subscriptions/guid/resourceGroups/myResourceGroup/providers/Microsoft.Network/networkSecurityGroups/myNetworkSecurityGroup/securityRules/myNetworkSecurityGroupRuleSSH",
"name": "myNetworkSecurityGroupRuleSSH",
"priority": 1000,
"protocol": "Tcp",
"provisioningState": "Succeeded",
"resourceGroup": "myResourceGroup",
"sourceAddressPrefix": "*",
"sourcePortRange": "*"
},
{
"access": "Allow",
"description": null,
"destinationAddressPrefix": "*",
"destinationPortRange": "80",
"direction": "Inbound",
"etag": "W/\"9e344b60-0daa-40a6-84f9-0ebbe4a4b640\"",
"id": "/subscriptions/guid/resourceGroups/myResourceGroup/providers/Microsoft.Network/networkSecurityGroups/myNetworkSecurityGroup/securityRules/myNetworkSecurityGroupRuleWeb",
"name": "myNetworkSecurityGroupRuleWeb",
"priority": 1001,
"protocol": "Tcp",
"provisioningState": "Succeeded",
"resourceGroup": "myResourceGroup",
"sourceAddressPrefix": "*",
"sourcePortRange": "*"
}
],
"subnets": null,
"tags": null,
"type": "Microsoft.Network/networkSecurityGroups"
}
Membuat NIC virtual
Kartu antarmuka jaringan virtual (NIC) tersedia secara terprogram karena Anda dapat menerapkan aturan penggunaannya. Tergantung pada ukuran VM, Anda dapat melampirkan beberapa NIC virtual ke VM. Dalam perintah buat nic jaringan az berikut, Anda membuat NIC bernama myNic dan mengaitkannya dengan grup keamanan jaringan Anda. Alamat IP publik myPublicIP juga dikaitkan dengan NIC virtual.
az network nic create \
--resource-group myResourceGroup \
--name myNic \
--vnet-name myVnet \
--subnet mySubnet \
--public-ip-address myPublicIP \
--network-security-group myNetworkSecurityGroup
Output:
{
"NewNIC": {
"dnsSettings": {
"appliedDnsServers": [],
"dnsServers": [],
"internalDnsNameLabel": null,
"internalDomainNameSuffix": "brqlt10lvoxedgkeuomc4pm5tb.bx.internal.cloudapp.net",
"internalFqdn": null
},
"enableAcceleratedNetworking": false,
"enableIpForwarding": false,
"etag": "W/\"04b5ab44-d8f4-422a-9541-e5ae7de8466d\"",
"id": "/subscriptions/guid/resourceGroups/myResourceGroup/providers/Microsoft.Network/networkInterfaces/myNic",
"ipConfigurations": [
{
"applicationGatewayBackendAddressPools": null,
"etag": "W/\"04b5ab44-d8f4-422a-9541-e5ae7de8466d\"",
"id": "/subscriptions/guid/resourceGroups/myResourceGroup/providers/Microsoft.Network/networkInterfaces/myNic/ipConfigurations/ipconfig1",
"loadBalancerBackendAddressPools": null,
"loadBalancerInboundNatRules": null,
"name": "ipconfig1",
"primary": true,
"privateIpAddress": "192.168.1.4",
"privateIpAddressVersion": "IPv4",
"privateIpAllocationMethod": "Dynamic",
"provisioningState": "Succeeded",
"publicIpAddress": {
"dnsSettings": null,
"etag": null,
"id": "/subscriptions/guid/resourceGroups/myResourceGroup/providers/Microsoft.Network/publicIPAddresses/myPublicIP",
"idleTimeoutInMinutes": null,
"ipAddress": null,
"ipConfiguration": null,
"location": null,
"name": null,
"provisioningState": null,
"publicIpAddressVersion": null,
"publicIpAllocationMethod": null,
"resourceGroup": "myResourceGroup",
"resourceGuid": null,
"tags": null,
"type": null
},
"resourceGroup": "myResourceGroup",
"subnet": {
"addressPrefix": null,
"etag": null,
"id": "/subscriptions/guid/resourceGroups/myResourceGroup/providers/Microsoft.Network/virtualNetworks/myVnet/subnets/mySubnet",
"ipConfigurations": null,
"name": null,
"networkSecurityGroup": null,
"provisioningState": null,
"resourceGroup": "myResourceGroup",
"resourceNavigationLinks": null,
"routeTable": null
}
}
],
"location": "eastus",
"macAddress": null,
"name": "myNic",
"networkSecurityGroup": {
"defaultSecurityRules": null,
"etag": null,
"id": "/subscriptions/guid/resourceGroups/myResourceGroup/providers/Microsoft.Network/networkSecurityGroups/myNetworkSecurityGroup",
"location": null,
"name": null,
"networkInterfaces": null,
"provisioningState": null,
"resourceGroup": "myResourceGroup",
"resourceGuid": null,
"securityRules": null,
"subnets": null,
"tags": null,
"type": null
},
"primary": null,
"provisioningState": "Succeeded",
"resourceGroup": "myResourceGroup",
"resourceGuid": "b3dbaa0e-2cf2-43be-a814-5cc49fea3304",
"tags": null,
"type": "Microsoft.Network/networkInterfaces",
"virtualMachine": null
}
}
Membuat set ketersediaan
Set ketersediaan membantu menyebarkan VM Anda ke seluruh domain yang rusak dan memperbarui domain. Meskipun Anda hanya membuat satu VM saat ini, praktik terbaik adalah menggunakan set ketersediaan untuk membuatnya lebih mudah untuk dikembangkan di masa depan.
Domain kesalahan mendefinisikan pengelompokan komputer virtual yang berbagi sumber daya umum dan perpindahan jaringan. Secara default, komputer virtual yang dikonfigurasi dalam set ketersediaan Anda dipisahkan dengan hingga tiga domain kesalahan. Masalah perangkat keras di salah satu domain kesalahan ini tidak memengaruhi setiap VM yang menjalankan aplikasi Anda.
Domain pembaruan menunjukkan grup komputer virtual dan perangkat keras fisik yang mendasarinya yang dapat dimulai ulang secara bersamaan. Selama masa pemeliharaan yang direncanakan, urutan domain pembaruan yang dimulai ulang mungkin tidak berurutan, tetapi hanya ada satu domain pembaruan yang dimulai ulang pada satu waktu.
Azure secara otomatis mendistribusikan VM di seluruh domain yang rusak dan memperbaruinya saat menempatkannya dalam kumpulan ketersediaan. Untuk informasi selengkapnya, lihat mengelola ketersediaan VM.
Buat set ketersediaan dengan buat set ketersediaan az vm. Contoh berikut membuat set ketersediaan dengan nama myAvailabilitySet:
az vm availability-set create \
--resource-group myResourceGroup \
--name myAvailabilitySet
Output mencatat domain kesalahan dan memperbarui domain:
{
"id": "/subscriptions/guid/resourceGroups/myResourceGroup/providers/Microsoft.Compute/availabilitySets/myAvailabilitySet",
"location": "eastus",
"managed": null,
"name": "myAvailabilitySet",
"platformFaultDomainCount": 2,
"platformUpdateDomainCount": 5,
"resourceGroup": "myResourceGroup",
"sku": {
"capacity": null,
"managed": true,
"tier": null
},
"statuses": null,
"tags": {},
"type": "Microsoft.Compute/availabilitySets",
"virtualMachines": []
}
Membuat VM
Anda telah membuat sumber daya jaringan untuk mendukung VM yang dapat diakses Internet. Sekarang buat VM dan amankan dengan kunci SSH. Dalam contoh ini, mari kita buat VM Ubuntu berdasarkan LTS terbaru. Anda dapat menemukan gambar tambahan dengan daftar gambar az vm,seperti yang dijelaskan dalam menemukan gambar Azure VM.
Tentukan kunci SSH yang akan digunakan untuk autentikasi. Jika Anda tidak memiliki pasangan kunci publik SSH, Anda dapat membuatnya atau menggunakan parameter --generate-ssh-keys
untuk membuatnya untuk Anda. Jika Anda sudah memiliki pasangan kunci, parameter ini menggunakan tombol yang ada di ~/.ssh
.
Buat VM dengan menyatukan semua sumber daya dan informasi dengan perintah buat az vm. Berikut contoh membuat VM dengan nama myVm:
az vm create \
--resource-group myResourceGroup \
--name myVM \
--location eastus \
--availability-set myAvailabilitySet \
--nics myNic \
--image Ubuntu2204 \
--admin-username azureuser \
--generate-ssh-keys
SSH ke VM Anda dengan entri DNS yang Anda berikan saat Anda membuat alamat IP publik. fqdn
ini ditunjukkan di output saat Anda membuat VM Anda:
{
"fqdns": "mypublicdns.eastus.cloudapp.azure.com",
"id": "/subscriptions/guid/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM",
"location": "eastus",
"macAddress": "00-0D-3A-13-71-C8",
"powerState": "VM running",
"privateIpAddress": "192.168.1.5",
"publicIpAddress": "13.90.94.252",
"resourceGroup": "myResourceGroup"
}
ssh azureuser@mypublicdns.eastus.cloudapp.azure.com
Output:
The authenticity of host 'mypublicdns.eastus.cloudapp.azure.com (13.90.94.252)' can't be established.
ECDSA key fingerprint is SHA256:SylINP80Um6XRTvWiFaNz+H+1jcrKB1IiNgCDDJRj6A.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'mypublicdns.eastus.cloudapp.azure.com,13.90.94.252' (ECDSA) to the list of known hosts.
Welcome to Ubuntu 16.04.3 LTS (GNU/Linux 4.11.0-1016-azure x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
Get cloud support with Ubuntu Advantage Cloud Guest:
https://www.ubuntu.com/business/services/cloud
0 packages can be updated.
0 updates are security updates.
The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.
azureuser@myVM:~$
Anda dapat menginstal NGINX dan melihat arus lalu lintas ke VM. Pasang NGINX sebagai berikut:
sudo apt-get install -y nginx
Untuk melihat situs NGINX default beraksi, buka browser web Anda dan masukkan FQDN Anda:
Mengekspor sebagai templat
Bagaimana jika sekarang Anda ingin membuat lingkungan pengembangan tambahan dengan parameter yang sama, atau lingkungan produksi yang cocok dengannya? Azure Resource Manager menggunakan template JSON yang menentukan semua parameter untuk lingkungan Anda. Anda membangun seluruh lingkungan dengan merujuk pada templat JSON ini. Anda dapat membuat templat JSON secara manual atau mengekspor lingkungan yang ada untuk membuat templat JSON untuk Anda. Gunakan ekspor grup az untuk mengekspor grup sumber daya Anda sebagai berikut:
az group export --name myResourceGroup > myResourceGroup.json
Perintah ini membuat berkas myResourceGroup.json
di dalam direktori kerja Anda saat ini. Saat Anda membuat lingkungan dari templat ini, Anda akan dimintai semua nama sumber daya. Anda dapat mengisi nama-nama ini di file templat Anda dengan menambahkan --include-parameter-default-value
parameter ke az group export
perintah. Edit templat JSON Anda untuk menentukan nama sumber daya, atau buat file parameters.json yang menetapkan nama sumber daya.
Untuk membuat lingkungan dari templat Anda, gunakan buat grup penerapan az sebagai berikut:
az deployment group create \
--resource-group myNewResourceGroup \
--template-file myResourceGroup.json
Anda mungkin ingin membaca selengkapnya tentang cara menerapkan dari templat. Pelajari tentang cara memperbarui lingkungan secara bertahap, menggunakan file parameter, dan mengakses templat dari satu lokasi penyimpanan.
Langkah berikutnya
Sekarang Anda siap untuk mulai bekerja dengan beberapa komponen jaringan dan VM. Anda dapat menggunakan lingkungan sampel ini untuk membangun aplikasi Anda dengan menggunakan komponen inti yang diperkenalkan di sini.