Aangepaste resourceselectie en -naamgeving met behulp van Azure Export voor Terraform
Azure Export voor Terraform biedt verschillende opties om aan te passen welke resources u exporteert.
In dit artikel leert u voor- en nadelen voor elke optie.
- De gebruikersinterface gebruiken
- Querymodus gebruiken
- Een toewijzingsbestand gebruiken
De gebruikersinterface gebruiken
Wanneer u Azure Export voor Terraform uitvoert in de interactieve modus, worden de opgegeven resources (via de parameters die u opgeeft tijdens het uitvoeren) weergegeven. Standaard worden alle resources geëxporteerd.
Verwijderen fungeert als wisselknop bij het overslaan of opnemen van resources. Als u resources wilt verwijderen uit het exporteren, gebruikt u de pijltoetsen om de gewenste resource te selecteren en drukt u op Delete. De resource wordt bijgewerkt om 'Overslaan' weer te geven.
Als u de actie Overslaan ongedaan wilt maken, controleert u of de overgeslagen resource is geselecteerd en drukt u nogmaals op Delete .
Voordelen:
- Hiervoor is het gebruik van één wisselknop vereist.
- U hoeft de gewenste resources niet te kennen voordat u de opdracht uitvoert.
Nadelen:
- Actie kan tijdrovend zijn als u veel resources hebt om door te schuiven en over te slaan.
Querymodus gebruiken
Het toepassen van een filter met behulp van azure Resource Graph-querysyntaxis is een krachtige techniek wanneer u precies weet welke filters u nodig hebt.
aztfexport query [option] <ARG_where_predicate>
Stel dat u een resourcegroep hebt met een naam myResourceGroup
met veel resources, waaronder een netwerkresource. Als u alleen de netwerkresource wilt exporteren, kunt u de volgende syntaxis gebruiken:
aztfexport query -n "resourceGroup =~ 'myResourceGroup' and type contains 'Microsoft.Network'"
Voordelen:
- Eén opdracht zonder handmatig bewerken vereist.
- Ondersteunt een onbeperkt aantal filters.
- Hiermee wordt een grote hoeveelheid resources efficiënt verwerkt.
Nadelen:
- Eenvoudig uit te sluiten van resources die u moet exporteren.
- Vereist kennis van de Syntaxis van Azure Resource Graph.
Een toewijzingsbestand gebruiken
De volgende syntaxis toont de basisbeginselen voor het exporteren van een set resources die is gedefinieerd in een resourcetoewijzingsbestand:
aztfexport mapping-file [option] <resource_mapping_file>
U kunt een toewijzingsbestand gebruiken in interactieve of niet-interactieve modi:
- Interactieve modus: Druk op s wanneer u interactief in de lijstweergave met resources werkt.
- Niet-interactieve modus: u kunt het toewijzingsbestand genereren in alle exportopdrachten (
resource
,resource-group
,query
mapping file
) door de--generate-mapping-file
vlag toe te voegen.
Als voor uw gebruiksscenario's wijzigingen vooraf moeten worden geëxporteerd, kunt u het toewijzingsbestand handmatig maken of bewerken. Hier volgen enkele voorbeelden van wanneer u uw eigen toewijzingsbestand handmatig wilt bewerken:
Use-case | Stappen |
---|---|
U hebt veel resources in een resourcegroep, maar u hoeft er maar een paar te exporteren. | Verwijder de JSON-objecten uit de gewenste editor en sla het bestand op voordat u het exporteert. |
U wilt de naam van al uw resources op een consistente manier wijzigen. | Wijzig de resource-name eigenschap in elke naam die overeenkomt met de nalevingsstandaarden van uw bedrijf. |
U moet een set resources herstructureren op basis van het resourcetype, zoals netwerken of compute. | Gebruik uw editor om alle Microsoft.Network of Microsoft.Compute resources te zoeken. |
Stel dat u de volgende opdracht uitvoert voor een resourcegroep die een virtuele machine bevat:
aztfexport rg --generate-mapping-file --non-interactive myResourceGroup
De resultaten zijn vergelijkbaar met het volgende JSON-bestand:
{
"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/virtualMachines/vm-MyResourceGroup/extensions/OmsAgentForLinux": {
"resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/virtualMachines/vm-MyResourceGroup/extensions/OmsAgentForLinux",
"resource_type": "azurerm_virtual_machine_extension",
"resource_name": "res-0"
},
"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup": {
"resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup",
"resource_type": "azurerm_resource_group",
"resource_name": "res-1"
},
"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/sshPublicKeys/vm-MyResourceGroup_key": {
"resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/sshPublicKeys/vm-MyResourceGroup_key",
"resource_type": "azurerm_ssh_public_key",
"resource_name": "res-2"
},
"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/virtualMachines/vm-MyResourceGroup": {
"resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/virtualMachines/vm-MyResourceGroup",
"resource_type": "azurerm_linux_virtual_machine",
"resource_name": "res-3"
},
"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Network/networkInterfaces/vm-myResourceGroup-vm-d146": {
"resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Network/networkInterfaces/vm-myResourceGroup-vm-d146",
"resource_type": "azurerm_network_interface",
"resource_name": "res-4"
},
"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Network/networkInterfaces/vm-myResourceGroup-vm-d146/networkSecurityGroups/L3N1YnNjcmlwdGlvbnMvZGJmM2I2Y2ItYzFkMC00ZDA0LTk0YjktNTE1MDliOGQzM2ZkL3Jlc291cmNlR3JvdXBzL2hhc2hpY29uZi12bS1kZW1vL3Byb3ZpZGVycy9NaWNyb3NvZnQuTmV0d29yay9uZXR3b3JrU2VjdXJpdHlHcm91cHMvdm0taGFzaGljb25mLXZtLWRlbW8tbnNn": {
"resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Network/networkInterfaces/vm-myResourceGroup-vm-d146|/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Network/networkSecurityGroups/vm-MyResourceGroup-nsg",
"resource_type": "azurerm_network_interface_security_group_association",
"resource_name": "res-5"
},
"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Network/networkSecurityGroups/vm-MyResourceGroup-nsg": {
"resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Network/networkSecurityGroups/vm-MyResourceGroup-nsg",
"resource_type": "azurerm_network_security_group",
"resource_name": "res-6"
},
"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Network/publicIPAddresses/vm-MyResourceGroup-ip": {
"resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Network/publicIPAddresses/vm-MyResourceGroup-ip",
"resource_type": "azurerm_public_ip",
"resource_name": "res-7"
},
"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Network/virtualNetworks/MyResourceGroup-vnet": {
"resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Network/virtualNetworks/MyResourceGroup-vnet",
"resource_type": "azurerm_virtual_network",
"resource_name": "res-8"
},
"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Network/virtualNetworks/MyResourceGroup-vnet/subnets/default": {
"resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyResourceGroup/providers/Microsoft.Network/virtualNetworks/MyResourceGroup-vnet/subnets/default",
"resource_type": "azurerm_subnet",
"resource_name": "res-9"
}
}
Alleen de objectwaarde in het toewijzingsbestand heeft significantie. De sleutel (standaard ingesteld op Azure resource_id
) is slechts een id in deze modus.
Stel nu dat we de resourcegroep en eventuele rekenresources willen behouden en de resource_name
waarde willen wijzigen.
We kunnen het toewijzingsbestand als volgt bijwerken:
{
"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup": {
"resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup",
"resource_type": "azurerm_resource_group",
"resource_name": "myResourceGroup"
},
"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM": {
"resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM",
"resource_type": "azurerm_linux_virtual_machine",
"resource_name": "myVM"
},
"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup/providers/Microsoft.Compute/sshPublicKeys/myKey": {
"resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup/providers/Microsoft.Compute/sshPublicKeys/myKey",
"resource_type": "azurerm_ssh_public_key",
"resource_name": "myKey"
},
"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/vm-myResourceGroup/extensions/OmsAgentForLinux": {
"resource_id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/vm-myResourceGroup/extensions/OmsAgentForLinux",
"resource_type": "azurerm_virtual_machine_extension",
"resource_name": "myVMExtension"
}
}
Nadat u het toewijzingsbestand hebt bewerkt, exporteert u het toewijzingsbestand met behulp van de volgende opdracht:
aztfexport map -n "aztfexportResourceMapping.json"
Voordelen:
- Omdat u een bestand bewerkt, kunt u een editor gebruiken om te zoeken en te vervangen wat u moet verwijderen of bewerken.
- JSON-uitvoer maakt unieke functionaliteit mogelijk, zoals het filteren van scripts.
- Kan de naam van resources wijzigen zodat deze overeenkomen met uw naamgevingsstandaarden.
- Kan JSON herstructureren in meerdere toewijzingsbestanden.
- Verwerkt grote hoeveelheden resources goed.
Nadelen:
- Voor eenvoudige scenario's kan deze techniek overkill zijn.
- Hiervoor zijn handmatige wijzigingen vereist.
Terraform-importblokken gebruiken
Bij uitvoering aztfexport
v0.13
of hoger naast Terraform v1.5
of hoger genereert de --generate-import-block
opdracht een toewijzingsbestand naast een import.tf
bestand. Het import.tf
bestand bevat importblokken voor elk van de resources aztfexport
die kunnen worden toegewezen. Vanaf dit punt is het gedrag van de configuratie identiek aan de bestaande importblokwerkstroom. Voer het volgende uit terraform plan
om te voltooien.
Als u vervolgens resources uit de resulterende export wilt verwijderen of filteren, kunt u het blok met de id en andere informatie van de resource verwijderen of filteren.
Importblokken en Azure Export vergelijken
Een veelvoorkomende vraag is het verschil tussen het gebruik van Azure Export voor Terraform en importblokken. De voordelen tussen de twee hulpprogramma's die we hebben opgemerkt, zijn:
- Azure Export voor Terraform helpt bij het detecteren van resources. Er zijn verschillende methoden beschikbaar om de gewenste resources te detecteren en te exporteren.
- Azure Export voor Terraform biedt resourcefilters, ook via handmatige en geautomatiseerde middelen.
- Met Azure Export voor Terraform worden automatisch importblokken gegenereerd met de uitvoer, waardoor tijd en moeite worden bespaard voor het ontwerpproces.
- Terraform-importblokken worden systeemeigen ondersteund in Terraform, waardoor ze eenvoudig te gebruiken zijn. Gecombineerd, geloven we dat het gebruik van beide een enorm voordeel voor u biedt.
Voordelen:
- Systeemeigen Terraform ondersteunde werkstroom. Er is geen JSON nodig.
- Omdat u een bestand bewerkt, kunt u een editor gebruiken om te zoeken en te vervangen wat u moet verwijderen of bewerken.
- Kan de naam van resources wijzigen zodat deze overeenkomen met uw naamgevingsstandaarden.
- Verwerkt grote hoeveelheden resources goed.
Nadelen:
- Voor eenvoudige scenario's kan deze techniek overkill zijn.
- Vereist handmatige wijzigingen om te filteren.
- Werkt niet met oudere versies van Terraform.
Samenvatting
In dit artikel hebt u geleerd over de verschillende opties voor het filteren van resources bij het exporteren met Azure Export voor Terraform.