Delen via


Overzicht van de Terraform AzAPI-provider

De AzAPI-provider is een dunne laag boven op de Azure ARM REST API's. Hiermee kunt u elk Azure-resourcetype beheren met behulp van een API-versie, zodat u de nieuwste functionaliteit binnen Azure kunt gebruiken. AzAPI is een eersteklas provider die is ontworpen om zelfstandig of in combinatie met de AzureRM-provider te worden gebruikt.

Resources

Om u in staat te stellen alle Azure-resources en -functies te beheren zonder dat er updates nodig zijn, bevat de AzAPI-provider de volgende algemene resources:

Resourcenaam Beschrijving
azapi_resource Wordt gebruikt voor het volledig beheren van elke Azure-resource (besturingsvlak) (API) met volledige CRUD.
   Voorbeeldgebruiksvoorbeelden:
      Nieuwe preview-service
      Nieuwe functie toegevoegd aan bestaande service
      Bestaande functie/service die momenteel niet wordt gedekt
azapi_update_resource Wordt gebruikt voor het beheren van resources of delen van resources die geen volledige CRUD hebben
   Voorbeeldgebruiksvoorbeelden:
      Nieuwe eigenschappen voor een bestaande service bijwerken
      Vooraf gemaakte onderliggende resource bijwerken, zoals DNS SOA-record.
azapi_resource_action Wordt gebruikt om één bewerking uit te voeren op een resource zonder de levenscyclus ervan te beheren
   Voorbeeldgebruiksvoorbeelden:
      Een virtuele machine afsluiten
      Een geheim toevoegen aan een Sleutelkluis
azapi_data_plane_resource Wordt gebruikt voor het beheren van een specifieke subset van Azure-gegevensvlak-resources
   Voorbeeldgebruiksvoorbeelden:
      KeyVault-certificaatcontactpersonen
      Synapse-werkruimtebibliotheken

Gebruikshiërarchie

Over het algemeen moet het gebruik de volgende stappen volgen:

  1. Het wordt altijd aanbevolen om te beginnen met het uitvoeren van zoveel mogelijk bewerkingen binnen azapi_resource.
  2. Als het resourcetype niet bestaat azapi_resource binnen, maar wel onder een van de typen valt die worden ondersteund door azapi_data_plane_resource, gebruikt u dat in plaats daarvan.
  3. Als de resource al bestaat in AzureRM of een eigenschap heeft die niet kan worden geopend azapi_resource, gebruikt azapi_update_resource u deze specifieke eigenschappen. Resources die azapi_resource niet kunnen worden bijgewerkt via deze resource of azapi_data_plane_resource die niet worden ondersteund.
  4. Als u een actie probeert uit te voeren die niet is gebaseerd op een azure CRUD-vriendelijke resource, is dit azapi_resource_action minder eenvoudig dan azapi_update_resource maar flexibeler.

Voorbeelden van resourceconfiguratie

Met het volgende codefragment wordt een resource geconfigureerd die momenteel niet bestaat in de AzureRM-provider:

resource "azapi_resource" "publicip" {
  type      = "Microsoft.Network/Customipprefixes@2021-03-01"
  name      = "exfullrange"
  parent_id = azurerm_resource_group.example.id
  location  = "westus2"

  body = {
    properties = {
      cidr          = "10.0.0.0/24"
      signedMessage = "Sample Message for WAN"
    }
  }
}

Met het volgende codefragment wordt een preview-eigenschap geconfigureerd voor een bestaande resource vanuit AzureRM:

resource "azapi_update_resource" "test" {
  type        = "Microsoft.ContainerRegistry/registries@2020-11-01-preview"
  resource_id = azurerm_container_registry.acr.id

  body = jsonencode{
    properties = {
      anonymousPullEnabled = var.bool_anonymous_pull
    }
  }
}

Met het volgende codefragment wordt een resourceactie geconfigureerd voor een bestaande AzureRM-resource:

resource "azapi_resource_action" "vm_shutdown" {
  type = "Microsoft.Compute/virtualMachines@2023-07-01"
  resource_id = azurerm_linux_virtual_machine.example.id
  action = "powerOff”
}

Met het volgende codefragment wordt een resource geconfigureerd die momenteel niet bestaat in de AzureRM-provider omdat dit is ingericht op het gegevensvlak:

