Tous les produits
Search
Centre de documentation

Terraform:Managing existing resources

Dernière mise à jour :Aug 11, 2026

Découvrez comment importer des ressources cloud existantes dans Terraform à l'aide de la commande import, du bloc import ou de l'outil Terraformer.

Contexte

Terraform automatise la gestion des ressources cloud grâce à l'Infrastructure as Code (IaC). Bien que vous puissiez créer directement de nouvelles ressources avec du code Terraform, les ressources préexistantes ou celles créées en dehors de Terraform doivent être importées. Ce processus génère le code de ressource et un fichier d'état, permettant ainsi une gestion continue via Terraform.

L'importation de ressources permet de placer les ressources cloud existantes sous la gouvernance de Terraform.

image

Scénarios d'utilisation

L'importation de ressources s'applique aux scénarios courants suivants :

  1. Gérer les ressources existantes : Transférez vers Terraform la gestion des ressources précédemment administrées par d'autres outils, tels que la console, l'API ou l'interface de ligne de commande (CLI).

  2. Résoudre la dérive des ressources : Lorsqu'une ressource gérée par Terraform est modifiée en dehors de celui-ci, son état diverge de la configuration. Réimportez la ressource pour synchroniser l'état.

  3. Refactoriser le code : Divisez un fichier de configuration monolithique en plusieurs fichiers plus petits afin de réduire la complexité de gestion à mesure que le nombre de ressources augmente.

  4. Déployer rapidement des ressources : Répliquez et déployez une architecture de ressources existante dans une autre région ou un autre compte.

  5. Récupérer rapidement des ressources : Sauvegardez régulièrement votre architecture de ressources. En cas de problème de stabilité, utilisez le code de sauvegarde pour restaurer rapidement l'architecture.

Procédure

Trois méthodes permettent d'importer des ressources :

  1. La commande import : Importe une seule ressource à l'aide de la commande native Terraform terraform import.

  2. Le bloc import : Importe une ou plusieurs ressources en écrivant un bloc import Terraform, puis en exécutant terraform plan et terraform apply.

  3. L'outil Terraformer : Importe des ressources par lots en exécutant des commandes avec l'outil open source Terraformer pour les filtrer et les interroger.

Choisissez la méthode la mieux adaptée à votre scénario.

Méthode d'importation

Avantages

Inconvénients

Scénarios

La commande import

  • Simple et directe. Exécute une commande native Terraform.

  • Génère automatiquement un fichier d'état.

  • Nécessite de récupérer manuellement l'ID de la ressource, ce qui peut entraîner des erreurs.

  • Peu efficace pour plusieurs ressources, car elle ne prend en charge l'importation que d'une ressource à la fois.

  • Impose d'écrire manuellement le code de la ressource.

Gérer les ressources existantes

Résoudre la dérive des ressources

Refactoriser le code

Le bloc import

  • Facile à utiliser. Exécute des commandes natives Terraform.

  • Prend en charge l'importation par lot de plusieurs ressources.

  • Permet d'écrire du code pour une logique d'importation complexe.

  • Nécessite l'écriture de code d'importation, ce qui implique une courbe d'apprentissage.

  • Ne peut pas générer les dépendances entre plusieurs ressources.

  • Peut engendrer un coût de configuration élevé pour les imports par lot.

Gérer les ressources existantes

Résoudre la dérive des ressources

Refactoriser le code

Déployer rapidement des ressources

Terraformer

  • Filtre et sélectionne automatiquement la collection de ressources à importer.

  • Génère automatiquement le code de ressource Terraform.

  • Génère automatiquement les dépendances entre les ressources.

  • Nécessite le téléchargement et l'installation de Terraformer.

  • Il ne s'agit pas d'une commande native Terraform et cela implique un coût d'apprentissage et de configuration.

Gérer les ressources existantes

Résoudre la dérive des ressources

Refactoriser le code

Déployer rapidement des ressources

Récupérer rapidement des ressources

La commande import de Terraform

La commande <a class="ne-link" data-href="https://developer.hashicorp.com/terraform/cli/commands/import" href="https://developer.hashicorp.com/terraform/cli/commands/import" id="653ac62fdfgjr" target="_blank">terraform import</a> importe des ressources en spécifiant une adresse de ressource et un ID de ressource, et accepte plusieurs paramètres de configuration.

Prérequis

  • Préparez un environnement d'exécution Terraform à l'aide de l'une des méthodes suivantes :

    • Créer des ressources avec Terraform : Cloud Shell est préinstallé avec Terraform et les informations d'identification sont déjà configurées. Cette solution convient pour un accès rapide.

    • Installer et configurer Terraform : Cette approche est adaptée aux environnements réseau restreints ou aux configurations de développement personnalisées.

  • Accordez des autorisations en lecture seule pour les ressources concernées au compte actif.

