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 :
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 TerraformAliyun::Terraform-v0.15: version 0.15 de TerraformAliyun::Terraform-v1.0: version 1.0 de TerraformAliyun::Terraform-v1.1: version 1.1 de TerraformAliyun::Terraform-v1.2: version 1.2 de TerraformAliyun::Terraform-v1.3: version 1.3 de TerraformAliyun::Terraform-v1.4: version 1.4 de TerraformAliyun::Terraform-v1.5: version 1.5 de TerraformAliyun::OpenTofu-v1.6: version 1.6 d'OpenTofuAliyun::OpenTofu-v1.7: version 1.7 d'OpenTofuAliyun::OpenTofu-v1.8: version 1.8 d'OpenTofu
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ètreTransformdoivent 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.0Aliyun::Terraform-v1.1ouAliyun::Terraform-v1.2Aliyun::Terraform-v1.1Aliyun::Terraform-v1.0ouAliyun::Terraform-v1.2Aliyun::Terraform-v1.2Aliyun::Terraform-v1.0ouAliyun::Terraform-v1.1RemarqueUtilisez le paramètre
UpdateAllowedTransformsdans l'opération GetFeatureDetails pour interroger les versions deTransformpouvant ê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
Workspacepeut 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,.tfstateou.hcl. Si le nom du fichier.tfse 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.tfest de 1 et celle demodules/vpc/main.tfest 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
Workspacepeuvent ê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,helmetkubernetes.<host>:registry.terraform.io. Vous pouvez également laisser cette variable vide.<namespace>:hashicorp,aliyunetfortinetdev. 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_fileaws:assume_role_with_web_identity.web_identity_token_fileetcustom_ca_bundleazurerm:client_id_file_path,client_certificate_path,client_secret_file_pathetoidc_token_file_pathfortios:cabundlefileetfmg_cabundlefilefortimanager:cabundlefilehelm:kubernetes.config_path-
kubernetes:config_pathRemarqueLes é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_filesetshared_credentials_fileshelm:plugins_path,registry_config_path,repository_config_path,repository_cache,kubernetes.config_pathsetkubernetes.execkubernetes:config_pathsetexec
Les
resourcesetdata sourcesde la fonctionnalité Provider sont pris en charge. Toutefois, la terraform_remote_statedata source,template.template_filedata sourceet template.template_dirresourcene sont pas pris en charge.-
Certaines propriétés des
resourcesou desdata sourcessont restreintes. La section suivante répertorie ces propriétés.alicloud_file_crc64_checksum:filename-
helm_template:repository_key_file,repository_cert_fileetrepository_ca_fileRemarqueLes é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
pathdans 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
Parametersdoivent être définis dans le fichier.tf. Les paramètres du fichier.tfn'ont pas besoin d'être définis dans la sectionParameters.Si les paramètres définis dans le fichier
.tfne sont pas définis dans la sectionParameters, ROS extrait automatiquement les paramètres du fichier.tfet génère les définitions dans la sectionParameters.Si les paramètres définis dans le fichier
.tfsont déjà définis dans la sectionParameters, ROS n'extrait pas les paramètres du fichier.tfet utilise les définitions de la sectionParameters.
-
Le type du paramètre dans la section
Parametersdoit ê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
Parametersest A et que le type du paramètre correspondant dans le fichier.tfest 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
Parameterset le fichier.tfType 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::ValueetALIYUN::OOS::SecretParameter::Value.Valeurs valides de A si C est une chaîne :
String,ALIYUN::OOS::Parameter::ValueetALIYUN::OOS::SecretParameter::Value. Si la valeur par défaut dans le fichier .tf peut être convertie en nombre, une valeur deNumberest également prise en charge pour A.Valeurs valides de A si C est un nombre :
Number,String,ALIYUN::OOS::Parameter::ValueetALIYUN::OOS::SecretParameter::Value.Valeurs valides de A si C est un booléen :
Boolean,String,ALIYUN::OOS::Parameter::ValueetALIYUN::OOS::SecretParameter::Value.Valeurs valides de A si C est une liste (chaîne) :
Json,CommaDelimitedList,String,ALIYUN::OOS::Parameter::ValueetALIYUN::OOS::SecretParameter::Value.Valeurs valides de A si C n'est pas l'un des types précédents :
Json,String,ALIYUN::OOS::Parameter::ValueetALIYUN::OOS::SecretParameter::Value.
string
String,ALIYUN::OOS::Parameter::ValueouALIYUN::OOS::SecretParameter::Value.number
Number,String,ALIYUN::OOS::Parameter::ValueouALIYUN::OOS::SecretParameter::Value.bool
Boolean,String,ALIYUN::OOS::Parameter::ValueouALIYUN::OOS::SecretParameter::Value.list (string)
Json,CommaDelimitedList,String,ALIYUN::OOS::Parameter::ValueouALIYUN::OOS::SecretParameter::Value.autres types
Json,String,ALIYUN::OOS::Parameter::ValueouALIYUN::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
.tfne sont pas définis dans la sectionParameters, ROS extrait automatiquement les paramètres du fichier.tfet génère les définitions dans la sectionParameters.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
.tfvarspour transmettre les valeurs des paramètres. Les fichiers.tfvarssont des fichiers de définition de variables dans Terraform. Si vous souhaitez utiliser des fichiers.tfvars, utilisez uniquement des fichiers.auto.tfvarsou.terraform.tfvars. Tenez compte des priorités des fichiers.tfvarset des paramètres ROS. La section suivante décrit les priorités par ordre décroissant :-
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.tfvarsa une priorité plus élevée que le fichier nomméa.auto.tfvars. Paramètres ROS.
Fichiers
terraform.tfvars.
-
-
Pseudo-paramètre : définissez les paramètres suivants dans le fichier
.tfpour 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__StackIdstring
ALIYUN::StackIdID de la pile.
ALIYUN__StackNamestring
ALIYUN::StackNameNom de la pile.
ALIYUN__TenantIdstring
ALIYUN::TenantIdID du compte Alibaba Cloud.
ALIYUN__Regionstring
ALIYUN::RegionRégion où réside la pile.
ALIYUN__AccountIdstring
ALIYUN::AccountIdID du compte exécuteur.
ALIYUN__NoValuestring
ALIYUN::NoValueLa valeur du paramètre pour lequel
ALIYUN::NoValueest configuré est nulle.ALIYUN__ResourceGroupIdstring
Aucun
Groupe de ressources auquel appartient la pile.
ALIYUN__Tagsmap(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.
ImportantNous 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
Outputsdoivent être définis dans le fichier.tf. Les éléments de sortie du fichier.tfn'ont pas besoin d'être définis dans la sectionOutputs.Si les éléments de sortie définis dans le fichier
.tfne sont pas définis dans la sectionOutputs, ROS extrait automatiquement les éléments de sortie du fichier.tfet génère les définitions dans la sectionOutputs.Si les éléments de sortie définis dans le fichier
.tfsont déjà définis dans la sectionOutputs, ROS n'extrait pas les éléments de sortie du fichier.tfet utilise les définitions de la sectionOutputs.
Le paramètre
Conditionn'est pas pris en charge dans la sectionOutputs.Nous vous recommandons de définir le paramètre
Valuesurnullpour 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
.tfne sont pas définis dans la sectionOutputs, ROS extrait automatiquement les éléments de sortie du fichier.tfet génère les définitions dans la sectionOutputs.-
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
descriptionn'est pas une chaîneJSON, ROS génère le paramètreDescriptiondans la sectionOutputs.Si la valeur du paramètre
descriptionest une chaîneJSON, la valeur doit suivre la même syntaxe que la sectionOutputsdu modèle ROS. Si la valeur respecte cette syntaxe, ROS génère les paramètresDescriptionetLabeldans la sectionOutputs.
-
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.
RemarqueSi vous souhaitez utiliser la section
Metadatauniquement dans la console ROS, ajoutez un fichier.metadatadans la sectionWorkspace.(Facultatif) Mappings
Mappages du modèle Terraform. Pour plus d'informations, consultez la rubrique Mappings.
RemarqueSi vous ajoutez le fichier
.mappingsà la sectionWorkspaceet que le contenu du fichier est un dictionnaire JSON valide, ROS utilise le contenu du fichier pour remplacer les configurations de la sectionMappings.(Facultatif) Conditions
Conditions du modèle Terraform. Pour plus d'informations, consultez la rubrique Conditions.
RemarqueSi vous ajoutez le fichier
.conditionsà la sectionWorkspaceet que le contenu du fichier est un dictionnaire JSON valide, ROS utilise le contenu du fichier pour remplacer les configurations de la sectionConditions.(Facultatif) Rules
Règles du modèle Terraform. Pour plus d'informations, consultez la rubrique Rules.
RemarqueSi vous ajoutez le fichier
.rulesà la sectionWorkspaceet que le contenu du fichier est un dictionnaire JSON valide, ROS utilise le contenu du fichier pour remplacer les configurations de la sectionRules.
-