Viele Anfänger überspringen die Konfiguration von Terraform-Modulen, um den Anpassungsprozess zu vereinfachen. Zumindest denken sie das, sie haben es sich leichter gemacht. Werfen wir einen Blick darauf, was Terraform-Module sind und wie sie funktionieren.
Ich gehe davon aus, dass Sie bereits einige Grundlagen von Terraform kennen und es sogar schon einmal versucht haben. Wenn nicht, lesen Sie diese Terraform-Übersicht und dieses Video-Tutorial, bevor Sie fortfahren.
Bitte beachten Sie, dass ich absichtlich keine echten Codebeispiele mit bestimmten Anbietern wie AWS oder Google verwende, um das Verständnis zu erleichtern.
Terraform-Module
Sie schreiben bereits Module
Auch wenn Sie nicht absichtlich ein Modul erstellen, schreiben Sie bei Verwendung von Terraform bereits ein Modul - ein sogenanntes "Root" -Modul.
Jede Terraform ( .tf
) - Konfigurationsdatei in einem Verzeichnis, auch eine, bildet ein Modul.
Was macht ein Modul?
Mit dem Terraform-Modul können Sie eine logische Abstraktion auf einer Reihe von Ressourcen erstellen. Mit anderen Worten, ein Modul ermöglicht es Ihnen, Ressourcen zu gruppieren und diese Gruppe später, möglicherweise mehrmals, wiederzuverwenden.
Angenommen, wir haben einen virtuellen Server mit einigen Funktionen, die in der Cloud gehostet werden. Welche Ressourcen kann dieser Server beschreiben? Beispielsweise:
,
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".
Darüber hinaus gibt es ein hervorragendes umfassendes Tutorial, das alles vom Anfänger bis zum fortgeschrittenen Terraform-Konzept abdeckt: Studienhandbuch - Terraform Associate-Zertifizierung .
Der modulare Aufbau Ihres Codes macht Ihre Konfiguration flexibler und für andere verständlicher. Letzteres ist besonders nützlich für das Team.
Wenn Ihnen der Artikel gefallen hat, folgen Sie mir auf Twitter (@ vasylenko ), wo ich gelegentlich meine Erkenntnisse und Tipps zu Terraform, AWS, Ansible und anderen DevOps-bezogenen Technologien teile.