Utilisation

Le format de la commande est terraform import [options] <address> <id>.

  • Adresse de ressource : Le format est <resource_type>.<resource_name>. Elle inclut le type et le nom de la ressource, et sert d'identifiant pour l'infrastructure dans le fichier d'état.

    • Par exemple, l'adresse de ressource pour le VPC dans l'extrait de configuration suivant est alicloud_vpc.default.

    resource "alicloud_vpc" "default" {
      vpc_name   = "tf-example"
      cidr_block = "10.0.0.0/8"
    }
  • ID de ressource : Un ID de ressource identifie de manière unique une ressource pour l'importation. Le format de l'ID varie selon le type de ressource ; consultez la documentation du fournisseur.

    • Par exemple, l'ID de ressource pour alicloud_security_group correspond à l'ID du groupe de sécurité. L'ID de ressource pour alicloud_security_group_rule suit un format spécifique.

    The following attributes are exported:
    
      • id - The resource ID in terraform of Security Group Rule.
    
    NOTE: if cidr_ip is set, the id formats as <security_group_id>:<type>:<ip_protocol>:<port_range>:<nic_type>:<cidr_ip>:<policy>:<priority> .
    
    NOTE: if ipv6_cidr_ip is set, the id formats as <security_group_id>:<type>:<ip_protocol>:<port_range>:<nic_type>:<ipv6_cidr_ip>:<policy>:<priority> .
    
    NOTE: if source_security_group_id is set, the id formats as <security_group_id>:<type>:<ip_protocol>:<port_range>:<nic_type>:<source_security_group_id>:<policy>:<priority> .
    
    NOTE: if prefix_list_id is set, the id formats as <security_group_id>:<type>:<ip_protocol>:<port_range>:<nic_type>:<prefix_list_id>:<policy>:<priority> .
  • Options de configuration : La commande import de Terraform accepte des options supplémentaires documentées dans les instructions d'utilisation officielles.

Exemple

L'exemple suivant importe un bucket Object Storage Service (OSS) :

  1. Créez un répertoire de travail. Dans ce répertoire, créez un fichier de configuration nommé main.tf et définissez l'adresse de la ressource à importer.

    resource "alicloud_oss_bucket" "default"{ }
  2. L'ID d'une ressource alicloud_oss_bucket correspond au nom du bucket.

  3. Initialisez l'environnement d'exécution.

    terraform init
  4. Exécutez la commande d'importation.

    # Replace this with your bucket name
    terraform import alicloud_oss_bucket.default oss-bucket-import

    La sortie suivante indique que l'importation a réussi :

    alicloud_oss_bucket.default: Importing from ID "oss-bucket-import"...
    alicloud_oss_bucket.default: Import prepared!
      Prepared alicloud_oss_bucket for import
    alicloud_oss_bucket.default: Refreshing state... [id=oss-bucket-import]
    
    Import successful!
    
    The resources that were imported are shown above. These resources are now in
    your Terraform state and will henceforth be managed by Terraform.
    
  5. Après l'importation, les propriétés de la ressource ne sont pas ajoutées automatiquement à votre modèle. Exécutez terraform show pour afficher toutes les propriétés de la ressource importée :

    # alicloud_oss_bucket.default:
    resource "alicloud_oss_bucket" "default" {
        acl               = "private"
        bucket            = "oss-bucket-import"
        creation_date     = "2024-11-22"
        extranet_endpoint = "oss-cn-beijing.aliyuncs.com"
        id                = "oss-bucket-import"
        intranet_endpoint = "oss-cn-beijing-internal.aliyuncs.com"
        location          = "oss-cn-beijing"
        owner             = "1511928*****"
        redundancy_type   = "ZRS"
        resource_group_id = "rg-acf***"
        storage_class     = "Standard"
        tags              = {}
    
        access_monitor {
            status = "Disabled"
        }
    }

    Ajoutez ces informations à votre modèle et supprimez les propriétés en lecture seule comme décrit dans alicloud_oss_bucket. Vous pouvez ainsi utiliser Terraform pour gérer vos ressources.

Le bloc import de Terraform

Terraform v1.5.0 et les versions ultérieures prennent en charge l'importation de ressources à l'aide d'un bloc import. Rédigez un bloc import dans votre fichier de configuration pour spécifier l'ID et l'adresse de la ressource, puis exécutez les commandes terraform plan et terraform apply pour prévisualiser et exécuter l'importation.

Pour plus d'informations, consultez la documentation officielle.

