Creación de plantillas de Terraform
Aprenda a crear plantillas de Terraform que estén bien estructuradas y sean reutilizables y completas.
Una plantilla de Terraform consta de uno o más archivos de configuración de Terraform que declaran el estado que desea alcanzar para los recursos de IBM Cloud®. Para trabajar correctamente con sus recursos, debe configurar IBM como su proveedor de nube y añadir recursos a su archivo de configuración de Terraform. De manera opcional, puede utilizar variables de entrada para personalizar los recursos.
Puede escribir el archivo de configuración de Terraform utilizando la sintaxis de HashiCorp Configuration Language (HCL) o el formato JSON. También puede utilizar Terraform IBM Modules(TIM), que ofrece componentes de infraestructura preconstruidos que ayudan a estandarizar y simplificar el proceso de despliegue.
Antes de empezar a crear su plantilla de Terraform, revise la sección Limitaciones de IBM Cloud Schematics.
Configuración del bloque provider
Especifique el proveedor de nube que desee utilizar en el bloque provider del archivo de configuración de Terraform. El bloque provider incluye todas las variables de entrada que el plugin de proveedor de IBM Cloud®
para Terraform requiere para poderle suministrar recursos.
Clave de API de IBM Cloud
La clave API de IBM Cloud es esencial para autenticarse con la plataforma IBM Cloud. También el token de IAM y el token de actualización de IAM que Schematics necesita para trabajar con la API del recurso y para determinar los permisos que se
le concedieron. Cuando utiliza Terraform nativo, siempre debe proporcionar la clave de API de IBM Cloud. En Schematics, la señal de IAM se recupera automáticamente para todos los recursos habilitados para IAM, incluyendo los clústeres de IBM
Cloud Kubernetes Service y los recursos de infraestructura de VPC. Sin embargo, el token IAM no se recupera para los recursos de infraestructura clásicos y la clave API debe proporcionarse en el bloque provider.
**Clave API IBM Cloud diferente en el bloque provider **
Si desea utilizar una clave de API distinta de la que tiene asociada a su cuenta de IBM Cloud, puede proporcionar esta clave de API en el bloque provider. Si se configura una clave de API en el bloque provider, esta
clave de API tiene prioridad sobre la clave de API almacenada en IBM Cloud.
IBM Cloud Clave API para un ID de servicio
Puede proporcionar una clave de API para un ID de servicio para todos los servicios habilitados para IAM, incluyendo los recursos de infraestructura de VPC. No se puede utilizar un ID de servicio para los recursos de infraestructura clásicos.
Siga las instrucciones para configurar el bloque provider.
-
Elija cómo desea configurar el bloque
provider.- Opción 1 Cree un archivo
provider.tfindependiente. La información de este archivo se carga mediante Terraform e IBM Cloud Schematics, y se aplica a todos los archivos de configuración de Terraform que existen en el mismo directorio de GitHub o archivo de archivado de cinta.tar. Este enfoque es útil si divide el código de infraestructura en varios archivos. - Opción 2 Añada un bloque
providera su archivo de configuración de Terraform. Puede elegir esta opción si prefiere especificar el proveedor junto con sus variables y recursos en un archivo de configuración de Terraform.
- Opción 1 Cree un archivo
-
Revise qué credenciales e información debe proporcionar en el
providerBloquea para trabajar con tus recursos. Schematics recupera automáticamente tu clave API IBM Cloud para que no tengas que especificar esta información en tuproviderbloquear. -
Cree un archivo
provider.tfo añada el código siguiente al archivo de configuración de Terraform. Para obtener una lista completa de los parámetros soportados que puede definir el bloqueprovider, consulte la referencia de proveedor de IBM Cloud.Ejemplo de recursos de infraestructura VPC
provider "ibm" { generation = 1 region = "<region_name>" }Ejemplo de recursos de infraestructura clásicos
variable "iaas_classic_username" { type = "string" } variable "iaas_classic_api_key" { type = "string" } provider "ibm" { region = "<region_name>" iaas_classic_username = var.iaas_classic_username iaas_classic_api_key = var.iaas_classic_api_key }Ejemplo para todos los recursos IBM Cloud Kubernetes Service
provider "ibm" { }Ejemplo para todos los demás recursos
provider "ibm" { region = "<region_name>" }
Añadir recursos en la nube al bloque resource
Utilice los bloques resource para definir los recursos de la nube que desea gestionar con IBM Cloud Schematics.
Para dar soporte al enfoque multinube, Terraform trabaja con varios proveedores de nube. Un proveedor de nube tiene la responsabilidad de conocer los recursos que puede suministrar, su API y los métodos para exponer estos recursos en la nube. Para que este conocimiento esté disponible para los usuarios, cada proveedor de nube admitido debe proporcionar un plugin de línea de mandatos para Terraform que los usuarios puedan utilizar para trabajar con los recursos. Para encontrar una visión general de los recursos que puede suministrar en IBM Cloud, consulte la Referencia de IBM Cloud Provider Plug-in for Terraform.
Ejemplo de código de infraestructura para el aprovisionamiento de una VPC
resource ibm_is_vpc "vpc" {
name = "myvpc"
}
Cómo hacer referencia a recursos en otros bloques de recursos
Revise las opciones que tiene para hacer referencia a recursos existentes en otros bloques de recursos del archivo de configuración de Terraform.
La referencia del plugin de proveedor de IBM Cloud incluye dos tipos de objetos, orígenes de datos y recursos. Puede utilizar ambos objetos para hacer referencia a recursos en otros bloques de recursos.
-
Recursos: para crear un recurso, utilice la definición del recurso en la referencia del plugin de proveedor de IBM Cloud. Una definición de recurso incluye la sintaxis para configurar sus recursos de Nube y una referencia de Atributos que muestra las propiedades a las que puede hacer referencia como parámetros de entrada en otros bloques de recursos. Por ejemplo, al crear una VPC, el ID de la VPC está disponible tras la creación. Puede utilizar el ID como parámetro de entrada al crear una subred para la VPC. Utilice esta opción si combina varios recursos en un archivo de configuración de Terraform.
Ejemplo de código de infraestructura
resource ibm_is_vpc "vpc" { name = "myvpc" } resource ibm_is_security_group "sg1" { name = "mysecuritygroup" vpc = ibm_is_vpc.vpc.id } -
Fuentes de datos: También puede utilizar las fuentes de datos de la referencia del complemento IBM Cloud Provider para recuperar información sobre un recurso Cloud existente. Revise la sección Referencia de argumentos de la referencia del plugin de proveedor de IBM Cloud para ver qué parámetros de entrada debe proporcionar para recuperar un recurso existente. A continuación, revise la sección Referencia de atributos para obtener una visión general de los parámetros que tiene disponibles y a los que puede hacer referencia en los bloques
resource. Utilice esta opción si desea acceder a los detalles de un recurso configurado en otro archivo de configuración de Terraform.Ejemplo de código de infraestructura
data ibm_is_image "ubuntu" { name = "ubuntu-18.04-amd64" } resource ibm_is_instance "vsi1" { name = "$mysi" vpc = ibm_is_vpc.vpc.id zone = "us-south1" keys = [data.ibm_is_ssh_key.ssh_key_id.id] image = data.ibm_is_image.ubuntu.id profile = "cc1-2x4" primary_network_interface { subnet = ibm_is_subnet.subnet1.id security_groups = [ibm_is_security_group.sg1.id] } }
Gestión de recursos en otra cuenta
Puede utilizar espacios de trabajo en la cuenta de origen IBM Cloud para ejecutar tareas de Terraform con el fin de crear recursos en una cuenta de destino. Para aprovisionar recursos en una cuenta de destino, se debe proporcionar la identidad y los permisos de acceso de la cuenta de destino. Puede ser utilizando la identidad de un usuario con permisos para la cuenta de destino. O un ID de servicio con autenticación y autorización cruzada adecuada para la cuenta de destino mediante una clave API.
Cuando se ejecutan trabajos a través de la interfaz de usuario sin pasar claves API, se asume la identidad del usuario conectado para ejecutar las operaciones.
Utilización de bloques variable para personalizar recursos
Puede utilizar bloques variable para crear una plantilla para el código de infraestructura. Por ejemplo, en lugar de crear varios archivos de configuración de Terraform para un recurso que desea desplegar en varios centros de datos.
Basta con reutilizar la misma configuración con una variable de entrada para definir el centro de datos.
Almacenamiento de variables
Puede optar por declarar sus variables dentro del mismo archivo de configuración de Terraform donde especifica los recursos que desea suministrar, o crear un archivo variables.tf aparte que incluya todas las declaraciones de variables.
Al crear un espacio de trabajo, IBM Cloud Schematics analiza automáticamente los archivos de configuración de Terraform para encontrar las declaraciones de variables.
Declarar una variable
Al declarar una variable de entrada, debe proporcionar un nombre para la variable y el tipo de datos de acuerdo con la versión de Terraform. De forma opcional, puede proporcionar un valor predeterminado para la variable. Cuando las variables
de entrada se importan en Schematics y se especifica un valor por defecto, puede elegir sobrescribir el valor por defecto. \n IBM Cloud Schematics acepta los valores como una cadena para tipos primitivos como bool, number,
string, y HCL formato para variables complejas.
Terraform v1.5admite tipos de datos de cadena, lista, mapa,bool, número y complejos como lista(tipo), mapa(tipo), objeto( {attribute name=type,.} ), conjunto(tipo), tupla( [tipo] ).
Variable de entrada limitadora
Sí. Si define variables de entrada en el archivo de configuración de Terraform, tenga presente que el valor que especifique para estas variables pue de tener un máximo de 2049 caracteres. Si su variable de entrada requiere un valor que supera este límite, el valor se truncará a los 2049 caracteres.
Ejemplo de declaración de variable sin valor por defecto
variable "datacenter" {
type = "string"
description = "The data center that you want to deploy your Kubernetes cluster in."
}
Ejemplo de declaración de variable con un valor por defecto
variable "datacenter" {
type = "string"
description = "The data center that you want to deploy your Kubernetes cluster in."
default = "dal10"
}
Cómo hacer referencia a variables
Puede hacer referencia al valor de la variable en otros bloques de los archivos de configuración de Terraform utilizando la sintaxis "${var.<variable_name>}".
Ejemplo de referencia a una variable datacenter
resource ibm_container_cluster "test_cluster" {
name = "test"
datacenter = var.datacenter
}
Aprovechamiento de los módulos de Terraform IBM para un desarrollo más rápido
Opcionalmente, puede utilizar Terraform IBM Modules(TIM) para crear sus plantillas. Ayuda a crear infraestructuras complejas con rapidez, contribuye a simplificar las dependencias de recursos, aplica las mejores prácticas de IBM Cloud y evoluciona gracias a las aportaciones de la comunidad de IBM Cloud.
Ejemplo: Utilización del módulo VPC de TIM
module "vpc" {
source = "terraform-ibm-modules/vpc/ibm"
version = "1.1.0"
vpc_name = "my-production-vpc"
resource_group_id = "Default"
classic_access = false
default_address_prefix = "auto"
default_network_acl_name = "my-default-acl"
default_security_group_name = "my-default-sg"
default_routing_table_name = "my-default-rt"
}
Explore los módulos disponibles:
Cómo proporcionar valores a IBM Cloud Schematics para las variables declaradas
Puede proporcionar los valores después de crear el espacio de trabajo para que IBM Cloud Schematics los utilice en las acciones de Terraform, para las variables que se declaran en la plantilla.
-
Para
UI, puede proporcionar los valores en la página IBM Cloud > Schematics > espacio de trabajo > Configuración. El campovaluees el valor de formato deHCLproporcionado en el archivo.tfvars. -
Para
CLI, puede ver crear, o actualizar los valores para el tipo de datos Complejo. A continuación, el campovaluedebe contener la cadena escapada para el almacén de variables, como se muestra en el ejemplo. -
Para
API, puede ver crear o actualizar los valores en el campotemplate_data>variablestore. El campovaluees el valor del formatoHCLproporcionado en el archivo.tfvars. Siempre es una serie JSON, para cualquier tipo de variable.Ejemplo
"variablestore": [ { "value": "[\n {\n internal = 800\n external = 83009\n protocol = \"tcp\"\n }\n ]", "description": "", "name": "docker_ports", "type": "list(object({\n internal = number\n external = number\n protocol = string\n }))" }, { "name": "worker_pool_labels", "type": "map(string)", "value": "{\n \"label-name1\": \"label-value1\",\n \"label-name2\": \"label-value2\"\n}" }, { "name": "docker_ports", "type": "list(object({\n internal = number\n external = number\n protocol = string\n }))", "value": "[\n {\n internal = 800\n external = 83009\n protocol = \"tcp\"\n }\n ]", "description": "" } ]
¿Puedo ver cómo declarar variables complejas en un archivo?
Sí, cuando declara y asigna el valor a las variables, puede ver la ayuda contextual en la interfaz de usuario. La tabla proporciona algunos ejemplos del tipo de datos complejos que se pueden declarar en el almacén de variables.
| Tipo | Ejemplo |
|---|---|
number |
4.56 |
string |
valor de ejemplo |
bool |
falso |
map(string) |
{key1 = "value1", key2 = "value2"} |
set(string) |
["hola", "él"] |
map(number) |
{internal = 8080, external = 2020} |
list(string) |
["us-south", "eu-gb"] |
list |
["valor", 30] |
list(list(string)) |
Véase la lista de ejemplos de cadenas. |
list(object({internal = number external = number protocol = string})) |
Véase la lista de ejemplos de objetos. |
Ejemplo de lista de cadenas
[
"test", "env:prod", "env:agent:test"
]
Ejemplo de lista de objetos
[
{
internal = 8300
external = 8300
protocol = "tcp"
},
{
internal = 8301
external = 8301
protocol = "ldp"
}
]
Almacenamiento de plantillas de Terraform
Los archivos de configuración de Terraform contienen código de infraestructura que se debe tratar como código normal. Para facilitar la colaboración, el código fuente y el control de versiones, almacene sus archivos en un repositorio GitHub
o GitLab. Con el control de versiones, puede revertir a versiones anteriores, auditar cambios y compartir código con varios equipos. Si no desea almacenar sus archivos en GitHub, proporcione su plantilla cargando en su lugar un archivo de cinta o .tar desde su máquina local. Si desea clonar, consulte las extensiones de archivo permitidas y bloqueadas para la clonación.
La estructura de directorios de la plantilla de Terraform en el repositorio GitHub aparece en una lista en la tabla con la hora de actualización más reciente.
| Archivo | Descripción |
|---|---|
| README.md | Crear README.md |
main.tf |
Crear main.tf |
output.tf |
Crear output.tf |
provider.tf |
Crear provider.tf |
variables.tf |
Crear variables.tf |
Ejemplos de soluciones Terraform
Varias soluciones muestran la fuerza de los servicios IBM Cloud® Schematics y IBM Cloud® cuando se utilizan juntos. Estas soluciones utilizan una plantilla o módulo de Terraform simple para configurar la infraestructura. Aunque cada solución se presenta en un caso de uso concreto, estas infraestructuras son típicas en varios sectores.
Utilice las Plantillas de soluciones de Terraform publicadas a través de IBM Cloud Schematics para crear su infraestructura, gestionar los recursos y utilizar herramientas potentes para proteger, gestionar y supervisar el espacio de trabajo y las acciones.