tl;dr
Availability Zone のどっちか!とか, Subnet ID のどっちか!をランダムに欲しい時にどうしようかなと思っていたら, Terraform には Random Provider というプロバイダが用意されていたので, 色々と触ってみました.
ここのリソースの細かいオプションはドキュメントを読みましょう.
尚, 検証に利用した環境は以下の通りです. 最新でなくてごめんなさい.
$ terraform version Terraform v0.11.11 + provider.random v2.1.0 Your version of Terraform is out of date! The latest version is 0.11.13. You can update by downloading from www.terraform.io/downloads.html
俺はこうした
random_id リソース
何が出来るか
- https://www.terraform.io/docs/providers/random/r/id.html
- リソースを一意に識別する為に乱数を生成します
- b64_url, b64_std, hex, dec の 4 種類の乱数を生成します
何に使えるか
- リソースにユニークな ID を付与したい時など
tf サンプル
resource "random_id" "sample" { byte_length = 8 } output "ramdom_id-b64_url" { value = "${random_id.sample.b64_url}" } output "ramdom_id-b64_std" { value = "${random_id.sample.b64_std}" } output "ramdom_id-hex" { value = "${random_id.sample.hex}" } output "ramdom_id-dec" { value = "${random_id.sample.dec}" }
output
Outputs: ramdom_id-b64_std = +5xe3FnkIKw= ramdom_id-b64_url = -5xe3FnkIKw ramdom_id-dec = 18130470500380713132 ramdom_id-hex = fb9c5edc59e420ac
random_integer リソース
何が出来るか
- https://www.terraform.io/docs/providers/random/r/integer.html
- min と max で指定した数値の間で, ランダムな数値を生成します
何に使えるか
- ランダムな数字が欲しい時
- プライオリティの指定とか
tf サンプル
resource "random_integer" "sample" { min = 1 max = 99999 } output "ramdom_integer" { value = "${random_integer.sample.result}" }
output
Outputs: ramdom_integer = 16343
random_pet リソース
何が出来るか
- https://www.terraform.io/docs/providers/random/r/pet.html
- リソースを一意に識別する為にペットの名前を生成します!ペット!
何に使えるか
- リソースにちょっと癒やしを求めたユニークな ID を付与したい時など
tf サンプル
resource "random_pet" "sample" {} output "ramdom_pet" { value = "${random_pet.sample.id}" }
output
Outputs: ramdom_pet = lenient-viper
random_shuffle リソース
何が出来るか
- https://www.terraform.io/docs/providers/random/r/shuffle.html
- 引数として与えられた文字列リストからランダムに対象を選択します
何に使えるか
- どちらかの Availability Zone (ap-northeast-1a または ap-northeast-1c) が欲しい時
tf サンプル
resource "random_shuffle" "sample" { input = ["foo", "bar", "buz", "qux", "quux"] result_count = 2 } output "ramdom_shuffle" { value = "${random_shuffle.sample.result}" }
output
Outputs: ramdom_shuffle = [ bar, buz ]
random_string リソース
何が出来るか
- https://www.terraform.io/docs/providers/random/r/string.html
- 英数字と特殊文字 (オプション) でランダムな文字列を生成します
何に使えるか
- ランダムな文字列が欲しい時
- パスワードとか
tf サンプル
resource "random_string" "sample" { length = 16 special = true } output "ramdom_string" { value = "${random_string.sample.result}" }
output
Outputs: ramdom_string = 0ucqy18F+VR9lhC5
random_uuid リソース
何が出来るか
- https://www.terraform.io/docs/providers/random/r/uuid.html
- リソースを一意に識別する為に uuid を生成します
何に使えるか
- リソース名に UUID を含む文字列で名前をつける必要がある時 (ってどんな時?)
tf サンプル
resource "random_uuid" "sample" {} output "ramdom_uuid" { value = "${random_uuid.sample.result}" }
output
Outputs: ramdom_uuid = d8a65bb0-46c4-17a0-ab47-ba1d7b15d562
以上
ざっくりと Ramdom プロバイダを触ってみました. まじで Terraform ってなんでも出来ますよね.