Prérequis

  • Préparez un environnement d'exécution Terraform en utilisant l'une des méthodes suivantes :

    Remarque

    Nécessite Terraform v1.5.0 ou une version ultérieure.

  • Accordez des autorisations en lecture seule pour les ressources concernées au compte actif.

Utilisation

La syntaxe est la suivante :

import {
  to = alicloud_oss_bucket.example
  id = "oss-bucket-import"
}

# Optional
# resource "alicloud_oss_bucket" "example" {
#   # (other resource arguments...)
# }

Le bloc import offre deux avantages par rapport à la commande import :

  1. Génération automatique de la configuration. Importez vers une adresse de ressource existante ou utilisez -generate-config-out pour générer automatiquement le fichier de configuration.

  2. Importations par lot. Utilisez for_each dans un bloc import pour importer plusieurs ressources. Les ressources ayant des attributs similaires peuvent partager une adresse de ressource, différenciées par un index.

Remarque

Ces deux fonctionnalités ne peuvent pas être combinées. L'interface CLI de Terraform ne prend pas en charge la génération automatique de configurations pour les ressources qui utilisent for_each.

oss terraform plan -out=tf.tfplan -generate-config-out=generate.tf

Error: Cannot generate configuration

  on main.tf line 10, in import:
  10:   to = alicloud_oss_bucket.this[each.key]

The given import block is not compatible with config generation. The -generate-config-out option cannot be
used with import blocks which use for_each, or resources which use for_each or count.

Exemple

L'exemple suivant importe un bucket OSS à l'aide d'un bloc import :

  1. Créez un répertoire de travail contenant un fichier main.tf. Rédigez un bloc import pour spécifier l'ID et l'adresse de la ressource.

    import {
      to = alicloud_oss_bucket.default
      id = "oss-bucket-import"
    }
  2. Initialisez l'environnement d'exécution.

    terraform init
  3. Exécutez terraform plan pour prévisualiser l'importation. Utilisez -generate-config-out pour générer automatiquement le modèle.

    terraform plan -generate-config-out=generated.tf

    Les informations suivantes s'affichent :

    alicloud_oss_bucket.default: Preparing import... [id=oss-bucket-import]
    alicloud_oss_bucket.default: Refreshing state... [id=oss-bucket-import]
    
    Terraform will perform the following actions:
    
      # alicloud_oss_bucket.default will be imported
      # (config will be generated)
        resource "alicloud_oss_bucket" "default" {
            acl               = "private"
            bucket            = "oss-bucket-import"
            creation_date     = "2024-11-22"
            extranet_endpoint = "oss-cn-beijing.aliyuncs.com"
            id                = "oss-bucket-import"
            intranet_endpoint = "oss-cn-beijing-internal.aliyuncs.com"
            location          = "oss-cn-beijing"
            owner             = "15119****"
            redundancy_type   = "ZRS"
            resource_group_id = "rg-acfmzaq*****"
            storage_class     = "Standard"
            tags              = {}
    
            access_monitor {
                status = "Disabled"
            }
        }
    
    Plan: 1 to import, 0 to add, 0 to change, 0 to destroy.
    ╷
    │ Warning: Config generation is experimental
    │ 
    │ Generating configuration during import is currently experimental, and the generated configuration
    │ format may change in future versions.
    ╵
    
    ─────────────────────────────────────────────────────────────────────────────────────────────────────
    
    Terraform has generated configuration and written it to generated.tf. Please review the configuration
    and edit it as necessary before adding it to version control.
    
    Note: You didn't use the -out option to save this plan, so Terraform can't guarantee to take exactly
    these actions if you run "terraform apply" now.
  4. Après avoir confirmé le plan, exécutez terraform apply pour effectuer l'importation.

    terraform apply 

    Saisissez yes lorsque vous y êtes invité. La sortie suivante indique que l'importation a réussi :

    ......
    
    Do you want to perform these actions?
      Terraform will perform the actions described above.
      Only 'yes' will be accepted to approve.
    
      Enter a value: yes
    
    alicloud_oss_bucket.default: Importing... [id=oss-bucket-import]
    alicloud_oss_bucket.default: Import complete [id=oss-bucket-import]
    
    Apply complete! Resources: 1 imported, 0 added, 0 changed, 0 destroyed.

L'outil Terraformer

L'outil open source Terraformer permet d'importer par lot les ressources de votre compte dans des modèles Terraform. Il prend en charge un sous-ensemble de ressources pour chaque fournisseur cloud ; les ressources supplémentaires nécessitent le développement d'un fournisseur personnalisé.

Deux versions de Terraformer sont disponibles :

  1. Terraformer open source : la version originale, qui prend en charge l'importation de ressources depuis plusieurs fournisseurs cloud.

  2. Alibaba Cloud Terraformer : une version améliorée qui prend en charge exclusivement les ressources Alibaba Cloud.

