Partager via


Présentation du fournisseur AzAPI de Terraform

Le fournisseur AzAPI est une couche fine au-dessus des API REST Azure ARM. Il vous permet de gérer n'importe quel type de ressource Azure en utilisant n'importe quelle version d'API, ce qui vous permet d'utiliser les dernières fonctionnalités d'Azure. AzAPI est un fournisseur de premier ordre conçu pour être utilisé seul ou en tandem avec le fournisseur AzureRM.

Ressources

Pour vous permettre de gérer toutes les ressources et fonctionnalités Azure sans nécessiter de mises à jour, le fournisseur AzAPI inclut les ressources génériques suivantes :

Nom de la ressource Description
azapi_resource Utilisée pour gérer entièrement toute ressource Azure (plan de contrôle) (API) avec un CRUD complet.
   Exemples de cas d'utilisation :
      Nouveau service en avant-première
      Nouvelle fonctionnalité ajoutée à un service existant
      Fonctionnalité / service existant non couvert actuellement.
azapi_update_resource Utilisé pour gérer des ressources ou des parties de ressources qui n'ont pas de CRUD complet
   Exemples de cas d'utilisation :
      Mise à jour de nouvelles propriétés d'un service existant
      Mise à jour d'une ressource enfant pré-créée - telle qu'un enregistrement DNS SOA.
azapi_resource_action Permet d'effectuer une seule opération sur une ressource sans en gérer le cycle de vie.
   Exemples de cas d'utilisation :
      Arrêter une machine virtuelle
      Ajouter un secret à un Key Vault
azapi_data_plane_resource Utilisé pour gérer un sous-ensemble spécifique de ressources de plan de données Azure.
   Exemples de cas d'utilisation :
      Contacts de certificats KeyVault
      Bibliothèques de l'espace de travail Synapse

Hiérarchie d'utilisation

Dans l'ensemble, l'utilisation doit suivre les étapes suivantes :

  1. Il est toujours recommandé de commencer par effectuer autant d'opérations que possible dans azapi_resource
  2. Si le type de ressource n'existe pas dans azapi_resource mais fait partie d'un des types pris en charge par azapi_data_plane_resource, utilisez-le à la place.
  3. Si la ressource existe déjà dans AzureRM ou si elle possède une propriété qui n'est pas accessible dans azapi_resource, utilisez azapi_update_resource pour accéder à ces propriétés spécifiques. Les ressources que azapi_resource ou azapi_data_plane_resource ne prennent pas en charge ne peuvent pas être mises à jour par le biais de cette ressource.
  4. Si vous essayez d'effectuer une action qui n'est pas basée sur une ressource Azure CRUD-friendly, azapi_resource_action est moins simple que azapi_update_resource mais plus flexible.

Exemples de configuration de ressource

L'extrait de code suivant configure une ressource qui n'existe pas actuellement dans le fournisseur AzureRM :

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"
    }
  }
}

L'extrait de code suivant configure une propriété de prévisualisation pour une ressource existante d'AzureRM :

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

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

L'extrait de code suivant configure une action de ressource sur une ressource AzureRM existante :

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

L'extrait de code suivant configure une ressource qui n'existe pas actuellement dans le fournisseur AzureRM en raison de son provisionnement sur le plan de données :

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"
        }
      }
    }
  }
}

Authentification à l'aide du fournisseur AzAPI

Le fournisseur AzAPI permet les mêmes méthodes d'authentification que le fournisseur AzureRM. Pour plus d'informations sur les options d'authentification, voir Authentifier Terraform auprès d'Azure.

Avantages de l'utilisation du fournisseur AzAPI

Le fournisseur AzAPI présente les fonctionnalités suivantes :

  • Prise en charge de tous les services de plan de contrôle Azure :
    • Services et fonctionnalités d'évaluation.
    • Toutes les versions d’API
  • Fidélité totale du fichier d'état Terraform
    • Les propriétés et les valeurs sont enregistrées dans l’état
  • Aucune dépendance envers Swagger
  • Authentification Azure commune et cohérente
  • Extension robuste du code VS

Expérience et cycle de vie du fournisseur AzAPI

Cette section décrit certains outils qui vous aideront à utiliser le fournisseur AzAPI.

Extension VS Code et Language Server

L'extension VS Code de l'AzAPI fournit une expérience de création riche avec les avantages suivants :

  • Liste de tous les types de ressources disponibles et des versions de l'API. Liste de tous les types de ressources disponibles
  • Auto-complétion des propriétés et valeurs autorisées pour toute ressource. Liste des propriétés autorisées
  • Affichage de conseils au survol d'une propriété. Afficher des conseils lors du survol d'une propriété.
  • Validation de la syntaxe Validation de la syntaxe
  • Auto-complétion avec des exemples de code. Auto-complétion avec des exemples de code

Outil de migration AzAPI2AzureRM

Le fournisseur AzureRM offre l'expérience Terraform la plus intégrée pour la gestion des ressources Azure. Par conséquent, l'utilisation recommandée des fournisseurs AzAPI et AzureRM est la suivante :

  1. Pendant que le service ou la fonctionnalité est en cours d'évaluation, utilisez le fournisseur AzAPI.
  2. Une fois le service officiellement lancé, utilisez le fournisseur AzureRM.

L'outil AzAPI2AzureRM est conçu pour faciliter la migration du fournisseur AzAPI vers le fournisseur AzureRM.

AzAPI2AzureRM est un outil open source qui automatise le processus de conversion des ressources AzAPI en ressources AzureRM.

AzAPI2AzureRM a deux modes : planifier et migrer :

  • Plan affiche les ressources AzAPI qui peuvent être migrées.
  • Migrate migre les ressources AzAPI vers des ressources AzureRM à la fois dans les fichiers HCL et dans l'état.

AzAPI2AzureRM garantit qu'après la migration, votre configuration Terraform et votre état sont alignés sur votre état réel. Vous pouvez valider la mise à jour de l'état en exécutant terraform plan après avoir terminé la migration pour vérifier que rien n'a changé.

Utilisation du fournisseur AzAPI

  1. Installez l'extension VS Code

  2. Ajoutez le fournisseur AzAPI à votre configuration Terraform.

    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. Déclarez une ou plusieurs ressources AzAPI comme indiqué dans l'exemple de code suivant :

    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 = {
        properties = {
          computeType      = "ComputeInstance"
          disableLocalAuth = true
          properties = {
            vmSize = "STANDARD_NC6"
          }
        }
      }
    }
    
    

Étapes suivantes