はじめに
インフラタスクって初期にどかっときたり、スプリント毎に小出しに出てくるのでしばらく触ってないと毎回リセットされて困っているのでメモっときます。
普通の書き方はドキュメント見ればってことで、普段使っているmoduleについてです。
ざっくり概要
moduleとはリソース単位でテンプレを作って、そこに変数を渡してあげることで汎用的に使い回せることができる便利なやつです。
DevelopとProductionでSKU変えたいとか、環境毎に差分が発生するようなケースで便利です。
むっちゃ簡単に解説するためにリソースグループとストレージアカウントだけ作ってみて、moduleとoutputの動きを確認します。
解説
ソースにコメント載っけながらの方がイメージしやすいのでそうします。
main.tf
module "resouce_group" { ## sourceでmoduleというかテンプレート側の場所を指定 source = "../modules/resource_group" ## 左辺にはテンプレート側のvariableの引数名と同一名称を指定、 ## 値を渡さなければテンプレ側のdefaultの値が使われるので、 ## ここで渡すと上書きされるんだな〜という認識でOK resource_group_name = var.resource_group_name resource_group_location = var.resource_group_location } module "storage_account" { source = "../modules/storage_account" storage_account_name = var.storage_account_name ## outputの指定方法はmodule + 『module "XX"』のXX(ここならmodule "resouce_group" のresouce_group)+ 『output "YY"』のYY resource_group_name = module.resouce_group.output_resource_group_name storage_account_location = var.storage_account_location storage_account_account_tier = var.storage_account_account_tier storage_account_replication_type = var.storage_account_replication_type }
module(resource group)
resource "azurerm_resource_group" "resource_group" { name = var.resource_group_name location = var.resource_group_location } variable "resource_group_name" { type = string description = "Resouce group name." default = "default_resouce_group" } variable "resource_group_location" { type = string description = "Resouce group location." default = "Japan East" } output "output_resource_group_name" { description = "Resouce group name." value = azurerm_resource_group.resource_group.name }
module(storage account)
resource "azurerm_storage_account" "storage_account" { name = var.storage_account_name resource_group_name = var.resource_group_name location = var.storage_account_location account_tier = var.storage_account_account_tier account_replication_type = var.storage_account_replication_type } variable "storage_account_name" { type = string description = "Storage account name. Symbols cannnot be used." default = "defaultstorageaccount" } variable "resource_group_name" { type = string description = "Resource group name." default = "default_resource_group_name" } variable "storage_account_location" { type = string description = "Resouce group location." default = "Japan East" } variable "storage_account_account_tier" { type = string description = "Types of storage accounts, e.g. Standard general-purpose v2." default = "Standard" } variable "storage_account_replication_type" { type = string description = "Replication type." default = "LRS" }
最後に
サクっとやったので適当でごめんなさい。きれいにしたらGitHubにあげます。