Fonctionnalité

Terraformer open source

Alibaba Cloud Terraformer

Afficher la liste des produits pris en charge pour l'importation

Afficher la liste des types de ressources pris en charge pour l'importation

Filtrer par région

Filtrer en excluant les régions spécifiées

Filtrer par zone

Filtrer en excluant les zones spécifiées

Filtrer par produit

Filtrer en excluant les produits spécifiés

Filtrer par type de ressource

Filtrer en excluant les types de ressources spécifiés

Filtrer par une liste d'ID de ressource

Filtrer en excluant une liste spécifiée d'ID de ressource

Filtrer par nom de ressource

Filtrer par groupe de ressources

Filtrer par tag

Créer automatiquement les dépendances de ressources

Générer automatiquement des variables

Générer automatiquement des outputs

Terraformer open source

Prérequis
  1. Téléchargez et installez Terraformer

    Terraformer est disponible sous forme de package tous-fournisseurs ou de packages par fournisseur. Les exemples suivants montrent l'installation sur Linux et macOS. D'autres options sont disponibles dans le guide Installation.

    • Utilisateurs Linux

    export PROVIDER=all
    curl -LO "https://github.com/GoogleCloudPlatform/terraformer/releases/download/$(curl -s https://api.github.com/repos/GoogleCloudPlatform/terraformer/releases/latest | grep tag_name | cut -d '"' -f 4)/terraformer-${PROVIDER}-linux-amd64"
    chmod +x terraformer-${PROVIDER}-linux-amd64
    sudo mv terraformer-${PROVIDER}-linux-amd64 /usr/local/bin/terraformer
    • Utilisateurs macOS

    export PROVIDER=all
    curl -LO "https://github.com/GoogleCloudPlatform/terraformer/releases/download/$(curl -s https://api.github.com/repos/GoogleCloudPlatform/terraformer/releases/latest | grep tag_name | cut -d '"' -f 4)/terraformer-${PROVIDER}-darwin-amd64"
    chmod +x terraformer-${PROVIDER}-darwin-amd64
    sudo mv terraformer-${PROVIDER}-darwin-amd64 /usr/local/bin/terraformer
  2. Dépendances

    1. Accordez au compte actuel des permissions en lecture seule pour les ressources concernées.

    2. Installez Terraform

      Remarque

      Vous pouvez ignorer cette étape si vous exécutez la commande dans Cloud Shell.

      Pour plus d'informations, consultez la rubrique Installer et configurer Terraform.

    3. Téléchargez le fournisseur approprié. Vous pouvez configurer le fournisseur de l'une des deux manières suivantes :

      • Initialisez le fournisseur dans le répertoire à partir duquel vous exécutez la commande Terraformer.

      • Téléchargez le fournisseur dans le chemin ~/.terraform.d/plugins/.

    4. Configurez les identifiants d'accès. Terraformer prend actuellement en charge l'authentification uniquement par la lecture d'un profil local. Par défaut, le premier identifiant du profil est utilisé pour l'importation. Pour plus d'informations sur la configuration des identifiants d'accès Alibaba Cloud, consultez la rubrique Configurer et gérer les identifiants.

Utilisation

L'exemple suivant utilise terraformer-all-darwin-amd64 v0.8.24.

