データ型
- string: 文字列
- number: 数値
- bool: 真偽値
- list: 配列
- set: 集合
- map: マップ
- object: オブジェクト
これらのデータ型を組み合わせることで、HCL2は複雑なデータ構造を扱うことができます。
list
、map
、object
を使用した参考例 その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
タグを設定しています。
list
、map
、object
を使用した参考例 その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
リソースを定義する際に、count
をlength(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_each
をvar.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
型変数を定義し、name
、age
、email
、address
のプロパティを持つオブジェクトを設定しています。address
プロパティはさらにstreet
、city
、state
のプロパティを持つネストされたオブジェクトです。
また、default
キーワードを使用して、example
変数のデフォルト値を指定しています。
output
ブロックでは、name
とcity
のプロパティを出力しています。var.example.name
はexample
変数のname
プロパティの値を取得し、var.example.address.city
はexample
変数の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