「世の中には難しいことが多い!」と感じることが多い私が、様々な用語を、初学者向けにわかりやすく全力で解説します。
解説する内容
Terraformのtoset関数について説明をします。
toset関数はfor_eachを使用する際に使用されることが多いです。なぜかというと、for_eachはmap型またはset型しか使うことが出来ないからです。for_eachをうまく活用するためにも、本記事を読んでtoset関数を理解してみてください。
Terraformのtoset関数とは
toset関数はTerraformで用意されている組み込み関数の1つです。toset関数を使用することで、toset関数に渡した値をset型に変換することが出来ます。toset関数は、渡された値から重複する値を削除し、ユニークな値のみにします。
基本的な構文は以下のようになります。
toset(value)
valueには、list型やMap型の値を指定します。
詳細に説明するよ
ソースコードをもとに具体的に説明をしていきます。
set型とは
set型とは、重複することのないユニークな値を保持する配列のデータ型です。list型とは異なり、同じ値を複数含むことは出来ません。また、string型やint型などの別の型を共存させることが出来ません。すべての型が同じ型である必要があります。
fruit_list = ["apple", "banana", "orange"]
上記の例だと、list型と同じような記載になりますが、重複する値がないことが分かります。
実際にTerraformのvariableを使用して、変数を宣言してみます。
variable "fruit_list" {
type = set(string)
default = ["apple", "banana", "orange"]
}
2行目では、variableブロックで定義する変数の型を宣言しています。今回は文字列のset型とするため、「type = set(string)」と記載しています。
3行目では、変数にデフォルトで設定する値を記載しています。
toset関数はset型に変換することが出来る
Terraformのtoset関数を使用することで、set型に変換することが出来ます。list型で定義されている値をset型に変換する例を見ていきます。
> toset(["apple", "banana", "orange", "apple", 2])
["2", "apple", "banana", "orange"])
上記のようにtosetを使用すると、3行目に記載しているような値に変換されます。ポイントとしては以下の3つです。
- 重複する値であるappleが1つになる
- 型が最も多い文字列に変更されるため、int型の2がstring型に変更されます
- 要素の順序が保証されていないため、2が先頭に来ています
実際にTerraformで使用されている例を見てみましょう。
variable "fruit_list" {
default = ["apple", "banana", "orange", "apple", 2]
}
output "fruit_output" {
value = toset(var.fruit_list)
}
1行目のvariableブロックでは、list型の変数を定義しています。
5行目のoutputブロックでは、出力する値を記載しています。toset関数を使用して、variableブロックで定義したlist型の値をset型に変換しています。
この場合の出力結果は以下になります。ポイントは上記で説明した3点と同じになります。
fruit_output = ["2", "apple", "banana", "orange"])
まとめ
- toset関数を使用することで、list型やMap型の値から重複する値を削除します
- 渡された値は最も多い型に統一されます
- 渡された値の順番は保証されません
参考
toset関数を理解するためには以下の公式ドキュメントを参考にしました。
Terraformについては、Udemyの以下の講座を参考にさせていただきました。複数の講座を視聴しましたが、個人的にはこちらの講座が一番分かりやすかったです。講座ではTerraformについて、初学者にも分かりやすく説明してくれているので、Terraformを学びたい方は視聴してみてください。
Infrastructure as Code のツールとしてよく使われる Terraform を、基本的な実装方法やコマンドから、モジュール化・複数環境の管理といった実践的な内容まで、AWS でのハンズオンでしっかり学びましょう!