Terraformer prend en charge quatre commandes : help, import, plan, and version.

  1. help : affiche les détails d'une commande.

    ➜  ~ terraformer-all-darwin-arm64 help
    Usage:
        [command]
    
    Available Commands:
      help        Help about any command
      import      Import current state to Terraform configuration
      plan        Plan to import current state to Terraform configuration
      version     Print the version number of Terraformer
    
    Flags:
      -h, --help    help for this command
    
    Use " [command] --help" for more information about a command.
  2. version : affiche le numéro de version actuel.

    ~ terraformer-all-darwin-arm64 version
    Terraformer v0.8.24
  3. import : importe les ressources pour un fournisseur spécifié.

    ➜  ~ terraformer-all-darwin-arm64 import
    Import current state to Terraform configuration
    
    Usage:
      import [command]
    
    Available Commands:
      alicloud        Import current State to terraform configuration from alicloud
      auth0           Import current state to Terraform configuration from Auth0
      aws             Import current state to Terraform configuration from AWS
      azure           Import current state to Terraform configuration from Azure
      azuread         Import current state to Terraform configuration from Azure Active Directory
      azuredevops     Import current state to Terraform configuration from Azure DevOps
      cloudflare      Import current state to Terraform configuration from Cloudflare
      commercetools   Import current state to Terraform configuration from Commercetools
      datadog         Import current state to Terraform configuration from Datadog
      digitalocean    Import current state to Terraform configuration from DigitalOcean
      fastly          Import current state to Terraform configuration from Fastly
      github          Import current state to Terraform configuration from GitHub
      gitlab          Import current state to Terraform configuration from GitLab
      gmailfilter     Import current state to Terraform configuration from Gmail
      google          Import current state to Terraform configuration from Google Cloud
      grafana         Import current state to Terraform configuration from Grafana
      heroku          Import current state to Terraform configuration from Heroku
      honeycombio     Import current state to Terraform configuration from Honeycomb.io
      ibm             Import current state to Terraform configuration from ibm
      ionoscloud      Import current state to Terraform configuration from IONOS Cloud
      keycloak        Import current state to Terraform configuration from Keycloak
      kubernetes      Import current state to Terraform configuration from Kubernetes
      launchdarkly    Import current state to Terraform configuration from LaunchDarkly
      linode          Import current state to Terraform configuration from Linode
      logzio          Import current state to Terraform configuration from Logz.io
      mackerel        Import current state to Terraform configuration from Mackerel
      metal           Import current state to Terraform configuration from Equinix Metal
      mikrotik        Import current state to Terraform configuration from RouterOS
      myrasec         Import current state to Terraform configuration from Myra Security
      newrelic        Import current state to Terraform configuration from New Relic
      ns1             Import current state to Terraform configuration from NS1
      octopusdeploy   Import current state to Terraform configuration from Octopus Deploy
      okta            Import current State to terraform configuration from okta
      opal            Import current state to Terraform configuration from opal.dev
      openstack       Import current state to Terraform configuration from OpenStack
      opsgenie        Import current state to Terraform configuration from Opsgenie
      pagerduty       Import current state to Terraform configuration from PagerDuty
      panos           Import current state to Terraform configuration from a PAN-OS
      plan            Import planned state to Terraform configuration
      rabbitmq        Import current state to Terraform configuration from RabbitMQ
      tencentcloud    Import current state to Terraform configuration from Tencent Cloud
      vault           Import current state to Terraform configuration from Vault
      vultr           Import current state to Terraform configuration from Vultr
      xenorchestra    Import current state to Terraform configuration from Xen Orchestra
      yandex          Import current state to Terraform configuration from Yandex Cloud
    
    Flags:
      -h, --help   help for import
    
    Additional help topics:
      import no-sort        Don't sort resources
    
    Use " import [command] --help" for more information about a command.
  4. plan : prévisualise les ressources à importer pour un fournisseur spécifié.

Exemple

L'exemple suivant importe tous les VPC Alibaba Cloud de la région Chine (Hangzhou).

  1. Créez un répertoire pour stocker les modèles et les fichiers d'état importés.

    mkdir example && cd example
  2. Exécutez la commande suivante :

    terraformer-all-darwin-arm64 import alicloud --resources=vpc --regions=cn-hangzhou --path-pattern={output} --path-output=./     
    • --resources : spécifie la collection de ressources à importer.

    • --regions : indique la région où se trouvent les ressources.

    • --path-pattern : définit le modèle de structure de répertoire généré.

    • --path-output : précise le chemin de sortie des fichiers générés.

  3. Les fichiers de modèle générés sont présentés ci-dessous. Par défaut, les informations de région sont ajoutées au chemin du répertoire. Pour regrouper tous les modèles de ressources dans un seul fichier, utilisez le paramètre --compact, qui exporte toutes les ressources vers resources.tf.

    └── cn-hangzhou
        ├── outputs.tf
        ├── provider.tf
        ├── terraform.tfstate
        ├── variables.tf
        ├── vpc.tf
        └── vswitch.tf
    
    2 directories, 6 files
  4. Pour Terraform >=0.13.0, exécutez la commande suivante afin de mettre à jour le fichier d'état pour assurer la compatibilité des versions.

    terraform state replace-provider -auto-approve "registry.terraform.io/-/alicloud" "aliyun/alicloud"

Alibaba Cloud Terraformer - aliterraformer (recommandé)

aliterraformer étend l'outil open source Terraformer en offrant une couverture plus large des ressources, une configuration améliorée des identifiants et des dimensions de filtrage supplémentaires lors de l'importation.

