Resource Orchestration Service (ROS) admite plantillas de Terraform una vez que se gestiona Terraform en ROS. Estas plantillas permiten orquestar recursos de Alibaba Cloud, Amazon Web Services (AWS) y Microsoft Azure. En una plantilla de Terraform, puede definir recursos y parámetros, así como configurar relaciones de dependencia entre los recursos.
Estructura
Una plantilla de Terraform consta de 10 secciones. El siguiente código de ejemplo muestra la estructura de la plantilla:
Para obtener más información sobre la estructura de las plantillas de Terraform, consulte la Guía de estilo.
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}"
}
(Obligatorio) ROSTemplateFormatVersion
Versión del formato de la plantilla de Terraform para ROS. Establezca el valor en 2015-09-01.
(Obligatorio) Transform
Versión de Terraform compatible con ROS. Valores válidos:
Aliyun::Terraform-v0.12: Terraform versión 0.12
Aliyun::Terraform-v0.15: Terraform versión 0.15
Aliyun::Terraform-v1.0: Terraform versión 1.0
Aliyun::Terraform-v1.1: Terraform versión 1.1
Aliyun::Terraform-v1.2: Terraform versión 1.2
Aliyun::Terraform-v1.3: Terraform versión 1.3
Aliyun::Terraform-v1.4: Terraform versión 1.4
Aliyun::Terraform-v1.5: Terraform versión 1.5
Aliyun::OpenTofu-v1.6: OpenTofu versión 1.6
Aliyun::OpenTofu-v1.7: OpenTofu versión 1.7
Aliyun::OpenTofu-v1.8: OpenTofu versión 1.8
HashiCorp anunció la transición de Mozilla Public License (MPL) 2.0 a Business Source License (BSL). La versión más reciente de Terraform que admite ROS es la 1.5.7, la cual corresponde a la última versión publicada bajo MPL 2.0.
Antes de configurar la sección Transform, tenga en cuenta lo siguiente:
Cuando se publica una nueva versión principal o secundaria de Terraform, ROS incluye el nuevo número de versión como un valor válido del parámetro Transform.
Los cambios en las versiones de parche de Terraform no afectan los valores válidos del parámetro Transform.
-
Al continuar con la creación de una pila o al actualizarla, puede modificar el valor del parámetro Transform. Los valores original y nuevo deben cumplir las condiciones de la siguiente tabla. Las versiones 1.x de Terraform son compatibles entre sí y pueden sustituirse mutuamente.
Valor original
Nuevo valor
Aliyun::Terraform-v1.0
Aliyun::Terraform-v1.1 o Aliyun::Terraform-v1.2
Aliyun::Terraform-v1.1
Aliyun::Terraform-v1.0 o Aliyun::Terraform-v1.2
Aliyun::Terraform-v1.2
Aliyun::Terraform-v1.0 o Aliyun::Terraform-v1.1
NotaPuede utilizar el parámetro UpdateAllowedTransforms en la operación GetFeatureDetails para consultar las versiones de Transform que se pueden actualizar en ROS.
(Obligatorio) Workspace
Pares clave-valor de todos los módulos en un workspace de Terraform. En cada par, la clave representa la ruta de un archivo de módulo y el valor corresponde al contenido de dicho archivo.
Antes de configurar la sección Workspace, considere los siguientes puntos:
La sección Workspace puede contener hasta 50 archivos y no puede estar vacía.
-
Ruta del archivo
La ruta del archivo puede tener una longitud máxima de 1,024 caracteres. El nombre de una carpeta o archivo dentro de la ruta no debe exceder los 255 caracteres.
La ruta debe ser relativa; no puede comenzar con una barra diagonal (/) ni terminar con
.json,.tfstateo.hcl. Si el nombre del archivo .tf termina en .debug.tf, ROS lo ignora y no utiliza Terraform para orquestarlo.La ruta del archivo puede contener letras, dígitos y los siguientes caracteres especiales:
! " # $ % & ' ( ) * + , - . / : ; <=> ? @ [\] ^ _La profundidad máxima de la ruta del archivo es 5. Por ejemplo, la profundidad de main.tf es 1, mientras que la de modules/vpc/main.tf es 3.
El delimitador de la ruta del archivo es la barra diagonal (/). El valor entre dos barras diagonales no puede estar vacío ni ser
.o...
-
Contenido del archivo
Las funciones provisioner, backend y Terraform Cloud no son compatibles.
La función module source es compatible. Solo puede usar módulos proporcionados por Alibaba Cloud o módulos locales. Al emplear un módulo local, únicamente se pueden hacer referencias relativas a datos dentro de la sección Workspace como origen del módulo. El contenido del archivo debe comenzar con un punto y una barra diagonal (
./) y no puede contener signos de dólar ($) ni signos de porcentaje (%). El delimitador de la ruta del archivo es la barra diagonal (/) y el valor entre dos barras diagonales no puede estar vacío ni ser.o...-
La función Provider es compatible.
Debe reemplazar las variables del siguiente código de ejemplo con la información real que desea utilizar y eliminar los corchetes angulares (< >). A continuación se listan los valores válidos para cada variable:
<provider>: alicloud, aws, azurerm, random, template, time, fortios, fortimanager, helm y kubernetes.
<host>: registry.terraform.io. También puede dejar esta variable vacía.
<namespace>: hashicorp, aliyun y fortinetdev. También puede dejar esta variable vacía.
terraform { required_providers { <provider> = { source = "<host>/<namespace>/<provider>" ... } } } provider "<provider>" { ... } -
Ciertos elementos de configuración de la función Provider están restringidos o prohibidos. A continuación se detallan estos elementos.
-
Elementos de configuración restringidos:
alicloud: shared_credentials_file
aws: assume_role_with_web_identity.web_identity_token_file y custom_ca_bundle
azurerm: client_id_file_path, client_certificate_path, client_secret_file_path y oidc_token_file_path
fortios: cabundlefile y fmg_cabundlefile
fortimanager: cabundlefile
helm: kubernetes.config_path
-
kubernetes: config_path
NotaEstos elementos de configuración están sujetos a las siguientes reglas:
El valor debe ser una cadena de una sola línea. Por ejemplo, no puede ser una referencia a una variable.
Al separar variables con barras diagonales (/), asegúrese de que cada variable contenga solo letras, dígitos,
guiones (-), guiones bajos (_) y puntos (.). La variable no puede estar vacía ni ser.o...Si la primera variable no cumple con la regla anterior después de separarlas con barras diagonales (/), asegúrese de que dicha variable sea
.,${path.module},${path.root},${path.cwd}o${terraform.workspace}.
-
Elementos de configuración prohibidos:
aws: shared_config_files y shared_credentials_files
helm: plugins_path, registry_config_path, repository_config_path, repository_cache, kubernetes.config_paths y kubernetes.exec
kubernetes: config_paths y exec
-
Se admiten los
resourcesydata sourcesde la función Provider. Sin embargo, no son compatibles el terraform_remote_statedata source, template.template_filedata sourceni el template.template_dirresource.-
Ciertas propiedades de
resourcesodata sourcestienen restricciones. A continuación se enumeran dichas propiedades.alicloud_file_crc64_checksum: filename
-
helm_template: repository_key_file, repository_cert_file y repository_ca_file
NotaEstos elementos de configuración están sujetos a las siguientes reglas:
El valor debe ser una cadena de una sola línea. Por ejemplo, no puede ser una referencia a una variable.
Al separar variables con barras diagonales (/), asegúrese de que cada variable contenga solo letras, dígitos,
guiones (-), guiones bajos (_) y puntos (.). La variable no puede estar vacía ni ser.o...Si la primera variable no cumple con la regla anterior después de separarlas con barras diagonales (/), asegúrese de que dicha variable sea
.,${path.module},${path.root},${path.cwd}o${terraform.workspace}.
La función templatefile no es compatible.
-
El parámetro path en las funciones file, fileexists, fileset y filebase64 está sujeto a las siguientes reglas:
Este parámetro es obligatorio.
El valor debe ser una cadena de una sola línea. Por ejemplo, no puede ser una referencia a una variable.
Al separar variables con barras diagonales (/), asegúrese de que la primera variable sea
${path.module},${path.root},${path.cwd}o${terraform.workspace}.Al separar variables con barras diagonales (/), cada variable posterior a la primera solo puede contener letras, dígitos,
guiones (-), guiones bajos (_) y puntos (.), y no puede estar vacía ni ser.o...
(Opcional) Description
Descripción de la plantilla de Terraform.
(Opcional) Parameters
Parámetros de la plantilla de Terraform. Estos siguen la misma sintaxis que los parámetros de una plantilla de ROS. Para obtener más información, consulte Parameters.
Antes de configurar la sección Parameters, tenga en cuenta lo siguiente:
-
Los parámetros definidos en la sección Parameters deben estar declarados en el archivo .tf. No obstante, los parámetros del archivo .tf no requieren definición obligatoria en la sección Parameters.
Si los parámetros definidos en el archivo .tf no aparecen en la sección Parameters, ROS los extrae automáticamente del archivo .tf y genera sus definiciones en dicha sección.
Si los parámetros del archivo .tf ya están definidos en la sección Parameters, ROS no los extrae del archivo .tf y utiliza las definiciones existentes en la sección Parameters.
-
El tipo de parámetro en la sección Parameters debe coincidir con el tipo del parámetro correspondiente en el archivo .tf.
Por ejemplo, si un tipo de parámetro en la sección Parameters es A y el tipo correspondiente en el archivo .tf es B, la siguiente tabla describe las restricciones entre el Tipo de parámetro A y el Tipo de parámetro B.
Tabla 1: Restricciones entre los tipos de parámetros en la sección Parameters y el archivo .tf
Tipo de parámetro B en el archivo .tf
Tipo de parámetro A en la sección Parameters
any o vacío
Valores válidos de A cuando el tipo del valor predeterminado en el archivo .tf es C:
Valores válidos de A si C no está definido o es nulo:
String,Number,CommaDelimitedList,Json,Boolean,ALIYUN::OOS::Parameter::ValueyALIYUN::OOS::SecretParameter::Value.Valores válidos de A si C es una cadena:
String,ALIYUN::OOS::Parameter::ValueyALIYUN::OOS::SecretParameter::Value. Si el valor predeterminado en el archivo .tf se puede convertir a número, también se admite el valorNumberpara A.Valores válidos de A si C es un número:
Number,String,ALIYUN::OOS::Parameter::ValueyALIYUN::OOS::SecretParameter::Value.Valores válidos de A si C es un booleano:
Boolean,String,ALIYUN::OOS::Parameter::ValueyALIYUN::OOS::SecretParameter::Value.Valores válidos de A si C es una lista (cadena):
Json,CommaDelimitedList,String,ALIYUN::OOS::Parameter::ValueyALIYUN::OOS::SecretParameter::Value.Valores válidos de A si C no es ninguno de los tipos anteriores:
Json,String,ALIYUN::OOS::Parameter::ValueyALIYUN::OOS::SecretParameter::Value.
string
String,ALIYUN::OOS::Parameter::ValueoALIYUN::OOS::SecretParameter::Value.number
Number,String,ALIYUN::OOS::Parameter::ValueoALIYUN::OOS::SecretParameter::Value.bool
Boolean,String,ALIYUN::OOS::Parameter::ValueoALIYUN::OOS::SecretParameter::Value.list (string)
Json,CommaDelimitedList,String,ALIYUN::OOS::Parameter::ValueoALIYUN::OOS::SecretParameter::Value.otros tipos
Json,String,ALIYUN::OOS::Parameter::ValueoALIYUN::OOS::SecretParameter::Value.
Puede extraer los parámetros de una plantilla de Terraform según sus necesidades empresariales. Si los parámetros definidos en el archivo .tf no se encuentran en la sección Parameters, ROS los extrae automáticamente del archivo .tf y genera las definiciones correspondientes en la sección Parameters.
Nombre del parámetro: Tras la extracción, los nombres de los parámetros permanecen sin cambios. Excepto los pseudoparámetros integrados, ningún nombre de parámetro puede comenzar con
ALIYUN__.-
Archivo de paso de parámetros: Se recomienda utilizar parámetros de ROS en lugar de archivos .tfvars para pasar valores de parámetros. Los archivos .tfvars son archivos de definición de variables en Terraform. Si desea usarlos, solo puede emplear archivos .auto.tfvars o .terraform.tfvars. Debe considerar las prioridades de los archivos .tfvars frente a los parámetros de ROS. A continuación se describen las prioridades en orden descendente:
-
Archivos .auto.tfvars.
Se recomienda no utilizar múltiples archivos .auto.tfvars. Si usa varios, ordénelos alfabéticamente de forma inversa según sus nombres. El primer archivo tiene la mayor prioridad. Por ejemplo, el archivo b.auto.tfvars tiene mayor prioridad que a.auto.tfvars.
Parámetros de ROS.
Archivos terraform.tfvars.
-
-
Pseudoparámetro: Puede definir los siguientes parámetros en el archivo .tf para utilizar pseudoparámetros de ROS. Para obtener más información, consulte Pseudo parameters.
Nombre del parámetro en el archivo .tf
Tipo de parámetro en el archivo .tf
Nombre del pseudoparámetro en ROS
Descripción
ALIYUN__StackId
string
ALIYUN::StackId
ID de la pila.
ALIYUN__StackName
string
ALIYUN::StackName
Nombre de la pila.
ALIYUN__TenantId
string
ALIYUN::TenantId
ID de la cuenta de Alibaba Cloud.
ALIYUN__Region
string
ALIYUN::Region
Región donde reside la pila.
ALIYUN__AccountId
string
ALIYUN::AccountId
ID de la cuenta del ejecutor.
ALIYUN__NoValue
string
ALIYUN::NoValue
El valor del parámetro configurado como ALIYUN::NoValue es nulo.
ALIYUN__ResourceGroupId
string
Ninguna
Resource group al que pertenece la pila.
ALIYUN__Tags
map(string)
Ninguna
Etiquetas agregadas a la pila. Key especifica la clave de la etiqueta y Value especifica el valor de la etiqueta.
-
Regla de extracción: La siguiente tabla describe la regla de extracción.
Parámetro original en el archivo .tf
Parámetro extraído en la sección Parameters y descripción del parámetro
type
Type. Se aplican las siguientes reglas:
Si el valor del parámetro type es any o si el parámetro type se deja vacío, ROS define el parámetro Type basándose en el valor predeterminado del parámetro type:
Si no hay valor predeterminado definido para el parámetro type o si este es nulo, ROS define el parámetro Type como
String.Si el valor predeterminado del parámetro type es una cadena, ROS define el parámetro Type como
String.Si el valor predeterminado del parámetro type es un número, ROS define el parámetro Type como
Number.Si el valor predeterminado del parámetro type es un booleano, ROS define el parámetro Type como
Boolean.Si el valor predeterminado del parámetro type no es ninguno de los tipos anteriores, ROS define el parámetro Type como
Json.
ImportanteSe recomienda definir el parámetro type para evitar que el tipo predeterminado (string) difiera del tipo esperado.
Si el parámetro type se deja vacío y su valor predeterminado es un número, Terraform identifica dicho número como una cadena y ROS define el parámetro Type como String.
variable "i" { default = 1 // Terraform identifica el valor predeterminado 1 como la cadena "1", y ROS define el parámetro Type como String. } variable "f" { default = 1.1 // Terraform identifica el valor predeterminado 1.1 como la cadena "1.1", y ROS define el parámetro Type como String. } variable "l" { default = [1.1] // Terraform identifica el valor predeterminado [1.1] como la cadena ["1.1"], y ROS define el parámetro Type como Json. }
Si el valor del parámetro type es una cadena, ROS define el parámetro Type como
String.Si el valor del parámetro type es un número, ROS define el parámetro Type como
Number.Si el valor del parámetro type es un booleano, ROS define el parámetro Type como
Boolean.Si el valor del parámetro type no es ninguno de los tipos anteriores, ROS define el parámetro Type como
Json.
default
Default.
sensitive
NoEcho.
description
Si el valor del parámetro description no es una cadena
JSON, ROS genera el parámetro Description.Si el valor del parámetro description es una cadena
JSON, el valor debe seguir la misma sintaxis que la sección Parameters de la plantilla de ROS. Se aplican las siguientes reglas:Solo se admiten parámetros válidos.
Si se define el parámetro NoEcho, se ignora el valor del parámetro sensitive. Si el parámetro NoEcho se deja vacío, se utiliza el valor del parámetro sensitive.
Si se define el parámetro Default, se ignora el valor del parámetro default. Si el parámetro Default se deja vacío, se utiliza el valor del parámetro default.
Si se define el parámetro Type, su valor debe coincidir con el valor del parámetro type. Para obtener más información, consulte Constraints between parameter types in the Parameters section and the .tf file.
-
Código de ejemplo de parámetros extraídos:
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
(Opcional) Outputs
Elementos de salida de la plantilla de Terraform. Estos elementos siguen la misma sintaxis que los elementos de salida de una plantilla de ROS.
Antes de configurar la sección Outputs, tenga en cuenta lo siguiente:
-
Los elementos de salida en la sección Outputs deben estar definidos en el archivo .tf. Los elementos de salida del archivo .tf no requieren definición obligatoria en la sección Outputs.
Si los elementos de salida definidos en el archivo .tf no aparecen en la sección Outputs, ROS los extrae automáticamente del archivo .tf y genera sus definiciones en dicha sección.
Si los elementos de salida del archivo .tf ya están definidos en la sección Outputs, ROS no los extrae del archivo .tf y utiliza las definiciones existentes en la sección Outputs.
El parámetro Condition no es compatible en la sección Outputs.
Se recomienda establecer el parámetro Value en null para devolver los elementos de salida de la plantilla de Terraform.
Puede extraer los elementos de salida de una plantilla de Terraform según sus necesidades empresariales. Si los elementos de salida definidos en el archivo .tf no se encuentran en la sección Outputs, ROS los extrae automáticamente del archivo .tf y genera las definiciones correspondientes en la sección Outputs.
-
Regla de extracción: La siguiente tabla describe la regla de extracción.
Nombre del elemento de salida: Los nombres de los elementos de salida permanecen sin cambios.
-
Parámetro description:
Si el valor del parámetro description no es una cadena
JSON, ROS genera el parámetro Description en la sección Outputs.Si el valor del parámetro description es una cadena
JSON, el valor debe seguir la misma sintaxis que la sección Outputs de la plantilla de ROS. Si el valor cumple con esta sintaxis, ROS genera los parámetros Description y Label en la sección Outputs.
-
Código de ejemplo de elementos de salida extraídos:
Outputs: vpc_id: Value: null Description: en: VPC ID vsw_id: Value: null Description: en: VSwitch ID
(Opcional) Metadata
Metadatos de la plantilla de Terraform. Para obtener más información, consulte Metadata.
Si desea utilizar la sección Metadata exclusivamente en la consola de ROS, puede agregar un archivo .metadata en la sección Workspace.
(Opcional) Mappings
Asignaciones de la plantilla de Terraform. Para obtener más información, consulte Mappings.
Si agrega el archivo .mappings a la sección Workspace y su contenido es un diccionario JSON válido, ROS utiliza dicho contenido para sobrescribir las configuraciones en la sección Mappings.
(Opcional) Conditions
Condiciones de la plantilla de Terraform. Para obtener más información, consulte Conditions.
Si agrega el archivo .conditions a la sección Workspace y su contenido es un diccionario JSON válido, ROS utiliza dicho contenido para sobrescribir las configuraciones en la sección Conditions.
(Opcional) Rules
Reglas de la plantilla de Terraform. Para obtener más información, consulte Rules.
Si agrega el archivo .rules a la sección Workspace y su contenido es un diccionario JSON válido, ROS utiliza dicho contenido para sobrescribir las configuraciones en la sección Rules.