システム開発(アジャイル・スクラム)とか色々

スクラムについてのアウトプットだったり、時々お気に入りのものなど。

毎回Terraformのmoduleの動きを忘れるのでメモしておく(Azure)

はじめに

インフラタスクって初期にどかっときたり、スプリント毎に小出しに出てくるのでしばらく触ってないと毎回リセットされて困っているのでメモっときます。

普通の書き方はドキュメント見ればってことで、普段使っている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にあげます。