Prérequis
  1. Téléchargez et installez

    Téléchargez aliterraformer depuis OSS Alibaba Cloud :

    macOS

    # amd64
    wget https://terraform-share.oss-cn-hangzhou.aliyuncs.com/aliterraformer/aliterraformer_darwin_amd64.zip
    
    # arm64
    wget https://terraform-share.oss-cn-hangzhou.aliyuncs.com/aliterraformer/aliterraformer_darwin_arm64.zip

    Linux

    # amd64
    wget https://terraform-share.oss-cn-hangzhou.aliyuncs.com/aliterraformer/aliterraformer_linux_amd64.zip
    
    # arm
    wget https://terraform-share.oss-cn-hangzhou.aliyuncs.com/aliterraformer/aliterraformer_linux_arm.zip
    
    # arm64
    wget https://terraform-share.oss-cn-hangzhou.aliyuncs.com/aliterraformer/aliterraformer_linux_arm64.zip

    Windows

    # amd64
    wget https://terraform-share.oss-cn-hangzhou.aliyuncs.com/aliterraformer/aliterraformer_windows_amd64.zip
    
    # 386
    wget https://terraform-share.oss-cn-hangzhou.aliyuncs.com/aliterraformer/aliterraformer_windows_386.zip

    Par exemple, sous macOS, décompressez le fichier après le téléchargement :

    unzip aliterraformer_darwin_amd64.zip
    chmod +x aliterraformer
    sudo mv aliterraformer /usr/local/bin/aliterraformer
  2. Dépendances

    Comme pour Terraformer open source, vous devez disposer des binaires terraform et terraform-provider-alicloud, ainsi que d'identifiants d'accès configurés.

    1. Accordez des permissions en lecture seule pour les ressources concernées au compte RAM (Resource Access Management).

    2. Installez Terraform

      Pour plus d'informations, consultez Installation et configuration de Terraform. Vous pouvez ignorer cette étape si vous exécutez la commande dans Cloud Shell.

    3. Téléchargez terraform-provider-alicloud

      Vous pouvez spécifier la version du fournisseur pour l'importation. La structure du répertoire de cache diffère entre les versions antérieures à la v0.13.0 et les versions v0.13.0 et ultérieures. Les chemins suivants s'appliquent aux versions v0.13.0 et supérieures :

      # 1. Set using the TF_DATA_TFER_DIR environment variable
      <$TF_DATA_TFER_DIR>/providers/registry.terraform.io/aliyun/alicloud/1.239.0/darwin_arm64/terraform-provider-alicloud_v1.239.0
      
      # 2. Set in the hidden directory of the current working directory
      .terraform/providers/registry.terraform.io/aliyun/alicloud/1.239.0/darwin_arm64/terraform-provider-alicloud_v1.239.0
      
      # 3. Set in the hidden directory of the user's root directory
      <HOME>/.terraform.d/plugins/registry.terraform.io/aliyun/alicloud/1.239.0/darwin_arm64/terraform-provider-alicloud_v1.239.0
    4. Configurez les identifiants d'accès

      Outre l'utilisation des profils, vous pouvez définir les identifiants d'accès dans aliterraformer à l'aide de variables d'environnement et de paramètres de commande :

      # 1. Using the ALICLOUD_ACCESS_KEY and ALICLOUD_SECRET_KEY environment variables
      $ export ALICLOUD_ACCESS_KEY=xxxx
      $ export ALICLOUD_SECRET_KEY=xxxxx
      
      # 2. By passing the --access-key and --secret-key command parameters
      $ aliterraformer import alicloud --access-key=xxxx --secret-key=xxx ...
      
      # 3. By setting and passing the AK through the profile mechanism
      $ aliterraformer import alicloud --profile=default ...
Utilisation

