ようへいの日々精進XP

よかろうもん

【細かすぎて伝わらないかもしれない tips】Terraform の Ramdom プロバイダ が地味に便利です

tl;dr

Availability Zone のどっちか!とか, Subnet ID のどっちか!をランダムに欲しい時にどうしようかなと思っていたら, Terraform には Random Provider というプロバイダが用意されていたので, 色々と触ってみました.

www.terraform.io

ここのリソースの細かいオプションはドキュメントを読みましょう.

尚, 検証に利用した環境は以下の通りです. 最新でなくてごめんなさい.

$ 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 リソース

何が出来るか

何に使えるか

  • リソースにユニークな 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 リソース

何が出来るか

何に使えるか

  • ランダムな数字が欲しい時
  • プライオリティの指定とか

tf サンプル

resource "random_integer" "sample" {
  min     = 1
  max     = 99999
}
output "ramdom_integer" {
  value = "${random_integer.sample.result}"
}

output

Outputs:

ramdom_integer = 16343

random_pet リソース

何が出来るか

何に使えるか

  • リソースにちょっと癒やしを求めたユニークな ID を付与したい時など

tf サンプル

resource "random_pet" "sample" {}
output "ramdom_pet" {
  value = "${random_pet.sample.id}"
}

output

Outputs:

ramdom_pet = lenient-viper

random_shuffle リソース

何が出来るか

何に使えるか

  • どちらかの 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 リソース

何が出来るか

何に使えるか

  • ランダムな文字列が欲しい時
  • パスワードとか

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 リソース

何が出来るか

何に使えるか

  • リソース名に 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 ってなんでも出来ますよね.