Creazione di modelli Terraform
Impara a creare modelli Terraform ben strutturati, riutilizzabili e completi.
Il modello Terraform è costituito da uno o più file di configurazione Terraform che dichiarano lo stato che desideri raggiungere per le tue risorseIBM Cloud®. Per lavorare con successo con le risorse, è necessario configurare IBM come provider cloud e aggiungere le risorse al file di configurazione di Terraform. Facoltativamente, puoi utilizzare variabili di input per personalizzare le tue risorse.
È possibile scrivere il file di configurazione di Terraform utilizzando HashiCorp Configuration Language (HCL) o il formato JSON. Si può anche usare Terraform IBM Modules(TIM) che offre componenti infrastrutturali precostituiti che aiutano a standardizzare e semplificare il processo di distribuzione.
Prima di iniziare a creare il modello di Terraform, assicurarsi di rivedere il sito IBM Cloud Schematics limitazioni.
Configurazione del blocco provider
Specifica il provider cloud che desideri utilizzare nel blocco provider del tuo file di configurazione Terraform. Il blocco provider include tutte le variabili di input richieste dal plugin IBM Cloud® Provider per Terraform
per il provisioning delle tue risorse.
Chiave API di IBM Cloud
La chiave API di IBM Cloud è essenziale per autenticarsi con la piattaforma IBM Cloud. Anche il token IAM e il token di aggiornamento IAM che Schematics richiede per lavorare con l'API della risorsa e per determinare le autorizzazioni concesse.
Quando si usa Terraform nativo, è sempre necessario fornire la chiave API IBM Cloud. In Schematics, il token IAM viene recuperato per tutte le risorse abilitate IAM, compresi i cluster IBM Cloud Kubernetes Service e le risorse dell'infrastruttura
VPC. Tuttavia, il token IAM non viene recuperato per le risorse dell'infrastruttura classica e la chiave API deve essere fornita nel blocco provider.
**Chiave API IBM Cloud diversa nel blocco provider **
Se vuoi utilizzare una chiave API diversa da quella associata al tuo account IBM Cloud, puoi fornire questa chiave API nel blocco provider. Se una chiave API è configurata nel blocco provider, questa chiave API ha la
precedenza su quella archiviata in IBM Cloud.
IBM Cloud Chiave API per l'ID di un servizio
Puoi fornire una chiave API per un ID servizio per tutti i servizi abilitati IAM, comprese le risorse dell'infrastruttura VPC. Non è possibile utilizzare un ID servizio per le risorse dell'infrastruttura classica.
Seguire le istruzioni per configurare il blocco provider.
-
Scegli come vuoi configurare il blocco
provider.- Opzione 1 Creare un file
provider.tfseparato. Le informazioni contenute in questo file vengono caricate da Terraform e IBM Cloud Schematics, e applicate a tutti i file di configurazione di Terraform che esistono nella stessa directory GitHub o nel file di archivio su nastro.tar. Questo approccio è utile se suddividi il tuo codice dell'infrastruttura in più file. - Opzione 2 Aggiungere un blocco
provideral file di configurazione di Terraform. Si può scegliere questa opzione se si preferisce specificare il provider insieme alle variabili e alle risorse in un unico file di configurazione di Terraform.
- Opzione 1 Creare un file
-
Esaminare le credenziali e le informazioni da fornire nel blocco
providerper lavorare con le risorse. Schematics recupera automaticamente la chiave API IBM Cloud, in modo che non sia necessario specificare queste informazioni nel bloccoprovider. -
Crea un file
provider.tfo aggiungi il seguente codice al tuo file di configurazione Terraform. Per un elenco completo dei parametri supportati che è possibile impostare nel bloccoprovider, consultare il riferimento del provider IBM Cloud.Esempio per le risorse dell'infrastruttura VPC
provider "ibm" { generation = 1 region = "<region_name>" }Esempio di risorse infrastrutturali classiche
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 }Esempio per tutte le risorse di IBM Cloud Kubernetes Service
provider "ibm" { }Esempio per tutte le altre risorse
provider "ibm" { region = "<region_name>" }
Aggiunta di risorse cloud al blocco resource
Utilizzare i blocchi resource per definire le risorse Cloud che si desidera gestire con IBM Cloud Schematics.
Per poter supportare un approccio multi-cloud, Terraform utilizza più provider cloud. Il provider cloud si occupa di comprendere le risorse di cui puoi eseguire il provisioning, le loro API e i metodi da utilizzare per esporle nel cloud. Per rendere questa conoscenza disponibile agli utenti, ogni cloud provider supportato deve fornire un plug-in a riga di comando per Terraform che gli utenti possono utilizzare per lavorare con le risorse. Per avere una panoramica delle risorse che è possibile mettere a disposizione in IBM Cloud, consultare il riferimento IBM Cloud Provider Plug-in for Terraform.
Esempio di codice dell'infrastruttura per il provisioning di una VPC
resource ibm_is_vpc "vpc" {
name = "myvpc"
}
Riferimento a risorse in altri blocchi di risorse
Rivedi le opzioni disponibili per fare riferimento alle risorse esistenti in altri blocchi di risorse del tuo file di configurazione Terraform.
La guida di riferimento per il plugin IBM Cloud Provider comprende due tipi di oggetti, origini dati e risorse. Puoi utilizzare entrambi gli oggetti per fare riferimento a risorse appartenenti ad altri blocchi di risorse.
-
Risorse: per creare una risorsa, utilizza la definizione di risorsa fornita nella guida di riferimento per il plugin IBM Cloud Provider. Una definizione di risorsa include la sintassi per configurare le risorse Cloud e un riferimento agli Attributi che mostra le proprietà che si possono referenziare come parametri di input in altri blocchi di risorse. Ad esempio, quando crei un VPC, il suo ID viene messo a disposizione al termine della creazione. Puoi utilizzarlo come parametro di input quando crei una sottorete per il tuo VPC. Utilizza questa opzione se combini più risorse in un unico file di configurazione Terraform.
Esempio di codice dell'infrastruttura
resource ibm_is_vpc "vpc" { name = "myvpc" } resource ibm_is_security_group "sg1" { name = "mysecuritygroup" vpc = ibm_is_vpc.vpc.id } -
Fonti di dati: È inoltre possibile utilizzare le fonti di dati del plug-in IBM Cloud Provider per recuperare informazioni su una risorsa Cloud esistente. Esamina la sezione Guida di riferimento agli argomenti dei riferimenti del plugin IBM Cloud Provider per vedere quali parametri di input devi fornire per richiamare una risorsa esistente. Successivamente, consulta la sezione Riferimenti degli attributi per una panoramica dei parametri di cui disponi e a cui puoi fare riferimento nei tuoi blocchi
resource. Utilizza questa opzione se vuoi accedere ai dettagli di una risorsa configurata in un altro file di configurazione Terraform.Esempio di codice dell'infrastruttura
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] } }
Gestione delle risorse in altri account
È possibile usare gli spazi di lavoro nell'account di origine IBM Cloud per eseguire lavori Terraform per creare risorse in un account di destinazione. Per fornire risorse in un account di destinazione, è necessario fornire l'identità e le autorizzazioni di accesso dell'account di destinazione. Questo può avvenire utilizzando l'identità di un utente con i permessi per l'account di destinazione. Oppure un ID servizio con autenticazione e autorizzazione trasversale appropriata per l'account di destinazione utilizzando una chiave API.
Quando si eseguono lavori attraverso l'interfaccia utente senza passare le chiavi API, per l'esecuzione delle operazioni viene assunta l'identità dell'utente connesso.
Utilizzo dei blocchi variable per personalizzare le risorse
È possibile utilizzare i blocchi di variable per creare modelli per il codice dell'infrastruttura. Ad esempio, invece di creare più file di configurazione Terraform per una risorsa che si vuole distribuire in più data center. È
sufficiente riutilizzare la stessa configurazione con una variabile di input per definire il centro dati.
Memorizzazione della variabile
Puoi decidere di dichiarare le tue variabili all'interno dello stesso file di configurazione Terraform in cui specifichi le risorse di cui desideri eseguire il provisioning o di creare un file variables.tf distinto che includa tutte
le tue dichiarazioni di variabile. Quando crei uno spazio di lavoro, IBM Cloud Schematics analizza automaticamente i tuoi file di configurazione Terraform per trovare le dichiarazioni di variabile.
Dichiarazione di una variabile
Quando si dichiara una variabile di input, è necessario fornire un nome per la variabile e il tipo di dati in base alla versione di Terraform. È possibile fornire un valore predefinito per la variabile. Quando le variabili di input vengono importate
in Schematics e viene specificato un valore predefinito, è possibile scegliere di sovrascrivere il valore predefinito. \n IBM Cloud Schematics accetta i valori come stringa per i tipi primitivi come bool, number,
string e HCL formato per le variabili complesse.
Terraform v1.5supporta stringhe, elenchi, mappe,bool, numeri e tipi di dati complessi come list(type), map(type), object( {attribute name=type,.} ), set(type), tuple( [type] ).
Variabile di ingresso limitante
Sì. Se definisci le variabili di input nel tuo file di configurazione Terraform, tieni presente che il valore che immetti per queste variabili può contenere fino a 2049 caratteri. Se la tua variabile di input richiede un valore che supera questo limite, il valore viene troncato dopo 2049 caratteri.
Esempio di dichiarazione di variabile senza valore predefinito
variable "datacenter" {
type = "string"
description = "The data center that you want to deploy your Kubernetes cluster in."
}
Esempio di dichiarazione di variabile con valore predefinito
variable "datacenter" {
type = "string"
description = "The data center that you want to deploy your Kubernetes cluster in."
default = "dal10"
}
Riferimento alle variabili
È possibile fare riferimento al valore della variabile in altri blocchi dei file di configurazione di Terraform, utilizzando la sintassi "${var.<variable_name>}".
Esempio di riferimento a una variabile datacenter
resource ibm_container_cluster "test_cluster" {
name = "test"
datacenter = var.datacenter
}
Sfruttare i moduli Terraform IBM per uno sviluppo più rapido
Opzionalmente, è possibile utilizzare Terraform IBM Modules(TIM) per creare i modelli. Aiuta a costruire rapidamente infrastrutture complesse, a semplificare le dipendenze dalle risorse, ad applicare le best practice di IBM Cloud e ad evolversi grazie ai contributi della comunità di IBM Cloud.
Esempio: Utilizzo del modulo VPC di 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"
}
Esplorate i moduli disponibili:
Fornire i valori a IBM Cloud Schematics per le variabili dichiarate
È possibile fornire i valori dopo la creazione dell'area di lavoro per IBM Cloud Schematics da usare nelle azioni di Terraform, per le variabili dichiarate nel modello.
-
Per
UI, è possibile fornire i valori nella pagina IBM Cloud > Schematics > spazio di lavoro > Impostazioni. Il campovalueè il valore del formatoHCLfornito nel file.tfvars. -
Per
CLI, è possibile vedere creare o aggiornare i valori per il tipo di dati Complex. Quindi, il campovaluedeve contenere la stringa di escape per l'archivio delle variabili, come mostrato nell'esempio. -
Per
API, è possibile vedere creare o aggiornare i valori nel campotemplate_data>variablestore. Il campovalueè il valore del formatoHCLfornito nel file.tfvars. È sempre una stringa JSON per qualsiasi tipo di variabile.Esempio
"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": "" } ]
Posso vedere come dichiarare variabili complesse in un file?
Sì, quando si dichiara e si assegna il valore alle variabili, è possibile visualizzare il tooltip nell'interfaccia utente. La tabella fornisce alcuni esempi di tipi di dati complessi che possono essere dichiarati nell'archivio delle variabili.
| Immettere | Esempio |
|---|---|
number |
4.56 |
string |
Valore di esempio |
bool |
false |
map(string) |
{key1 = "value1", key2 = "value2"} |
set(string) |
["ciao", "lui"] |
map(number) |
{internal = 8080, external = 2020} |
list(string) |
["us-south", "eu-gb"] |
list |
["valore", 30] |
list(list(string)) |
Vedere l'elenco di esempi di stringhe. |
list(object({internal = number external = number protocol = string})) |
Vedere l'elenco degli esempi di oggetti. |
Esempio di elenco di stringhe
[
"test", "env:prod", "env:agent:test"
]
Esempio di elenco di Oggetti
[
{
internal = 8300
external = 8300
protocol = "tcp"
},
{
internal = 8301
external = 8301
protocol = "ldp"
}
]
Archiviazione dei tuoi modelli Terraform
I tuoi file di configurazione Terraform contengono codice dell'infrastruttura, che devi gestire come il codice standard. Per supportare la collaborazione, l'origine e il controllo delle versioni, archiviate i vostri file in un repository GitHub
o GitLab. Con il controllo delle versioni, puoi ripristinare le versioni precedenti, controllare le modifiche e condividere il codice con più team. Se non si desidera archiviare i file in GitHub,, fornire il modello caricando un file di archivio su nastro o .tar dal proprio computer locale. Se si desidera clonare, vedere le estensioni di file consentite e bloccate per la clonazione.
La struttura delle directory del modello Terraform nel repository GitHub è elencata nella tabella con l'ultimo aggiornamento.
| File | Descrizione |
|---|---|
| README.md | Creare README.md |
main.tf |
Crea main.tf |
output.tf |
Crea output.tf |
provider.tf |
Crea provider.tf |
variables.tf |
Crea variables.tf |
Soluzioni Terraform di esempio
Diverse soluzioni dimostrano la forza dei servizi IBM Cloud® Schematics e IBM Cloud® quando vengono utilizzati insieme. Queste soluzioni utilizzano un semplice modello o modulo Terraform per configurare l'infrastruttura. Anche se ogni soluzione è presentata attraverso l'obiettivo di un particolare caso d'uso, queste infrastrutture sono tipiche di diversi settori.
Utilizzate i modelli di soluzione Terraform pubblicati attraverso IBM Cloud Schematics per creare la vostra infrastruttura, gestire le risorse e utilizzare strumenti potenti per proteggere, gestire e monitorare il vostro spazio di lavoro e le vostre azioni.