Acerca de las cookies de este sitio Nuestros sitios web necesitan algunas cookies para funcionar correctamente (necesarias). Además, se pueden utilizar otras cookies con su consentimiento para analizar el uso del sitio, para mejorar la experiencia del usuario y para publicidad. Para obtener más información, consulte sus opciones de. Al visitar nuestro sitio web, acepta que procesemos la información tal y como se describe en ladeclaración de privacidad de IBM. Para facilitar la navegación, sus preferencias de cookies se compartirán entre los dominios web de IBM que se muestran aquí.
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.
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 de API IBM Cloud es esencial para autenticarse con la plataforma IBM Cloud. También la señal de IAM y la señal de renovación de IAM que Schematics requiere para trabajar con la API del recurso y para determinar los permisos que se le
han otorgado. 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
.
**Diferente IBM Cloud Clave API 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.tf
independiente. 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
provider
a 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 bloque
provider
para trabajar con los recursos. Schematics recupera automáticamente la clave de API IBM Cloud para que no tenga que especificar esta información en el bloqueprovider
. -
Cree un archivo
provider.tf
o 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 un 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 un 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 trabajos de Terraform para crear recursos en una cuenta de destino. Para suministrar recursos en una cuenta de destino, se deben proporcionar los permisos de identidad y acceso de la cuenta de destino. Esto 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 de cuentas cruzadas adecuada para la cuenta de destino utilizando una clave de API.
Cuando se ejecutan trabajos a través de la interfaz de usuario sin pasar claves de API, se presupone la identidad del usuario que ha iniciado la sesión para ejecutar 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.
Simplemente reutilice 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.5
admite 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
}
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 IBM Cloud Schematics para utilizar 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 campovalue
es el valor de formato deHCL
proporcionado en el archivo.tfvars
. -
Para
CLI
, puede ver crear, o actualizar los valores para el tipo de datos Complejo. A continuación, el campovalue
debe 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 campovalue
es el valor del formatoHCL
proporcionado 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)) |
Consulte lista de ejemplo de serie. |
list(object({internal = number external = number protocol = string})) |
Consulte lista de ejemplos de objetos. |
Ejemplo de lista de series
[
"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.