resource "azapi_data_plane_resource" "dataset" {
  type      = "Microsoft.Synapse/workspaces/datasets@2020-12-01"
  parent_id = trimprefix(data.azurerm_synapse_workspace.example.connectivity_endpoints.dev, "https://")
  name      = "example-dataset"
  body = {
    properties = {
      type = "AzureBlob",
      typeProperties = {
        folderPath = {
          value = "@dataset().MyFolderPath"
          type  = "Expression"
        }
        fileName = {
          value = "@dataset().MyFileName"
          type  = "Expression"
        }
        format = {
          type = "TextFormat"
        }
      }
      parameters = {
        MyFolderPath = {
          type = "String"
        }
        MyFileName = {
          type = "String"
        }
      }
    }
  }
}

Verificatie met behulp van de AzAPI-provider

De AzAPI-provider maakt dezelfde verificatiemethoden mogelijk als de AzureRM-provider. Zie Terraform verifiëren bij Azure voor meer informatie over verificatieopties.

Voordelen van het gebruik van de AzAPI-provider

De AzAPI-provider biedt de volgende voordelen:

  • Ondersteunt alle Azure-besturingsvlakservices:
    • Preview-services en -functies
    • Alle API-versies
  • Volledige kwaliteit van Terraform-statusbestand
    • Eigenschappen en waarden worden opgeslagen in status
  • Geen afhankelijkheid van Swagger
  • Algemene en consistente Azure-verificatie
  • Robuuste VS Code-extensie

Ervaring en levenscyclus van de AzAPI-provider

In deze sectie worden enkele hulpprogramma's beschreven waarmee u de AzAPI-provider kunt gebruiken.

VS Code-extensie en taalserver

De AzAPI VS Code-extensie biedt een uitgebreide ontwerpervaring met de volgende voordelen:

  • Geef alle beschikbare resourcetypen en API-versies weer. Alle beschikbare resourcetypen weergeven
  • Automatisch aanvullen van de toegestane eigenschappen en waarden voor elke resource. Toegestane eigenschappen weergeven
  • Hints weergeven bij het aanwijzen van een eigenschap. Hint weergeven bij het aanwijzen van een eigenschap
  • Syntaxisvalidatie Syntaxisvalidatie
  • Automatisch aanvullen met codevoorbeelden. Automatisch aanvullen met codevoorbeelden

AzAPI2AzureRM-migratiehulpprogramma

De AzureRM-provider biedt de meest geïntegreerde Terraform-ervaring voor het beheren van Azure-resources. Daarom is het aanbevolen gebruik van de AzAPI- en AzureRM-providers als volgt:

  1. Gebruik de AzAPI-provider terwijl de service of functie in preview is.
  2. zodra de service officieel is uitgebracht, gebruikt u de AzureRM-provider.

Het hulpprogramma AzAPI2AzureRM is ontworpen om te migreren van de AzAPI-provider naar de AzureRM-provider.

AzAPI2AzureRM is een opensource-hulpprogramma waarmee het proces van het converteren van AzAPI-resources naar AzureRM-resources wordt geautomatiseerd.

AzAPI2AzureRM heeft twee modi: plannen en migreren:

  • In het plan worden de AzAPI-resources weergegeven die kunnen worden gemigreerd.
  • Migreren migreert de AzAPI-resources naar AzureRM-resources in zowel de HCL-bestanden als de status.

AzAPI2AzureRM zorgt er na de migratie voor dat uw Terraform-configuratie en -status zijn afgestemd op uw werkelijke status. U kunt de update naar de status valideren door uit te voeren terraform plan nadat de migratie is voltooid om te zien dat er niets is gewijzigd.

De AzAPI-provider gebruiken

  1. VS Code-extensie installeren

  2. Voeg de AzAPI-provider toe aan uw Terraform-configuratie.

    terraform {
      required_providers {
        azapi = {
          source  = "Azure/azapi"
        }
      }
    }
    
    provider "azapi" {
      # More information on the authentication methods supported by
      # the AzureRM Provider can be found here:
      # https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs
    
      # subscription_id = "..."
      # client_id       = "..."
      # client_secret   = "..."
      # tenant_id       = "..."
    }
    
  3. Declareer een of meer AzAPI-resources, zoals wordt weergegeven in de volgende voorbeeldcode:

    resource "azapi_resource" "example" {
      name = "example"
      parent_id = data.azurerm_machine_learning_workspace.existing.id
      type = "Microsoft.MachineLearningServices/workspaces/computes@2021-07-01"
    
      location = "eastus"
      body = jsonencode({
        properties = {
          computeType      = "ComputeInstance"
          disableLocalAuth = true
          properties = {
            vmSize = "STANDARD_NC6"
          }
        }
      })
    }
    
    

Volgende stappen