Was sind Terraform-Module und wie funktionieren sie?

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.








All Articles