Aliterraformer prend en charge cinq commandes : help, version, products, resources, import. Les commandes products, resources constituent des ajouts par rapport à Terraformer open source.

  1. help : consultez les détails relatifs aux commandes prises en charge.

    aliterraformer help
    → ~ aliterraformer help
    Usage:
        [command]
    
    Available Commands:
      help        Help about any command
      import      Import current state to Terraform configuration
      products    List all supported products
      resources   List resources for a given product
      version     Print the version number of Terraformer
    
    Flags:
      -h, --help   help for this command
    
    Use " [command] --help" for more information about a command.
  2. version : consultez la version actuelle de Terraformer.

    aliterraformer version
  3. products : listez les produits pris en charge pour l'importation dans la version actuelle.

    aliterraformer products
    ➜  ~ aliterraformer products
    
    Supported products:
    
        ACK                         Container_Service_for_Kubernetes(ACK)
        ADB                         AnalyticDB_for_MySQL(ADB)
        ALB                         Application_Load_Balancer(ALB)
        ActionTrail                 Actiontrail
        AliKafka                    AliKafka
        Alidns                      Alidns
        Aligreen                    Aligreen
        Amqp                        RabbitMQ(AMQP)
        ApiGateway                  Api_Gateway
        AutoScaling                 Auto_Scaling
        BPStudio                    Cloud_Architect_Design_Tools(BPStudio)
        Bastionhost                 Bastion_Host
        CBWP                        EIP_Bandwidth_Plan(CBWP)
        CDN                         CDN
        CEN                         Cloud_Enterprise_Network(CEN)
        ClickHouse                  Click_House
        CloudMonitorService         Cloud_Monitor_Service
        CloudStorageGateway         Cloud_Storage_Gateway
        Cloudauth                   Cloudauth
        Config                      Cloud_Config(Config)
        DBFS                        Database_File_System(DBFS)
        DBS                         Database_Backup(DBS)
        DCDN                        DCDN
        DFS                         Apsara_File_Storage_for_HDFS(DFS)
        DMSEnterprise               DMS_Enterprise
        DTS                         Data_Transmission_Service(DTS)
  4. resources : listez les types de ressources importables pour un produit. Utilisez -p pour spécifier le produit.

    aliterraformer resources -p <productName>
    ~ aliterraformer resources -p VPC
    
    Supported resources in product [VPC]:
    
        route_table
        vpc
        vpc_dhcp_options_set
        vpc_flow_log
        vpc_ha_vip
        vpc_ipv4_cidr_block
        vpc_ipv4_gateway
        vpc_ipv6_egress_rule
        vpc_ipv6_gateway
        vpc_ipv6_internet_bandwidth
        vpc_network_acl_attachment
        vpc_prefix_list
        vpc_public_ip_address_pool
        vpc_public_ip_address_pool_cidr_block
        vpc_traffic_mirror_filter
        vpc_traffic_mirror_session
        vswitch
    ~ aliterraformer resources -p ACK
    
    Supported resources in product [ACK]:
    
        cs_edge_kubernetes
        cs_kubernetes
        cs_kubernetes_addon
        cs_kubernetes_node_pool
        cs_kubernetes_permissions
        cs_managed_kubernetes
        cs_serverless_kubernetes
  5. import : importez des ressources. Spécifiez alicloud pour Alibaba Cloud. Exécutez la commande suivante pour afficher les paramètres disponibles :

    aliterraformer import alicloud -h
    ➜  ~ aliterraformer import alicloud -h
    Import current State to terraform configuration from alicloud
    
    Usage:
        import alicloud [flags]
        import alicloud [command]
    
    Available Commands:
      list        List supported resources for alicloud provider
    
    Flags:
            --access-key string           Alibaba Cloud Access Key
      -b, --bucket string               gs://terraform-state
      -C, --compact
      -c, --connect                      (default true)
      -x, --excludes strings            vpc,subnet,nacl
            --excludes-products strings   ECS,VPC (Specify the products to be excluded.)
      -f, --filter strings              slb=id1:id2:id4
      -h, --help                        help for alicloud
            --modularize                  Whether output the terraform configuration to a module
      -O, --output string               output format hcl or json (default "hcl")
            --output-variables string     r1:attr1,attr2;r2:attr1,attr2,attr3
      -o, --path-output string           (default "generated")
      -p, --path-pattern string         {output}/{provider}/ (default "{output}/{provider}/{service}/")
            --products strings            ECS,VPC (You can input 'ALL' to import all products; Once specified, the flag <resources> will be ignored.)
            --profile string              prod (default "default")
            --provider-version string     Terraform Provider Alibaba Cloud Version
            --regions strings             cn-hangzhou
      -r, --resources strings           vpc,subnet,nacl (This flag will be ignored if the flag <products> is specified.)
      -n, --retry-number int            number of retries to perform when refresh fails (default 5)
      -m, --retry-sleep-ms int          time in ms to sleep between retries (default 300)
            --secret-key string           Alibaba Cloud Secret Key
            --security-token string       Alibaba Cloud Security Token
      -s, --state string                local or bucket (default "local")
            --statefile string            terraform.tfstate (default "terraform.tfstate")
            --terraform-version string    Terraform Version (default "0.12.29")
      -v, --verbose
            --zone string                 availability zone, like cn-hangzhou-h
    
    Use " import alicloud [command] --help" for more information about a command.

    Définissez la collection de ressources à importer, puis filtrez éventuellement les ressources et extrayez les propriétés sous forme de variables.

    • Construisez une collection de ressources :

      Quatre indicateurs définissent l'étendue de l'importation : <--products>, <--resources>, <--excludes-products> et <--excludes>. Combinez-les pour constituer une collection de ressources :

      • Importez des ressources spécifiques

        # Import a VPC, a vSwitch, and an ECS instance
        aliterraformer import alicloud -r=vpc,vswitch,instance
      • Importez des produits spécifiques

        # Import all resources under the ACK and ALB products
        aliterraformer import alicloud --products=ACK,ALB
      • Importez des produits et des ressources spécifiques

        # Import all resources under the ACK and ECS products, and all VPCs and vSwitches
        aliterraformer import alicloud --products=ACK,ECS -r=vpc,vswitch
      • Importez des produits spécifiques, mais excluez certaines ressources au sein de ces produits

        # Import all resources under ACK except alicloud_cs_kubernetes
        aliterraformer import alicloud --products=ACK --excludes=cs_kubernetes
      • Importez toutes les ressources de tous les produits

        # Entering ALL for products means all products
        aliterraformer import alicloud --products=ALL
      • Importez toutes les ressources de tous les produits, mais excluez des produits spécifiques

        # Import all products except VPNGateway and WAF
        aliterraformer import alicloud --products=ALL --excludes-products=VPNGateway,WAF
      • Importez toutes les ressources de tous les produits, mais excluez des produits et des ressources spécifiques

        # Import all products except VPNGateway and WAF, and exclude the alicloud_cs_kubernetes resource
        aliterraformer import alicloud --products=ALL --excludes-products=VPNGateway,WAF --excludes=cs_kubernetes
    • Filtrez les ressources

      Format : --filter=Type1.AttrKey=AttrValue1;AttrValue2,Type2.AttrKey=AttrValue1;AttrValue2. L'omission du type applique le filtre à toutes les ressources.

      • Importez un VPC avec l'ID vpc-123

        # To specify multiple values, separate them with semicolons: --filter="vpc.id=vpc-123;vpc-456"
        aliterraformer import alicloud -r=vpc --filter="vpc.id=vpc-123"
      • Importez un VPC et un vSwitch nommés tous deux tf-example

        aliterraformer import alicloud -r=vpc,vswitch --filter="vpc.vpc_name=tf-example,vswitch.vswitch_name=tf-example"
      • Importez un VPC et une instance ECS appartenant tous deux au groupe de ressources rg-12345

        aliterraformer import alicloud -r=vpc,instance --filter="resource_group_id=rg-12345"
    • Extrayez les propriétés sous forme de variables à l'aide de output-variables

      Format : r1:attr1,attr2;r2:attr1,attr2,attr3.

      • Extrayez vpc_id et vswitch_id d'une instance ECS sous forme de variables

        aliterraformer import alicloud -r=instance --output-variables="instance:vpc_id,vswitch_id"
