Création de modèles Terraform
Découvrez comment créer des modèles Terraform bien structurés, réutilisables et complets.
Un modèle Terraform est constitué d'un ou de plusieurs fichiers de configuration Terraform qui déclarent l'état que vous souhaitez réaliser pour vos ressources IBM Cloud®. Pour travailler avec vos ressources, vous devez configurer IBM en tant que fournisseur de cloud et ajouter des ressources à votre fichier de configuration Terraform. Vous pouvez éventuellement utiliser des variables d'entrée pour personnaliser vos ressources.
Vous pouvez écrire votre fichier de configuration Terraform au format HCL (HashiCorp Configuration Language) ou JSON.
Avant de commencer à créer votre modèle Terraform, prenez soin de passer en revue les limitations d'IBM Cloud Schematics.
Configuration du bloc provider
Spécifiez le fournisseur de cloud que vous souhaitez utiliser dans le bloc provider de votre fichier de configuration Terraform. Le bloc provider inclut toutes les variables d'entrée requises par le plug-in IBM Cloud®
Provider for Terraform afin de mettre à disposition vos ressources.
Clé d'API IBM Cloud
La clé API IBM Cloud est indispensable pour s'authentifier auprès de la plateforme IBM Cloud. Également le jeton IAM et le jeton de rafraîchissement IAM dont Schematics a besoin pour travailler avec l'API de la ressource et pour déterminer les
autorisations qui vous ont été accordées. Lorsque vous utilisez Terraform natif, vous devez toujours fournir la clé de l'API IBM Cloud. Dans Schematics, le jeton IAM est extrait pour toutes les ressources activées par IAM, y compris les clusters
IBM Cloud Kubernetes Service et les ressources d'infrastructure VPC. Cependant, le jeton IAM n'est pas récupéré pour les ressources d'infrastructure classiques et la clé API doit être fournie dans le bloc provider.
**Clé d'API IBM Cloud différente dans le bloc provider **
Si vous souhaitez utiliser une clé d'API différente de celle qui est associée à votre compte IBM Cloud, vous pouvez fournir cette clé d'API dans le bloc provider. Si une clé d'API est configurée dans le bloc provider,
cette clé est prioritaire sur la clé d'API qui est stockée dans IBM Cloud.
IBM Cloud Clé API pour un identifiant de service
Vous pouvez fournir une clé d'API pour un ID de service pour tous les services activés pour IAM, y compris les ressources d'infrastructure VPC. Vous ne pouvez pas utiliser d'identifiant de service pour les ressources d'infrastructure classiques.
Suivez les instructions pour configurer le bloc provider.
-
Choisissez le mode de configuration du bloc
provider.- Option 1 Créer un fichier séparé
provider.tf. Les informations contenues dans ce fichier sont chargées par Terraform et IBM Cloud Schematics, puis appliquées à tous les fichiers de configuration Terraform se trouvant dans le même répertoire GitHub ou fichier d'archivage sur bande.tar. Cette approche est utile si vous fractionnez votre code d'infrastructure sur plusieurs fichiers. - Option 2 Ajoutez un bloc
providerà votre fichier de configuration Terraform. Vous pouvez choisir cette option si vous préférez spécifier le fournisseur en même temps que vos variables et ressources dans un seul fichier de configuration Terraform.
- Option 1 Créer un fichier séparé
-
Examinez les références et les informations que vous devez fournir dans le bloc
providerpour travailler avec vos ressources. Schematics récupère automatiquement votre clé d'API IBM Cloud, de sorte que vous n'avez pas besoin de spécifier ces informations dans votre blocprovider. -
Créez un fichier
provider.tfou ajoutez le code suivant à votre fichier de configuration Terraform. Pour la liste complète des paramètres pris en charge que vous pouvez définir dans le blocprovider, voir le document de référence de IBM Cloud Provider.Exemple de ressources d'infrastructure VPC
provider "ibm" { generation = 1 region = "<region_name>" }Exemple de ressources d'infrastructure classiques
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 }Exemple pour toutes les ressources IBM Cloud Kubernetes Service
provider "ibm" { }Exemple pour toutes les autres ressources
provider "ibm" { region = "<region_name>" }
Ajouter des ressources en nuage au bloc resource
Utilisez les blocs resource pour définir les ressources du nuage que vous souhaitez gérer avec IBM Cloud Schematics.
Pour prendre en charge une approche multicloud, Terraform fonctionne avec plusieurs fournisseurs de cloud. Un fournisseur de cloud est chargé de comprendre les ressources que vous pouvez mettre à disposition, leur API, ainsi que les méthodes permettant d'exposer ces ressources dans le cloud. Pour que ces connaissances soient accessibles aux utilisateurs, chaque fournisseur de cloud pris en charge doit fournir un plug-in de ligne de commande pour Terraform que les utilisateurs peuvent utiliser pour gérer les ressources. Pour obtenir une présentation des ressources que vous pouvez fournir dans IBM Cloud, voir la Référence IBM Cloud Provider Plug-in for Terraform.
Exemple de code d'infrastructure pour le provisionnement d'un VPC
resource ibm_is_vpc "vpc" {
name = "myvpc"
}
Référencement de ressources dans d'autres blocs de ressources
Passez en revue les options dont vous disposez pour faire référence à des ressources existantes dans d'autres blocs de ressources de votre fichier de configuration Terraform.
Le document de référence du plug-in IBM Cloud Provider comprend deux types d'objet, les sources de données et les ressources. Vous pouvez utiliser ces deux types d'objet pour faire référence à des ressources dans d'autres blocs de ressources.
-
Ressources : pour créer une ressource, vous utilisez la définition de ressource spécifiée dans le document de référence du plug-in IBM Cloud Provider. Une définition de ressource inclut la syntaxe pour configurer vos ressources Cloud et une référence d'attributs qui montre les propriétés que vous pouvez référencer comme paramètres d'entrée dans d'autres blocs de ressources. Par exemple, lorsque vous créez un VPC, l'ID de ce VPC est disponible après la création. Vous pouvez utiliser l'ID comme paramètre d'entrée lorsque vous créez un sous-réseau pour votre VPC. Utilisez cette option si vous combinez plusieurs ressources dans un fichier de configuration Terraform.
Exemple de code d'infrastructure
resource ibm_is_vpc "vpc" { name = "myvpc" } resource ibm_is_security_group "sg1" { name = "mysecuritygroup" vpc = ibm_is_vpc.vpc.id } -
Sources de données: Vous pouvez également utiliser les sources de données de la référence du plug-in IBM Cloud Provider pour récupérer des informations sur une ressource Cloud existante. Passez en revue la section Argument Reference du document de référence du plug-in IBM Cloud Provider pour voir les paramètres d'entrée que vous devez fournir afin d'extraire une ressource existante. Ensuite, consultez la section Attributes Reference pour obtenir une présentation des paramètres qui sont mis à votre disposition et auxquels vous pouvez faire référence dans vos blocs
resource. Utilisez cette option si vous souhaitez accéder aux détails d'une ressource qui est configurée dans un autre fichier de configuration Terraform.Exemple de code d'infrastructure
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] } }
Gestion des ressources dans un autre compte
Vous pouvez utiliser les espaces de travail du compte source IBM Cloud pour exécuter des tâches Terraform afin de créer des ressources dans un compte cible. Pour provisionner des ressources dans un compte cible, l'identité et les autorisations d'accès du compte cible doivent être fournies. Cela peut se faire en utilisant l'identité d'un utilisateur disposant des autorisations pour le compte cible. Ou un identifiant de service avec authentification et autorisation croisée appropriée pour le compte cible à l'aide d'une clé API.
Lors de l'exécution de tâches via l'interface utilisateur sans transmission de clés API, l'identité de l'utilisateur connecté est prise en compte pour l'exécution des opérations.
Utilisation de blocs variable pour personnaliser des ressources
Vous pouvez utiliser des blocs variable pour créer un modèle pour votre code d'infrastructure. Par exemple, au lieu de créer plusieurs fichiers de configuration Terraform pour une ressource que vous souhaitez déployer dans plusieurs
centres de données. Il suffit de réutiliser la même configuration avec une variable d'entrée pour définir le centre de données.
Stockage des variables
Vous pouvez décider de déclarer vos variables dans le même fichier de configuration Terraform où vous spécifiez les ressources que vous souhaitez mettre à disposition ou de créer un fichier variables.tf distinct qui inclut toutes
vos déclarations de variable. Lorsque vous créez un espace de travail, IBM Cloud Schematics effectue automatiquement une analyse syntaxique de vos fichiers de configuration Terraform pour rechercher des déclarations de variable.
Déclarer une variable
Lorsque vous déclarez une variable d'entrée, vous devez fournir un nom pour votre variable et le type de données en fonction de la version Terraform. Vous pouvez éventuellement fournir une valeur par défaut pour votre variable. Lorsque des variables
d'entrée sont importées dans Schematics et qu'une valeur par défaut est spécifiée, vous pouvez choisir d'écraser cette valeur. \n IBM Cloud Schematics accepte les valeurs sous forme de chaîne pour les types primitifs tels que bool,
number, string, et HCL pour les variables complexes.
Terraform v1.5prend en charge les chaînes de caractères, les listes, les cartes,bool, les nombres et les types de données complexes tels que liste(type), carte(type), objet( {attribute name=type,.} ), ensemble(type), tuple( [type]).
Limitation de la variable d'entrée
Oui. Si vous définissez des variables d'entrée dans votre fichier de configuration Terraform, n'oubliez pas que la valeur que vous entrez pour ces variables ne peut pas comporter plus de 2049 caractères. Si votre variable d'entrée requiert une valeur qui dépasse cette limite, cette valeur est tronquée au-delà de 2049 caractères.
Exemple de déclaration de variable sans valeur par défaut
variable "datacenter" {
type = "string"
description = "The data center that you want to deploy your Kubernetes cluster in."
}
Exemple de déclaration de variable avec une valeur par défaut
variable "datacenter" {
type = "string"
description = "The data center that you want to deploy your Kubernetes cluster in."
default = "dal10"
}
Référencement de variables
Vous pouvez référer la valeur de la variable dans d'autres blocs de vos fichiers de configuration Terraform à l'aide de la syntaxe "${var.<variable_name>}".
Exemple de référence à une variable datacenter
resource ibm_container_cluster "test_cluster" {
name = "test"
datacenter = var.datacenter
}
Apport de valeurs à IBM Cloud Schematics pour les variables déclarées
Vous pouvez fournir les valeurs après avoir créé l'espace de travail pour le IBM Cloud Schematics à utiliser sur les actions Terraform, pour les variables qui sont déclarées dans le modèle.
-
Pour
UI, vous pouvez fournir les valeurs sur la page IBM Cloud > Schematics > workspace > Settings. La zonevalueest la valeur de formatHCLtelle que fournie dans le fichier.tfvars. -
Pour
CLI, vous pouvez voir créer ou mettre à jour les valeurs du type de données Complex. Ensuite, le champvaluedoit contenir une chaîne échappée pour le magasin de variables, comme indiqué dans l'exemple. -
Pour
API, vous pouvez voir la création ou la mise à jour des valeurs dans le champtemplate_data>variablestore. Le champvaluecorrespond à la valeur du formatHCLtelle qu'elle figure dans le fichier.tfvars. Il s'agit toujours d'une chaîne JSON, quel que soit le type de la variable.Exemple
"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": "" } ]
Puis-je voir comment déclarer des variables complexes dans un fichier ?
Oui, lorsque vous déclarez et affectez la valeur aux variables, vous pouvez afficher l'infobulle dans l'interface utilisateur. Le tableau ci-dessous fournit quelques exemples de type de données complexe pouvant être déclaré dans le magasin de variables.
| Type | Exemple |
|---|---|
number |
4.56 |
string |
valeur exemple |
bool |
false |
map(string) |
{key1 = "value1", key2 = "value2"} |
set(string) |
["bonjour", "il"] |
map(number) |
{internal = 8080, external = 2020} |
list(string) |
["us-south", "eu-gb"] |
list |
["valeur", 30] |
list(list(string)) |
Voir la liste des exemples de chaînes de caractères. |
list(object({internal = number external = number protocol = string})) |
Voir la liste des exemples d'objets. |
Exemple de liste de chaînes de caractères
[
"test", "env:prod", "env:agent:test"
]
Exemple de liste d'objets
[
{
internal = 8300
external = 8300
protocol = "tcp"
},
{
internal = 8301
external = 8301
protocol = "ldp"
}
]
Stockage de vos modèles Terraform
Vos fichiers de configuration Terraform contiennent du code d'infrastructure que vous devez traiter comme du code normal. Pour favoriser la collaboration, le contrôle des sources et des versions, stockez vos fichiers dans un référentiel GitHub
ou GitLab. Grâce au contrôle des versions, vous pouvez revenir aux versions précédentes, effectuer un audit des changements et partager du code entre plusieurs équipes. Si vous ne souhaitez pas stocker vos fichiers dans GitHub,, fournissez
votre modèle en téléchargeant un fichier d'archive sur bande ou .tar à partir de votre machine locale. Si vous souhaitez cloner,
consultez les extensions de fichiers autorisées et bloquées pour le clonage.
La structure de répertoires du modèle Terraform dans le référentiel GitHub est répertorié dans le tableau ci-dessous.
| Fichier | Description |
|---|---|
| README.md | Crée README.md |
main.tf |
Créer main.tf |
output.tf |
Créer output.tf |
provider.tf |
Créer provider.tf |
variables.tf |
Créer variables.tf |
Exemples de solutions Terraform
Diverses solutions montrent la force des services IBM Cloud® Schematics et IBM Cloud® lorsqu'ils sont utilisés ensemble. Ces solutions utilisent un modèle ou module Terraform simple pour configurer l'infrastructure. Chaque solution est présentée à travers un cas d'utilisation particulier, mais ces infrastructures sont typiques dans les divers secteurs d'activité.
Utilisez les modèles de solution Terraform publiés via IBM Cloud Schematics pour créer votre infrastructure, gérer les ressources et utiliser des outils puissants pour sécuriser, gérer et surveiller votre espace de travail et vos actions.