Tworzenie kompletnej maszyny wirtualnej z systemem Linux przy użyciu interfejsu wiersza polecenia platformy Azure
Dotyczy: ✔️ maszyny wirtualne z systemem Linux
Aby szybko utworzyć maszynę wirtualną na platformie Azure, możesz użyć jednego polecenia interfejsu wiersza polecenia platformy Azure, które używa wartości domyślnych do tworzenia wymaganych zasobów pomocniczych. Zasoby, takie jak sieć wirtualna, publiczny adres IP i reguły sieciowej grupy zabezpieczeń, są tworzone automatycznie. Aby uzyskać większą kontrolę nad środowiskiem w środowisku produkcyjnym, możesz utworzyć te zasoby przed upływem czasu, a następnie dodać do nich maszyny wirtualne. W tym artykule opisano sposób tworzenia maszyny wirtualnej i każdego z zasobów pomocniczych jeden po drugim.
Upewnij się, że zainstalowano najnowszy interfejs wiersza polecenia platformy Azure i zalogowano się do konta platformy Azure za pomocą polecenia az login.
W poniższych przykładach zastąp przykładowe nazwy parametrów własnymi wartościami. Przykładowe nazwy parametrów to myResourceGroup, myVnet i myVM.
Utwórz grupę zasobów
Grupa zasobów platformy Azure to logiczny kontener przeznaczony do wdrażania zasobów platformy Azure i zarządzania nimi. Przed maszyną wirtualną i obsługą zasobów sieci wirtualnej należy utworzyć grupę zasobów. Utwórz grupę zasobów za pomocą polecenia az group create. W poniższym przykładzie pokazano tworzenie grupy zasobów o nazwie myResourceGroup w lokalizacji eastus:
az group create --name myResourceGroup --location eastus
Domyślnie dane wyjściowe poleceń interfejsu wiersza polecenia platformy Azure są w formacie JSON (JavaScript Object Notation). Aby zmienić domyślne dane wyjściowe na listę lub tabelę, na przykład użyj polecenia az config set core.output=table. Można również dodać --output
do dowolnego polecenia jednorazowej zmiany w formacie danych wyjściowych. Poniższy przykład przedstawia dane wyjściowe JSON z az group create
polecenia :
{
"id": "/subscriptions/guid/resourceGroups/myResourceGroup",
"location": "eastus",
"name": "myResourceGroup",
"properties": {
"provisioningState": "Succeeded"
},
"tags": null
}
Tworzenie sieci wirtualnej i podsieci
Następnie utworzysz sieć wirtualną na platformie Azure i podsieć, w której można utworzyć maszyny wirtualne. Użyj polecenia az network vnet create , aby utworzyć sieć wirtualną o nazwie myVnet z prefiksem adresu 192.168.0.0/16 . Dodasz również podsieć o nazwie mySubnet z prefiksem adresu 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
Dane wyjściowe pokazują, że podsieć jest logicznie tworzona w sieci wirtualnej:
{
"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
}
Tworzenie publicznego adresu IP
Teraz utwórzmy publiczny adres IP za pomocą polecenia az network public-ip create. Ten publiczny adres IP umożliwia łączenie się z maszynami wirtualnymi z Internetu. Ponieważ adres domyślny jest dynamiczny, utwórz nazwany wpis DNS z parametrem --domain-name-label
. Poniższy przykład tworzy publiczny adres IP o nazwie myPublicIP z nazwą DNS mypublicdns. Ponieważ nazwa DNS musi być unikatowa, podaj własną unikatową nazwę DNS:
az network public-ip create \
--resource-group myResourceGroup \
--name myPublicIP \
--dns-name mypublicdns
Wyjście:
{
"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"
}
}
Tworzenie sieciowej grupy zabezpieczeń
Aby kontrolować przepływ ruchu przychodzącego i wychodzącego z maszyn wirtualnych, zastosuj sieciową grupę zabezpieczeń do wirtualnej karty sieciowej lub podsieci. W poniższym przykładzie użyto polecenia az network nsg create , aby utworzyć sieciową grupę zabezpieczeń o nazwie myNetworkSecurityGroup:
az network nsg create \
--resource-group myResourceGroup \
--name myNetworkSecurityGroup
Definiujesz reguły zezwalające na określony ruch lub odmawiające go. Aby zezwolić na połączenia przychodzące na porcie 22 (aby włączyć dostęp za pomocą protokołu SSH, utwórz regułę ruchu przychodzącego za pomocą polecenia az network nsg rule create. Poniższy przykład tworzy regułę o nazwie myNetworkSecurityGroupRuleSSH:
az network nsg rule create \
--resource-group myResourceGroup \
--nsg-name myNetworkSecurityGroup \
--name myNetworkSecurityGroupRuleSSH \
--protocol tcp \
--priority 1000 \
--destination-port-range 22 \
--access allow
Aby zezwolić na połączenia przychodzące na porcie 80 (dla ruchu internetowego), dodaj kolejną regułę sieciowej grupy zabezpieczeń. Poniższy przykład tworzy regułę o nazwie myNetworkSecurityGroupRuleHTTP:
az network nsg rule create \
--resource-group myResourceGroup \
--nsg-name myNetworkSecurityGroup \
--name myNetworkSecurityGroupRuleWeb \
--protocol tcp \
--priority 1001 \
--destination-port-range 80 \
--access allow
Sprawdź sieciową grupę zabezpieczeń i reguły za pomocą polecenia az network nsg show:
az network nsg show --resource-group myResourceGroup --name myNetworkSecurityGroup
Wyjście:
{
"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"
}
Tworzenie wirtualnej karty sieciowej
Wirtualne karty sieciowe są dostępne programowo, ponieważ można stosować reguły do ich użycia. W zależności od rozmiaru maszyny wirtualnej można dołączyć wiele wirtualnych kart sieciowych do maszyny wirtualnej. W poniższym poleceniu az network nic create utworzysz kartę sieciową o nazwie myNic i skojarzysz ją z sieciową grupą zabezpieczeń. Publiczny adres IP myPublicIP jest również skojarzony z wirtualną kartą sieciową.
az network nic create \
--resource-group myResourceGroup \
--name myNic \
--vnet-name myVnet \
--subnet mySubnet \
--public-ip-address myPublicIP \
--network-security-group myNetworkSecurityGroup
Wyjście:
{
"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
}
}
Tworzenie zestawu dostępności
Zestawy dostępności ułatwiają rozpowszechnianie maszyn wirtualnych w domenach błędów i domenach aktualizacji. Mimo że teraz utworzysz tylko jedną maszynę wirtualną, najlepszym rozwiązaniem jest użycie zestawów dostępności, aby ułatwić rozszerzanie w przyszłości.
Domeny błędów definiują grupę maszyn wirtualnych, które współużytkują wspólne źródło zasilania i przełącznik sieciowy. Domyślnie maszyny wirtualne skonfigurowane w zestawie dostępności są oddzielone od maksymalnie trzech domen błędów. Problem ze sprzętem w jednej z tych domen błędów nie ma wpływu na każdą maszynę wirtualną, na której jest uruchomiona aplikacja.
Domeny aktualizacji wskazują grupy maszyn wirtualnych i podstawowy sprzęt fizyczny, który można uruchomić ponownie w tym samym czasie. Podczas planowanej konserwacji kolejność ponownego uruchamiania domen aktualizacji może nie być sekwencyjny, ale tylko jedna domena aktualizacji jest uruchamiana ponownie naraz.
Platforma Azure automatycznie dystrybuuje maszyny wirtualne między domeny błędów i aktualizacji podczas umieszczania ich w zestawie dostępności. Aby uzyskać więcej informacji, zobacz zarządzanie dostępnością maszyn wirtualnych.
Utwórz zestaw dostępności dla maszyny wirtualnej za pomocą polecenia az vm availability-set create. W poniższym przykładzie zostanie utworzony zestaw dostępności o nazwie myAvailabilitySet:
az vm availability-set create \
--resource-group myResourceGroup \
--name myAvailabilitySet
Domeny błędów notatek wyjściowych i domeny aktualizacji:
{
"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": []
}
Tworzenie maszyny wirtualnej
Utworzono zasoby sieciowe do obsługi maszyn wirtualnych dostępnych z Internetu. Teraz utwórz maszynę wirtualną i zabezpiecz ją za pomocą klucza SSH. W tym przykładzie utworzymy maszynę wirtualną z systemem Ubuntu na podstawie najnowszej wersji LTS. Dodatkowe obrazy można znaleźć za pomocą polecenia az vm image list, zgodnie z opisem w artykule znajdowanie obrazów maszyn wirtualnych platformy Azure.
Określ klucz SSH, który ma być używany do uwierzytelniania. Jeśli nie masz pary kluczy publicznych SSH, możesz je utworzyć lub użyć parametru --generate-ssh-keys
, aby je utworzyć. Jeśli masz już parę kluczy, ten parametr używa istniejących kluczy w pliku ~/.ssh
.
Utwórz maszynę wirtualną, przenosząc wszystkie zasoby i informacje razem z poleceniem az vm create . W poniższym przykładzie utworzono maszynę wirtualną o nazwie myVM:
az vm create \
--resource-group myResourceGroup \
--name myVM \
--location eastus \
--availability-set myAvailabilitySet \
--nics myNic \
--image Ubuntu2204 \
--admin-username azureuser \
--generate-ssh-keys
Połączenie SSH z maszyną wirtualną przy użyciu wpisu DNS podanego podczas tworzenia publicznego adresu IP. Jest to fqdn
wyświetlane w danych wyjściowych podczas tworzenia maszyny wirtualnej:
{
"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
Wyjście:
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:~$
Możesz zainstalować serwer NGINX i wyświetlić przepływ ruchu do maszyny wirtualnej. Zainstaluj serwer NGINX w następujący sposób:
sudo apt-get install -y nginx
Aby wyświetlić domyślną witrynę NGINX w akcji, otwórz przeglądarkę internetową i wprowadź nazwę FQDN:
Eksportowanie jako szablonu
Co zrobić, jeśli chcesz teraz utworzyć dodatkowe środowisko deweloperskie z tymi samymi parametrami lub środowiskiem produkcyjnym, które do niego pasuje? Usługa Resource Manager używa szablonów JSON, które definiują wszystkie parametry środowiska. Tworzysz całe środowiska, odwołując się do tego szablonu JSON. Szablony JSON można tworzyć ręcznie lub eksportować istniejące środowisko w celu utworzenia szablonu JSON. Użyj polecenia az group export , aby wyeksportować grupę zasobów w następujący sposób:
az group export --name myResourceGroup > myResourceGroup.json
To polecenie tworzy myResourceGroup.json
plik w bieżącym katalogu roboczym. Podczas tworzenia środowiska na podstawie tego szablonu zostanie wyświetlony monit o podanie wszystkich nazw zasobów. Te nazwy można wypełnić w pliku szablonu, dodając --include-parameter-default-value
parametr do az group export
polecenia . Edytuj szablon JSON, aby określić nazwy zasobów, lub utwórz plik parameters.json określający nazwy zasobów.
Aby utworzyć środowisko na podstawie szablonu, użyj polecenia az deployment group create w następujący sposób:
az deployment group create \
--resource-group myNewResourceGroup \
--template-file myResourceGroup.json
Możesz przeczytać więcej na temat sposobu wdrażania z szablonów. Dowiedz się, jak przyrostowo aktualizować środowiska, używać pliku parametrów i uzyskiwać dostęp do szablonów z jednej lokalizacji magazynu.
Następne kroki
Teraz możesz rozpocząć pracę z wieloma składnikami sieciowymi i maszynami wirtualnymi. Możesz użyć tego przykładowego środowiska do skompilowania aplikacji przy użyciu podstawowych składników przedstawionych tutaj.