2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AWSで、Terraformを利用する方法をまとめてみた(5/10)

Last updated at Posted at 2023-09-25

データ型

  • string: 文字列
  • number: 数値
  • bool: 真偽値
  • list: 配列
  • set: 集合
  • map: マップ
  • object: オブジェクト

これらのデータ型を組み合わせることで、HCL2は複雑なデータ構造を扱うことができます。

listmapobjectを使用した参考例 その1

【list: 配列】

variable "example_list" {
  type = list(string)
  default = ["item1", "item2", "item3"]
}

resource "aws_instance" "example" {
  count = length(var.example_list)

  ami           = "ami-0c55b159cbfafe1f0"
  instance_type = "t2.micro"
  tags = {
    Name = "example-instance-${var.example_list[count.index]}"
  }
}

上記の例では、variableブロックを使用してexample_listという名前のlist型の変数を定義しています。デフォルト値として、3つの文字列要素を持つ配列を指定しています。resourceブロックでは、AMI IDやインスタンスタイプなどの定数値の代わりに、var.example_list[count.index]を使用して可変の値を指定しています。count.indexは、Terraformのループ構文で使用される内部変数です。

【map: マップ】

variable "example_map" {
  type = map(string)
  default = {
    key1 = "value1"
    key2 = "value2"
    key3 = "value3"
  }
}

resource "aws_instance" "example" {
  ami           = "ami-0c55b159cbfafe1f0"
  instance_type = "t2.micro"
  tags = var.example_map
}

上記の例では、variableブロックを使用してexample_mapという名前のmap型の変数を定義しています。デフォルト値として、3つのキーと値のペアを持つマップを指定しています。resourceブロックでは、tagsプロパティにvar.example_mapを渡すことで、AWSインスタンスにタグを設定しています。

【object: オブジェクト】

variable "example_object" {
  type = object({
    key1 = string
    key2 = number
    key3 = bool
  })
  default = {
    key1 = "value1"
    key2 = 123
    key3 = true
  }
}

resource "aws_instance" "example" {
  ami           = "ami-0c55b159cbfafe1f0"
  instance_type = "t2.micro"
  tags = {
    Name = "example-instance"
    Extra = var.example_object.key1
  }
}

上記の例では、variableブロックを使用してexample_objectという名前のobject型の変数を定義しています。デフォルト値として、3つのキーと値のペアを持つオブジェクトを指定しています。resourceブロックでは、tagsプロパティにvar.example_object.key1を渡すことで、AWSインスタンスにExtraタグを設定しています。

listmapobjectを使用した参考例 その2

listの使い方

variable "servers" {
  type = list(string)
  default = ["web1", "web2", "db1"]
}

resource "aws_instance" "example" {
  count = length(var.servers)
  ami = "ami-0c55b159cbfafe1f0"
  instance_type = "t2.micro"
  tags = {
    Name = var.servers[count.index]
  }
}

上記の例では、serversという名前のlist型変数を定義し、デフォルト値として3つの文字列を含むリストを設定しています。aws_instanceリソースを定義する際に、countlength(var.servers)とすることで、servers変数の要素数だけリソースを作成します。また、tagsブロックのNameキーには、servers変数の各要素を順番に使用してタグを付けます。

mapの使い方

variable "aws_regions" {
  type = map(string)
  default = {
    us-west-1 = "Oregon"
    us-west-2 = "N. California"
    us-east-1 = "N. Virginia"
    us-east-2 = "Ohio"
  }
}

resource "aws_instance" "example" {
  ami = "ami-0c55b159cbfafe1f0"
  instance_type = "t2.micro"
  for_each = var.aws_regions

  tags = {
    Name = each.key
    Region = each.value
  }
}

上記の例では、aws_regionsという名前のmap型変数を定義し、デフォルト値として4つのキーと値を含むマップを設定しています。aws_instanceリソースを定義する際に、for_eachvar.aws_regionsとすることで、aws_regions変数のキーと値のペアだけリソースを作成します。また、tagsブロックのNameキーには、each.keyを使用して各リソースに名前を付けます。Regionキーには、each.valueを使用して各リソースのリージョンをタグ付けします。

objectの使い方

variable "example" {
  type = object({
    name = string
    age = number
    email = string
    address = object({
      street = string
      city = string
      state = string
    })
  })
  default = {
    name = "John Smith"
    age = 30
    email = "john@example.com"
    address = {
      street = "123 Main St"
      city = "Anytown"
      state = "CA"
    }
  }
}

output "name" {
  value = var.example.name
}

output "city" {
  value = var.example.address.city
}

上記の例では、exampleという名前のobject型変数を定義し、nameageemailaddressのプロパティを持つオブジェクトを設定しています。addressプロパティはさらにstreetcitystateのプロパティを持つネストされたオブジェクトです。

また、defaultキーワードを使用して、example変数のデフォルト値を指定しています。

outputブロックでは、namecityのプロパティを出力しています。var.example.nameexample変数のnameプロパティの値を取得し、var.example.address.cityexample変数のaddressプロパティのcityプロパティの値を取得しています。

このように、object型を使用すると、複数のプロパティを持つオブジェクトを定義し、その値にアクセスすることができます。ネストされたオブジェクトを使用することで、さらに複雑なデータ構造を表現することも可能です。

AWSで、Terraformを利用する方法をまとめてみた(1/10)
https://qiita.com/kimuni-i/items/ffde2f8df96fe5d9513f
AWSで、Terraformを利用する方法をまとめてみた(2/10)
https://qiita.com/kimuni-i/items/6298ed10adc6ad450488
AWSで、Terraformを利用する方法をまとめてみた(3/10)
https://qiita.com/kimuni-i/items/4d2f90506eb2dd4ee702
AWSで、Terraformを利用する方法をまとめてみた(4/10)
https://qiita.com/kimuni-i/items/b97089a820cc06ed2d9c
AWSで、Terraformを利用する方法をまとめてみた(6/10)
https://qiita.com/kimuni-i/items/943daf8f4e80af12b70e
AWSで、Terraformを利用する方法をまとめてみた(7/10)
https://qiita.com/kimuni-i/items/b2cc6e1e4b5d5c1a92cb
AWSで、Terraformを利用する方法をまとめてみた(8/10)
https://qiita.com/kimuni-i/items/2934372c385ba0561425
AWSで、Terraformを利用する方法をまとめてみた(9/10)
https://qiita.com/kimuni-i/items/edbdc88f0bca9c0354d2
AWSで、Terraformを利用する方法をまとめてみた(10/10)
https://qiita.com/kimuni-i/items/2f900d792c38ad93979c

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?