Exemple

Cet exemple importe un VPC, un vSwitch et une instance ECS dont l'ID de VPC est vpc-12345 dans la région Chine (Hangzhou), en extrayant le zone_id du vSwitch sous forme de variable :

  1. Créez un répertoire pour stocker les modèles importés et les fichiers d'état.

    mkdir example && cd example
  2. Construisez la commande d'importation.

    aliterraformer import alicloud \
        --regions=cn-hangzhou \
        -r=vpc,vswitch,instance \
        --filter="vpc.id=vpc-12345,vswitch.vpc_id=vpc-12345,instance.vpc_id=vpc-12345" \
        --output-variables="vswitch:zone_id" \
        --path-output=example               \
        --path-pattern={output}            \
        --compact
    • --path-output : spécifie le dossier d'importation.

    • --path-pattern : définit la structure des répertoires pour les modèles importés. La valeur par défaut est {output}/{provider}/{service}/. Les alternatives sont {output}/{provider}/ et {output}/. L'utilisation de --path-pattern={output} place tous les modèles dans un seul dossier.

    • --compact : regroupe toutes les ressources dans un seul fichier resources.tf au lieu de créer des fichiers {service}.tf distincts.

  3. Une fois l'importation terminée, les fichiers suivants sont générés dans le répertoire example :

    .
    ├── outputs.tf
    ├── provider.tf
    ├── resources.tf
    ├── terraform.tfstate
    └── variables.tf

    Sans l'option --path-pattern={output}, la structure des répertoires se présente comme suit :

    .
    └── alicloud
        ├── instance
        │   ├── provider.tf
        │   ├── terraform.tfstate
        │   └── variables.tf
        ├── vpc
        │   ├── outputs.tf
        │   ├── provider.tf
        │   ├── terraform.tfstate
        │   ├── variables.tf
        │   └── vpc.tf
        └── vswitch
            ├── outputs.tf
            ├── provider.tf
            ├── terraform.tfstate
            ├── variables.tf
            └── vswitch.tf
  4. Pour Terraform >=0.13.0, exécutez la commande suivante afin de mettre à jour le fichier d'état pour assurer la compatibilité des versions.

    terraform state replace-provider -auto-approve "registry.terraform.io/-/alicloud" "aliyun/alicloud"

Commentaires et suggestions

Pour toute question ou suggestion, rejoignez le groupe DingTalk (ID de groupe : 34240022836) ou soumettez un problème sur la page Terraform Provider GitHub d'Alibaba Cloud.