De nombreux débutants ignorent la configuration des modules Terraform pour faciliter le processus de personnalisation. Au moins, ils le pensent, ils se sont simplifiés la tâche. Voyons ce que sont les modules Terraform et comment ils fonctionnent.
Je suppose que vous connaissez déjà certaines des bases de Terraform et que vous avez même essayé de l'utiliser auparavant. Sinon, consultez cette présentation de Terraform et ce didacticiel vidéo avant de continuer.
Veuillez noter que je n'utilise pas intentionnellement de vrais exemples de code avec certains fournisseurs spécifiques comme AWS ou Google pour faciliter la compréhension.
Modules Terraform
Vous écrivez déjà des modules
Même si vous ne créez pas un module exprès, si vous utilisez Terraform, vous écrivez déjà un module - un module dit "racine".
Tout fichier de configuration Terraform ( .tf
) dans un répertoire, même un, forme un module.
Que fait un module?
Le module Terraform vous permet de créer une abstraction logique sur un ensemble de ressources. En d'autres termes, un module vous permet de regrouper des ressources et de réutiliser ce groupe plus tard, peut-être plusieurs fois.
Disons que nous avons un serveur virtuel avec certaines fonctionnalités hébergées dans le cloud. Quel ensemble de ressources ce serveur peut-il décrire? Par example:
,
IP-,
,
, , . .

, . . , ?
, , «» .
« » .
5 «», ( ):
module "server" { count = 5 source = "./module_server" some_variable = some_value }
Terraform "" , 0.13.
:
, , , . :
, (VPC)
(.. bucket)
- ,
, : «» «» . «» :
module "server" { source = "./module_server" some_variable = some_value } module "network" { source = "./module_network" some_other_variable = some_other_value }
,
, «» . , , .

:
Terraform — , Docker,
Git ( GitHub/BitBucket)
HTTP URL- .zip
?
. , «» , «»?
.
Terraform : .
Scope ( )
, , , . , «A» «B».
, , , . , 5 «»:
module.server[0].resource_type.resource_name module.server[1].resource_type.resource_name module.server[2].resource_type.resource_name ...
, - count
, :
module "server-alpha" { source = "./module_server" some_variable = some_value } module "server-beta" { source = "./module_server" some_variable = some_value }
— ,
:
module.server-alpha.resource_type.resource_name module.server-beta.resource_type.resource_name
, .
«» , «».

output
«» , .
«» variable
, :

output
variable
, .
— ( ) — «» , .
, «» , «» «»:
network_id = module.network.network_id
'network_id
' — ,
:
module "server" { count = 5 source = "./module_server" some_variable = some_value network_id = module.network.network_id } module "network" { source = "./module_network" some_other_variable = some_other_value }
5 , .
, .
Terraform, .
HashiCorp, Terraform, : "Organize Configuration".
De plus, il existe un excellent tutoriel complet couvrant tout, des concepts Terraform débutants aux concepts avancés: Guide d'étude - Certification des associés Terraform .
La structure modulaire de votre code rend votre configuration plus flexible et plus facile à comprendre pour les autres. Ce dernier est particulièrement utile pour l'équipe.
Si vous avez aimé l'article, suivez- moi sur Twitter (@ vasylenko ), où je partage occasionnellement mes plats à emporter et mes conseils sur Terraform, AWS, Ansible et d'autres technologies liées au DevOps.