Tous les produits
Search
Centre de documentation

Resource Orchestration Service:Structure des modèles Terraform

Dernière mise à jour :Sep 21, 2026

Resource Orchestration Service (ROS) prend en charge les modèles Terraform depuis l'intégration de Terraform dans ROS. Utilisez les modèles Terraform pour orchestrer des ressources Alibaba Cloud, Amazon Web Services (AWS) et Microsoft Azure. Définissez les ressources et les paramètres, et configurez les relations de dépendance entre les ressources dans un modèle Terraform.

Structure

Un modèle Terraform se compose de 10 sections. L'exemple de code suivant illustre la structure du modèle :

Remarque

Pour plus d'informations sur la structure des modèles Terraform, consultez le Guide de style.

ROSTemplateFormatVersion: '2015-09-01'
Transform: 'Aliyun::Terraform-v1.5'
Parameters:
  subnet_mask:
    Type: Number
    Description:
      en: Subnet mask of VSwitch
       
    Label:
      en: Subnet mask
       
    MinValue: 13
    MaxValue: 31
    Default: 21
Outputs:
  vpc_id:
    Value: null
    Description:
      en: VPC ID
       
Workspace:
  main.tf: |-
    variable "zone_id" {
      type        = string
      description = <<EOT
      {
        "AssociationProperty": "ALIYUN::ECS::Instance::ZoneId",
        "Description": {
          "en": "Zone of VSwitch",
           
        },
        "Label": {
          "en": "Zone",
           
        }
      }
      EOT
    }
    variable "subnet_mask" {
      type              = number
    }
    module "my_vpc" {
      source            = "./modules/vpc"
    }
    resource "alicloud_vswitch" "vsw" {
      vpc_id            = "${module.my_vpc.vpc_id}"
      cidr_block        = "172.16.0.0/${var.subnet_mask}"
      availability_zone = var.zone_id
    }
    output "vsw_id" {
      value       = "${alicloud_vswitch.vsw.id}"
      description = <<EOT
      {
        "Description": {
          "en": "VSwitch ID",
           
        }
      }
      EOT
    }
  modules/vpc/main.tf: |-
    variable "vpc_name" {
      type        = string
      default     = "tf_test"
      description = "VPC name"
    }
    resource "alicloud_vpc" "vpc" {
      name        = var.vpc_name
      cidr_block  = "172.16.0.0/12"
    }
    output "vpc_id" {
      value       = "${alicloud_vpc.vpc.id}"
    }

(Obligatoire) ROSTemplateFormatVersion

Version du format du modèle ROS Terraform. Définissez la valeur sur 2015-09-01.

(Obligatoire) Transform

Version de Terraform compatible avec ROS. Valeurs valides :

  • Aliyun::Terraform-v0.12 : version 0.12 de Terraform

  • Aliyun::Terraform-v0.15 : version 0.15 de Terraform

  • Aliyun::Terraform-v1.0 : version 1.0 de Terraform

  • Aliyun::Terraform-v1.1 : version 1.1 de Terraform

  • Aliyun::Terraform-v1.2 : version 1.2 de Terraform

  • Aliyun::Terraform-v1.3 : version 1.3 de Terraform

  • Aliyun::Terraform-v1.4 : version 1.4 de Terraform

  • Aliyun::Terraform-v1.5 : version 1.5 de Terraform

  • Aliyun::OpenTofu-v1.6 : version 1.6 d'OpenTofu

  • Aliyun::OpenTofu-v1.7 : version 1.7 d'OpenTofu

  • Aliyun::OpenTofu-v1.8 : version 1.8 d'OpenTofu

Remarque

HashiCorp a annoncé une transition de la licence publique Mozilla (MPL) 2,0 vers la Business Source License (BSL). La dernière version de Terraform prise en charge par ROS est la version 1.5.7, qui constitue la dernière version de Terraform publiée sous MPL 2.0.

