Banyak pemula melewatkan konfigurasi modul Terraform untuk memudahkan proses kustomisasi. Setidaknya mereka berpikir begitu, mereka membuatnya lebih mudah untuk diri mereka sendiri. Mari kita lihat apa itu modul Terraform dan cara kerjanya.
Saya berasumsi bahwa Anda sudah mengetahui beberapa dasar Terraform dan bahkan pernah mencoba menggunakannya sebelumnya. Jika tidak, lihat ikhtisar Terraform dan tutorial video ini sebelum melanjutkan.
Harap dicatat, saya sengaja tidak menggunakan contoh kode nyata dengan beberapa vendor tertentu seperti AWS atau Google untuk kemudahan pemahaman.
Modul terraform
Anda sudah menulis modul
Meskipun Anda tidak membuat modul dengan sengaja, jika Anda menggunakan Terraform, Anda sudah menulis modul - yang disebut modul "root".
File konfigurasi Terraform ( .tf
) dalam direktori, bahkan satu, akan membentuk modul.
Apa yang dilakukan modul?
Modul Terraform memungkinkan Anda membuat abstraksi logis di atas kumpulan sumber daya. Dengan kata lain, modul memungkinkan Anda untuk mengelompokkan sumber daya bersama-sama dan menggunakan kembali kelompok itu nanti, mungkin berkali-kali.
Katakanlah kita memiliki server virtual dengan beberapa fitur yang dihosting di cloud. Kumpulan sumber daya apa yang dapat dijelaskan oleh server ini? Sebagai contoh:
,
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".
Selain itu, terdapat tutorial komprehensif yang sangat baik yang mencakup segala hal mulai dari konsep Terraform pemula hingga lanjutan: Panduan Studi - Sertifikasi Associate Terraform .
Struktur modular kode Anda membuat konfigurasi Anda lebih fleksibel dan lebih mudah dipahami orang lain. Yang terakhir ini sangat berguna bagi tim.
Jika Anda menyukai artikel tersebut, ikuti saya di Twitter (@ vasylenko ), di mana saya sesekali membagikan masukan dan tip saya tentang Terraform, AWS, Ansible, dan teknologi terkait DevOps lainnya.