Een volledige virtuele Linux-machine maken met de Azure CLI
Van toepassing op: ✔️ Virtuele Linux-machines
Als u snel een virtuele machine (VM) in Azure wilt maken, kunt u één Azure CLI-opdracht gebruiken die standaardwaarden gebruikt om alle vereiste ondersteunende resources te maken. Resources zoals een virtueel netwerk, openbaar IP-adres en regels voor netwerkbeveiligingsgroepen worden automatisch gemaakt. Voor meer controle over uw omgeving in productiegebruik kunt u deze resources van tevoren maken en vervolgens uw VM's eraan toevoegen. Dit artikel begeleidt u bij het maken van een virtuele machine en elk van de ondersteunende resources één voor één.
Zorg ervoor dat u de nieuwste Azure CLI hebt geïnstalleerd en bent aangemeld bij een Azure-account in az login.
Vervang in de volgende voorbeelden voorbeeldparameternamen door uw eigen waarden. Voorbeelden van parameternamen zijn myResourceGroup, myVnet en myVM.
Resourcegroep maken
Een Azure-resourcegroep is een logische container waarin Azure-resources worden geïmplementeerd en beheerd. Er moet een resourcegroep worden gemaakt voordat een virtuele machine en ondersteunende virtuele netwerkresources worden gemaakt. Maak de resourcegroep met az group create. In het volgende voorbeeld wordt een resourcegroep met de naam myResourceGroup gemaakt op de locatie eastus:
az group create --name myResourceGroup --location eastus
Standaard bevindt de uitvoer van Azure CLI-opdrachten zich in JSON (JavaScript Object Notation). Als u de standaarduitvoer wilt wijzigen in een lijst of tabel, gebruikt u bijvoorbeeld az config set core.output=table. U kunt ook aan elke opdracht toevoegen --output
voor een eenmalige wijziging in de uitvoerindeling. In het volgende voorbeeld ziet u de JSON-uitvoer van de az group create
opdracht:
{
"id": "/subscriptions/guid/resourceGroups/myResourceGroup",
"location": "eastus",
"name": "myResourceGroup",
"properties": {
"provisioningState": "Succeeded"
},
"tags": null
}
Een virtueel netwerk en een subnet maken
Vervolgens maakt u een virtueel netwerk in Azure en een subnet waarin u uw VM's kunt maken. Gebruik az network vnet create om een virtueel netwerk met de naam myVnet te maken met het adresvoorvoegsel 192.168.0.0/16 . U voegt ook een subnet met de naam mySubnet toe met het adresvoorvoegsel 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
In de uitvoer ziet u dat het subnet logisch is gemaakt in het virtuele netwerk:
{
"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
}
Een openbaar IP-adres maken
We gaan nu een openbaar IP-adres maken met az network public-ip create. Met dit openbare IP-adres kunt u vanaf internet verbinding maken met uw VM's. Omdat het standaardadres dynamisch is, maakt u een benoemde DNS-vermelding met de --domain-name-label
parameter. In het volgende voorbeeld wordt een openbaar IP-adres met de naam myPublicIP gemaakt met de DNS-naam van mypublicdns. Omdat de DNS-naam uniek moet zijn, geeft u uw eigen unieke DNS-naam op:
az network public-ip create \
--resource-group myResourceGroup \
--name myPublicIP \
--dns-name mypublicdns
Uitvoer:
{
"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"
}
}
Een netwerkbeveiligingsgroep maken
Als u de verkeersstroom in en uit uw VM's wilt beheren, past u een netwerkbeveiligingsgroep toe op een virtuele NIC of subnet. In het volgende voorbeeld wordt az network nsg create gebruikt om een netwerkbeveiligingsgroep met de naam myNetworkSecurityGroup te maken:
az network nsg create \
--resource-group myResourceGroup \
--name myNetworkSecurityGroup
U definieert regels die specifiek verkeer toestaan of weigeren. Als u binnenkomende verbindingen op poort 22 wilt toestaan (om SSH-toegang in te schakelen, maakt u een binnenkomende regel met az network nsg rule create. In het volgende voorbeeld wordt een regel met de naam myNetworkSecurityGroupRuleSSH gemaakt:
az network nsg rule create \
--resource-group myResourceGroup \
--nsg-name myNetworkSecurityGroup \
--name myNetworkSecurityGroupRuleSSH \
--protocol tcp \
--priority 1000 \
--destination-port-range 22 \
--access allow
Als u binnenkomende verbindingen wilt toestaan op poort 80 (voor webverkeer), voegt u een andere regel voor netwerkbeveiligingsgroepen toe. In het volgende voorbeeld wordt een regel gemaakt met de naam myNetworkSecurityGroupRuleHTTP:
az network nsg rule create \
--resource-group myResourceGroup \
--nsg-name myNetworkSecurityGroup \
--name myNetworkSecurityGroupRuleWeb \
--protocol tcp \
--priority 1001 \
--destination-port-range 80 \
--access allow
Bekijk de netwerkbeveiligingsgroep en -regels met az network nsg show:
az network nsg show --resource-group myResourceGroup --name myNetworkSecurityGroup
Uitvoer:
{
"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"
}
Een virtuele NIC maken
Virtuele netwerkinterfacekaarten (NIC's) zijn programmatisch beschikbaar omdat u regels op het gebruik ervan kunt toepassen. Afhankelijk van de VM-grootte kunt u meerdere virtuele NIC's aan een virtuele machine koppelen. In de volgende az network nic create command maakt u een NIC met de naam myNic en koppelt u deze aan uw netwerkbeveiligingsgroep. Het openbare IP-adres myPublicIP is ook gekoppeld aan de virtuele NIC.
az network nic create \
--resource-group myResourceGroup \
--name myNic \
--vnet-name myVnet \
--subnet mySubnet \
--public-ip-address myPublicIP \
--network-security-group myNetworkSecurityGroup
Uitvoer:
{
"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
}
}
Een beschikbaarheidsset maken
Met beschikbaarheidssets kunt u uw VM's verspreiden over foutdomeinen en updatedomeinen. Hoewel u op dit moment slechts één virtuele machine maakt, is het raadzaam om beschikbaarheidssets te gebruiken om het in de toekomst gemakkelijker uit te breiden.
Foutdomeinen definiëren een groepering van virtuele machines die een gemeenschappelijke voedingsbron en netwerkswitch delen. De virtuele machines die in uw beschikbaarheidsset zijn geconfigureerd, worden standaard verdeeld over maximaal drie foutdomeinen. Een hardwareprobleem in een van deze foutdomeinen heeft geen invloed op elke VM waarop uw app wordt uitgevoerd.
Updatedomeinen geven groepen virtuele machines en onderliggende fysieke hardware aan die tegelijkertijd opnieuw kunnen worden opgestart. Tijdens gepland onderhoud is de volgorde waarin updatedomeinen opnieuw worden opgestart mogelijk niet sequentieel, maar slechts één updatedomein tegelijk opnieuw opgestart.
Azure distribueert vm's automatisch over de fout- en updatedomeinen wanneer ze in een beschikbaarheidsset worden geplaatst. Zie voor meer informatie het beheren van de beschikbaarheid van VM's.
Maak een beschikbaarheidsset voor uw VIRTUELE machine met az vm availability-set create. In het volgende voorbeeld wordt een beschikbaarheidsset met de naam myAvailabilitySet gemaakt:
az vm availability-set create \
--resource-group myResourceGroup \
--name myAvailabilitySet
In de uitvoer worden foutdomeinen en updatedomeinen weergegeven:
{
"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": []
}
Een VM maken:
U hebt de netwerkbronnen gemaakt ter ondersteuning van via internet toegankelijke VM's. Maak nu een virtuele machine en beveilig deze met een SSH-sleutel. In dit voorbeeld gaan we een Ubuntu-VM maken op basis van de meest recente LTS. U vindt aanvullende installatiekopieën met az vm image list, zoals beschreven in het zoeken naar Azure VM-installatiekopieën.
Geef een SSH-sleutel op die moet worden gebruikt voor verificatie. Als u geen openbaar SSH-sleutelpaar hebt, kunt u deze maken of de --generate-ssh-keys
parameter gebruiken om ze voor u te maken. Als u al een sleutelpaar hebt, gebruikt deze parameter bestaande sleutels in ~/.ssh
.
Maak de VIRTUELE machine door alle resources en informatie samen te brengen met de opdracht az vm create . In het volgende voorbeeld wordt een VM met de naam myVM gemaakt:
az vm create \
--resource-group myResourceGroup \
--name myVM \
--location eastus \
--availability-set myAvailabilitySet \
--nics myNic \
--image Ubuntu2204 \
--admin-username azureuser \
--generate-ssh-keys
SSH naar uw VIRTUELE machine met de DNS-vermelding die u hebt opgegeven bij het maken van het openbare IP-adres. Dit fqdn
wordt weergegeven in de uitvoer terwijl u uw VIRTUELE machine maakt:
{
"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
Uitvoer:
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:~$
U kunt NGINX installeren en de verkeersstroom naar de VIRTUELE machine bekijken. Installeer NGINX als volgt:
sudo apt-get install -y nginx
Als u de standaard NGINX-site in actie wilt zien, opent u uw webbrowser en voert u uw FQDN in:
Exporteren als sjabloon
Wat moet u doen als u nu een extra ontwikkelomgeving wilt maken met dezelfde parameters of een productieomgeving die overeenkomt met deze omgeving? Resource Manager maakt gebruik van JSON-sjablonen waarmee alle parameters voor uw omgeving worden gedefinieerd. U bouwt volledige omgevingen op door te verwijzen naar deze JSON-sjabloon. U kunt JSON-sjablonen handmatig bouwen of een bestaande omgeving exporteren om de JSON-sjabloon voor u te maken. Gebruik az group export als volgt om uw resourcegroep te exporteren:
az group export --name myResourceGroup > myResourceGroup.json
Met deze opdracht maakt u het myResourceGroup.json
bestand in uw huidige werkmap. Wanneer u een omgeving maakt op basis van deze sjabloon, wordt u gevraagd om alle resourcenamen. U kunt deze namen in het sjabloonbestand vullen door de --include-parameter-default-value
parameter toe te voegen aan de az group export
opdracht. Bewerk uw JSON-sjabloon om de resourcenamen op te geven of maak een parameters.json-bestand dat de resourcenamen opgeeft.
Als u een omgeving wilt maken op uw sjabloon, gebruikt u az deployment group create als volgt:
az deployment group create \
--resource-group myNewResourceGroup \
--template-file myResourceGroup.json
Misschien wilt u meer lezen over het implementeren vanuit sjablonen. Meer informatie over het incrementeel bijwerken van omgevingen, het parameterbestand gebruiken en sjablonen openen vanaf één opslaglocatie.
Volgende stappen
U bent nu klaar om te gaan werken met meerdere netwerkonderdelen en VM's. U kunt deze voorbeeldomgeving gebruiken om uw toepassing uit te bouwen met behulp van de belangrijkste onderdelen die hier worden geïntroduceerd.