Avant de configurer la section Transform, tenez compte des points suivants :

  • Lorsqu'une nouvelle version majeure ou mineure de Terraform est publiée, ROS inclut le nouveau numéro de version comme valeur valide du paramètre Transform.

  • Les modifications apportées aux versions correctives de Terraform n'affectent pas les valeurs valides du paramètre Transform.

  • Lorsque vous poursuivez la création d'une pile ou mettez à jour une pile, vous pouvez modifier la valeur du paramètre Transform. Les valeurs initiale et nouvelle du paramètre Transform doivent respecter les conditions indiquées dans le tableau suivant. Les versions 1.x de Terraform sont compatibles entre elles et peuvent se substituer les unes aux autres.

    Valeur initiale

    Nouvelle valeur

    Aliyun::Terraform-v1.0

    Aliyun::Terraform-v1.1 ou Aliyun::Terraform-v1.2

    Aliyun::Terraform-v1.1

    Aliyun::Terraform-v1.0 ou Aliyun::Terraform-v1.2

    Aliyun::Terraform-v1.2

    Aliyun::Terraform-v1.0 ou Aliyun::Terraform-v1.1

    Remarque

    Utilisez le paramètre UpdateAllowedTransforms dans l'opération GetFeatureDetails pour interroger les versions de Transform pouvant être mises à jour dans ROS.

(Obligatoire) Workspace

Paires clé-valeur de tous les modules dans un espace de travail Terraform. Dans une paire clé-valeur, la clé correspond au chemin d'accès d'un fichier de module et la valeur au contenu de ce fichier.

