Terraformモジュールとは何ですか?どのように機能しますか?

多くの初心者は、カスタマイズプロセスを容易にするためにTerraformモジュールの構成をスキップします。少なくとも彼らはそう思います、彼らは彼ら自身のためにそれをより簡単にしました。Terraformモジュールとは何か、そしてそれらがどのように機能するかを見てみましょう。







あなたはすでにTerraformの基本のいくつかを知っていて、以前にそれを使ってみたことがあると思います。そうでない場合は、続行する前に、このTerraformの概要とこのビデオチュートリアルを確認してください







理解を容易にするために、AWSやGoogleなどの特定のベンダーで実際のコード例を意図的に使用していないことに注意してください。







Terraformモジュール



あなたはすでにモジュールを書いています



意図的にモジュールを作成していなくても、Terraformを使用している場合は、すでにモジュール、いわゆる「ルート」モジュールを作成しています。







.tf



ディレクトリ内のTerraform(構成ファイルは、1つでも、モジュールを形成します。







モジュールは何をしますか?



Terraformモジュールを使用すると、一連のリソースの上に論理的な抽象化を作成できます。つまり、モジュールを使用すると、リソースをグループ化して、後で、場合によっては何度もそのグループを再利用できます。







クラウドでホストされているいくつかの機能を備えた仮想サーバーがあるとしましょう。このサーバーはどのようなリソースのセットを記述できますか?例えば:







  • ,













  • 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".







さらに、初心者から高度なTerraformの概念まで、すべてをカバーする優れた包括的なチュートリアルがあります。学習ガイド-TerraformAssociate認定







コードのモジュラー構造により、構成がより柔軟になり、他の人が理解しやすくなります。後者はチームにとって特に便利です。







この記事が気に入った場合は、Twitter(@ vasylenkoフォローしてください。ここでは、Terraform、AWS、Ansible、およびその他のDevOps関連テクノロジーに関するポイントとヒントを時折共有しています。








All Articles