Avant de configurer la section Workspace, tenez compte des points suivants :

  • La section Workspace peut contenir jusqu'à 50 fichiers et ne doit pas être vide.

  • Chemin d'accès au fichier

    • Le chemin d'accès au fichier peut comporter jusqu'à 1 024 caractères. Le nom d'un dossier ou d'un fichier dans le chemin peut comporter jusqu'à 255 caractères.

    • Le chemin d'accès au fichier doit être un chemin relatif et ne peut pas commencer par une barre oblique (/) ni se terminer par .json, .tfstate ou .hcl. Si le nom du fichier .tf se termine par .debug.tf, ROS ignore le fichier et ne l'utilise pas pour l'orchestration Terraform.

    • Le chemin d'accès au fichier peut contenir des lettres, des chiffres et les caractères spéciaux suivants : ! " # $ % & ' ( ) * + , - . / : ; <=> ? @ [\] ^ _

    • La profondeur maximale du chemin d'accès au fichier est de 5. Par exemple, la profondeur de main.tf est de 1 et celle de modules/vpc/main.tf est de 3.

    • Le délimiteur du chemin d'accès au fichier est une barre oblique (/) et la valeur entre deux barres obliques ne peut pas être vide ni définie sur . ou ...

  • Contenu du fichier

    • Les fonctionnalités provisioner, backend et Terraform Cloud ne sont pas prises en charge.

    • La fonctionnalité source du module est prise en charge. Utilisez uniquement les modules fournis par Alibaba Cloud ou des modules locaux. Lorsque vous utilisez un module local, seules les données de la section Workspace peuvent être référencées de manière relative comme source du module. Le contenu du fichier doit commencer par un point suivi d'une barre oblique (./) et ne peut pas contenir de signes dollar ($) ni de signes pourcentage (%). Le délimiteur du chemin d'accès au fichier est une barre oblique (/) et la valeur entre deux barres obliques ne peut pas être vide ni définie sur . ou ...

    • La fonctionnalité Provider est prise en charge.

      Remplacez les variables dans l'exemple de code suivant par les informations réelles que vous souhaitez utiliser et supprimez les chevrons (< >). La section suivante répertorie les valeurs valides de chaque variable :

      • <provider> : alicloud, aws, azurerm, random, template, time, fortios, fortimanager, helm et kubernetes.

      • <host> : registry.terraform.io. Vous pouvez également laisser cette variable vide.

      • <namespace> : hashicorp, aliyun et fortinetdev. Vous pouvez également laisser cette variable vide.

      terraform {
          required_providers {
              <provider> = {
                  source = "<host>/<namespace>/<provider>"
                  ...
              }
          }
      }
      
      provider "<provider>" {
          ...
      }
    • Certains éléments de configuration de la fonctionnalité Provider sont restreints ou interdits. La section suivante répertorie ces éléments de configuration.

      • Éléments de configuration restreints :

        • alicloud : shared_credentials_file

        • aws : assume_role_with_web_identity.web_identity_token_file et custom_ca_bundle

        • azurerm : client_id_file_path, client_certificate_path, client_secret_file_path et oidc_token_file_path

        • fortios : cabundlefile et fmg_cabundlefile

        • fortimanager : cabundlefile

        • helm : kubernetes.config_path

        • kubernetes : config_path

          Remarque

          Les éléments de configuration sont soumis aux règles suivantes :

          • La valeur doit être une chaîne sur une seule ligne. Par exemple, la valeur ne peut pas être une référence à une variable.

          • Lorsque vous séparez les variables par des barres obliques (/), assurez-vous que chaque variable ne contient que des lettres, des chiffres, des traits d'union (-), des traits de soulignement (_) et des points (.). La variable ne peut pas être vide ni définie sur . ou ...

          • Si la première variable ne respecte pas la règle précédente après la séparation des variables par des barres obliques (/), assurez-vous que la première variable est ., ${path.module}, ${path.root}, ${path.cwd} ou ${terraform.workspace}.

      • Éléments de configuration interdits :

        • aws : shared_config_files et shared_credentials_files

        • helm : plugins_path, registry_config_path, repository_config_path, repository_cache, kubernetes.config_paths et kubernetes.exec

        • kubernetes : config_paths et exec

      • Les resources et data sources de la fonctionnalité Provider sont pris en charge. Toutefois, la terraform_remote_state data source, template.template_file data source et template.template_dir resource ne sont pas pris en charge.

      • Certaines propriétés des resources ou des data sources sont restreintes. La section suivante répertorie ces propriétés.

        • alicloud_file_crc64_checksum : filename

        • helm_template : repository_key_file, repository_cert_file et repository_ca_file

          Remarque

          Les éléments de configuration sont soumis aux règles suivantes :

          • La valeur doit être une chaîne sur une seule ligne. Par exemple, la valeur ne peut pas être une référence à une variable.

          • Lorsque vous séparez les variables par des barres obliques (/), assurez-vous que chaque variable ne contient que des lettres, des chiffres, des traits d'union (-), des traits de soulignement (_) et des points (.). La variable ne peut pas être vide ni définie sur . ou ...

          • Si la première variable ne respecte pas la règle précédente après la séparation des variables par des barres obliques (/), assurez-vous que la première variable est ., ${path.module}, ${path.root}, ${path.cwd} ou ${terraform.workspace}.

        • La fonction templatefile n'est pas prise en charge.

        • Le paramètre path dans les fonctions file, fileexists, fileset et filebase64 est soumis aux règles suivantes :

          • Ce paramètre est obligatoire.

          • La valeur doit être une chaîne sur une seule ligne. Par exemple, la valeur ne peut pas être une référence à une variable.

          • Lorsque vous séparez les variables par des barres obliques (/), assurez-vous que la première variable est ${path.module}, ${path.root}, ${path.cwd} ou ${terraform.workspace}.

          • Lorsque vous séparez les variables par des barres obliques (/), chaque variable qui suit la première variable ne peut contenir que des lettres, des chiffres, des traits d'union (-), des traits de soulignement (_) et des points (.), et ne peut pas être vide ni définie sur . ou ...

        (Facultatif) Description

        Description du modèle Terraform.

        (Facultatif) Parameters

        Paramètres du modèle Terraform. La syntaxe des paramètres d'un modèle Terraform est identique à celle des paramètres d'un modèle ROS. Pour plus d'informations, consultez la rubrique Paramètres.

        Avant de configurer la section Parameters, tenez compte des points suivants :

        • Les paramètres de la section Parameters doivent être définis dans le fichier .tf. Les paramètres du fichier .tf n'ont pas besoin d'être définis dans la section Parameters.

          • Si les paramètres définis dans le fichier .tf ne sont pas définis dans la section Parameters, ROS extrait automatiquement les paramètres du fichier .tf et génère les définitions dans la section Parameters.

          • Si les paramètres définis dans le fichier .tf sont déjà définis dans la section Parameters, ROS n'extrait pas les paramètres du fichier .tf et utilise les définitions de la section Parameters.

        • Le type du paramètre dans la section Parameters doit être cohérent avec le type du paramètre correspondant dans le fichier .tf.

          Par exemple, si le type d'un paramètre dans la section Parameters est A et que le type du paramètre correspondant dans le fichier .tf est B, le tableau suivant décrit les contraintes entre le type de paramètre A et le type de paramètre B.

          Tableau 1 : Contraintes entre les types de paramètres dans la section Parameters et le fichier .tf

          Type de paramètre B dans le fichier .tf

          Type de paramètre A dans la section Parameters

          any ou vide

          Valeurs valides de A lorsque le type de la valeur par défaut dans le fichier .tf est C :

          • Valeurs valides de A si C n'est pas défini ou si C est nul : String, Number, CommaDelimitedList, Json, Boolean, ALIYUN::OOS::Parameter::Value et ALIYUN::OOS::SecretParameter::Value.

          • Valeurs valides de A si C est une chaîne : String, ALIYUN::OOS::Parameter::Value et ALIYUN::OOS::SecretParameter::Value. Si la valeur par défaut dans le fichier .tf peut être convertie en nombre, une valeur de Number est également prise en charge pour A.

          • Valeurs valides de A si C est un nombre : Number, String, ALIYUN::OOS::Parameter::Value et ALIYUN::OOS::SecretParameter::Value.

          • Valeurs valides de A si C est un booléen : Boolean, String, ALIYUN::OOS::Parameter::Value et ALIYUN::OOS::SecretParameter::Value.

          • Valeurs valides de A si C est une liste (chaîne) : Json, CommaDelimitedList, String, ALIYUN::OOS::Parameter::Value et ALIYUN::OOS::SecretParameter::Value.

          • Valeurs valides de A si C n'est pas l'un des types précédents : Json, String, ALIYUN::OOS::Parameter::Value et ALIYUN::OOS::SecretParameter::Value.

          string

          String, ALIYUN::OOS::Parameter::Value ou ALIYUN::OOS::SecretParameter::Value.

          number

          Number, String, ALIYUN::OOS::Parameter::Value ou ALIYUN::OOS::SecretParameter::Value.

          bool

          Boolean, String, ALIYUN::OOS::Parameter::Value ou ALIYUN::OOS::SecretParameter::Value.

          list (string)

          Json, CommaDelimitedList, String, ALIYUN::OOS::Parameter::Value ou ALIYUN::OOS::SecretParameter::Value.

          autres types

          Json, String, ALIYUN::OOS::Parameter::Value ou ALIYUN::OOS::SecretParameter::Value.

        Extrayez les paramètres d'un modèle Terraform en fonction de vos besoins métier. Si les paramètres définis dans le fichier .tf ne sont pas définis dans la section Parameters, ROS extrait automatiquement les paramètres du fichier .tf et génère les définitions dans la section Parameters.

        • Nom du paramètre : après l'extraction des paramètres, leurs noms restent inchangés. Les noms des paramètres, à l'exception des pseudo-paramètres intégrés, ne peuvent pas commencer par ALIYUN__.

        • Fichier de transmission des paramètres : nous vous recommandons d'utiliser les paramètres ROS plutôt que les fichiers .tfvars pour transmettre les valeurs des paramètres. Les fichiers .tfvars sont des fichiers de définition de variables dans Terraform. Si vous souhaitez utiliser des fichiers .tfvars, utilisez uniquement des fichiers .auto.tfvars ou .terraform.tfvars. Tenez compte des priorités des fichiers .tfvars et des paramètres ROS. La section suivante décrit les priorités par ordre décroissant :

          1. Fichiers .auto.tfvars.

            Nous vous déconseillons d'utiliser plusieurs fichiers .auto.tfvars. Si vous utilisez plusieurs fichiers .auto.tfvars, triez les fichiers par ordre alphabétique inverse en fonction de leurs noms. Le premier fichier a la priorité la plus élevée. Par exemple, le fichier nommé b.auto.tfvars a une priorité plus élevée que le fichier nommé a.auto.tfvars.

          2. Paramètres ROS.

          3. Fichiers terraform.tfvars.

        • Pseudo-paramètre : définissez les paramètres suivants dans le fichier .tf pour utiliser les pseudo-paramètres ROS. Pour plus d'informations, consultez la rubrique Pseudo-paramètres.

          Nom du paramètre dans le fichier .tf

          Type de paramètre dans le fichier .tf

          Nom du pseudo-paramètre dans ROS

          Description

          ALIYUN__StackId

          string

          ALIYUN::StackId

          ID de la pile.

          ALIYUN__StackName

          string

          ALIYUN::StackName

          Nom de la pile.

          ALIYUN__TenantId

          string

          ALIYUN::TenantId

          ID du compte Alibaba Cloud.

          ALIYUN__Region

          string

          ALIYUN::Region

          Région où réside la pile.

          ALIYUN__AccountId

          string

          ALIYUN::AccountId

          ID du compte exécuteur.

          ALIYUN__NoValue

          string

          ALIYUN::NoValue

          La valeur du paramètre pour lequel ALIYUN::NoValue est configuré est nulle.

          ALIYUN__ResourceGroupId

          string

          Aucun

          Groupe de ressources auquel appartient la pile.

          ALIYUN__Tags

          map(string)

          Aucun

          Tags ajoutés à la pile. Key spécifie la clé du tag et Value spécifie la valeur du tag.

        • Règle d'extraction : le tableau suivant décrit la règle d'extraction.

          Paramètre d'origine dans le fichier .tf

          Paramètre extrait dans la section Parameters et description du paramètre

          type

          Type. Les règles suivantes s'appliquent :

          • Si la valeur du paramètre type est any ou si le paramètre type est vide, ROS définit le paramètre Type en fonction de la valeur par défaut du paramètre type :

            • Si aucune valeur par défaut n'est définie pour le paramètre type ou si la valeur par défaut du paramètre type est nulle, ROS définit le paramètre Type comme String.

            • Si la valeur par défaut du paramètre type est une chaîne, ROS définit le paramètre Type comme String.

            • Si la valeur par défaut du paramètre type est un nombre, ROS définit le paramètre Type comme Number.

            • Si la valeur par défaut du paramètre type est un booléen, ROS définit le paramètre Type comme Boolean.

            • Si la valeur par défaut du paramètre type n'est pas l'un des types précédents, ROS définit le paramètre Type comme Json.

            Important
            • Nous vous recommandons de définir le paramètre type au cas où le type par défaut (string) ne correspondrait pas au type attendu.

            • Si le paramètre type est vide et que la valeur par défaut du paramètre type est un nombre, Terraform identifie le nombre comme une chaîne et ROS définit le paramètre Type comme String.

              variable "i" {
                    default = 1      // Terraform identifies the default value 1 as the string "1", and ROS defines the Type parameter as String. 
                  }
                  variable "f" {
                    default = 1,1    // Terraform identifies the default value 1,1 as the string "1,1", and ROS defines the Type parameter as String. 
                  }
              
                  variable "l" {
                    default = [1,1]  // Terraform identifies the default value [1,1] as the string ["1,1"], and ROS defines the Type parameter as Json. 
                  }
          • Si la valeur du paramètre type est une chaîne, ROS définit le paramètre Type comme String.

          • Si la valeur du paramètre type est un nombre, ROS définit le paramètre Type comme Number.

          • Si la valeur du paramètre type est un booléen, ROS définit le paramètre Type comme Boolean.

          • Si la valeur du paramètre type n'est pas l'un des types précédents, ROS définit le paramètre Type comme Json.

          default

          Default.

          sensitive

          NoEcho.

          description

          • Si la valeur du paramètre description n'est pas une chaîne JSON, ROS génère le paramètre Description.

          • Si la valeur du paramètre description est une chaîne JSON, la valeur doit suivre la même syntaxe que la section Parameters du modèle ROS. Les règles suivantes s'appliquent :

            • Seuls les paramètres valides sont pris en charge.

            • Si le paramètre NoEcho est défini, la valeur du paramètre sensitive est ignorée. Si le paramètre NoEcho est vide, la valeur du paramètre sensitive est utilisée.

            • Si le paramètre Default est défini, la valeur du paramètre default est ignorée. Si le paramètre Default est vide, la valeur du paramètre default est utilisée.

            • Si le paramètre Type est défini, sa valeur doit être identique à celle du paramètre type. Pour plus d'informations, consultez la rubrique Contraintes entre les types de paramètres dans la section Parameters et le fichier .tf.

        • Exemple de code des paramètres extraits :

          Parameters:
            subnet_mask:
              Description:
                en: Subnet mask of VSwitch
                 
              Label:
                en: Subnet mask
                 
              MaxValue: 31
              MinValue: 13
              Default: 21
              Type: Number
            zone_id:
              AssociationProperty: 'ALIYUN::ECS::Instance::ZoneId'
              Description:
                en: Zone of VSwitch
                 
              Label:
                en: Zone
                 
              Type: String
            vpc_name:
              Default: tf_test
              Description: VPC name
              Type: String

        (Facultatif) Outputs

        Éléments de sortie du modèle Terraform. La syntaxe des éléments de sortie est identique à celle des éléments de sortie d'un modèle ROS.

        Avant de configurer la section Outputs, tenez compte des points suivants :

        • Les éléments de sortie de la section Outputs doivent être définis dans le fichier .tf. Les éléments de sortie du fichier .tf n'ont pas besoin d'être définis dans la section Outputs.

          • Si les éléments de sortie définis dans le fichier .tf ne sont pas définis dans la section Outputs, ROS extrait automatiquement les éléments de sortie du fichier .tf et génère les définitions dans la section Outputs.

          • Si les éléments de sortie définis dans le fichier .tf sont déjà définis dans la section Outputs, ROS n'extrait pas les éléments de sortie du fichier .tf et utilise les définitions de la section Outputs.

        • Le paramètre Condition n'est pas pris en charge dans la section Outputs.

        • Nous vous recommandons de définir le paramètre Value sur null pour renvoyer les éléments de sortie du modèle Terraform.

        Extrayez les éléments de sortie d'un modèle Terraform en fonction de vos besoins métier. Si les éléments de sortie définis dans le fichier .tf ne sont pas définis dans la section Outputs, ROS extrait automatiquement les éléments de sortie du fichier .tf et génère les définitions dans la section Outputs.

        • Règle d'extraction : le tableau suivant décrit la règle d'extraction.

          • Nom de l'élément de sortie : les noms des éléments de sortie restent inchangés.

          • Paramètre description :

            • Si la valeur du paramètre description n'est pas une chaîne JSON, ROS génère le paramètre Description dans la section Outputs.

            • Si la valeur du paramètre description est une chaîne JSON, la valeur doit suivre la même syntaxe que la section Outputs du modèle ROS. Si la valeur respecte cette syntaxe, ROS génère les paramètres Description et Label dans la section Outputs.

        • Exemple de code des éléments de sortie extraits :

          Outputs:
            vpc_id:
              Value: null
              Description:
                en: VPC ID
                 
            vsw_id:
              Value: null
              Description:
                en: VSwitch ID
                 
        • (Facultatif) Metadata

          Métadonnées du modèle Terraform. Pour plus d'informations, consultez la rubrique Métadonnées.

          Remarque

          Si vous souhaitez utiliser la section Metadata uniquement dans la console ROS, ajoutez un fichier .metadata dans la section Workspace.

          (Facultatif) Mappings

          Mappages du modèle Terraform. Pour plus d'informations, consultez la rubrique Mappings.

          Remarque

          Si vous ajoutez le fichier .mappings à la section Workspace et que le contenu du fichier est un dictionnaire JSON valide, ROS utilise le contenu du fichier pour remplacer les configurations de la section Mappings.

          (Facultatif) Conditions

          Conditions du modèle Terraform. Pour plus d'informations, consultez la rubrique Conditions.

          Remarque

          Si vous ajoutez le fichier .conditions à la section Workspace et que le contenu du fichier est un dictionnaire JSON valide, ROS utilise le contenu du fichier pour remplacer les configurations de la section Conditions.

          (Facultatif) Rules

          Règles du modèle Terraform. Pour plus d'informations, consultez la rubrique Rules.

          Remarque

          Si vous ajoutez le fichier .rules à la section Workspace et que le contenu du fichier est un dictionnaire JSON valide, ROS utilise le contenu du fichier pour remplacer les configurations de la section Rules.