TerraformのRandom Providerの使い方をAzure ストレージアカウント作成を例に確認

2021-12-18Azure,Others,Terraform

Azureのストレージアカウントのリソース作成を例に、TerraformでのRandom Providerの使い方を確認します。

Terraform Randomは、Terraform上でランダムな値を生成し、それを扱えるようにするプロバイダーです。

Random Provider

Azureストレージアカウントなどのリソース名にランダムな値を付与する場合に利用できます。
今回は、Terraform Randomを使用してランダムな名前を付与したAzureストレージアカウントを作成してみました。

過去のTerraform関連の記事については、こちらで紹介しています。

Terraformの記事一覧

スポンサーリンク

TerraformのRandom Providerの概要

Terraform上でランダムな値を生成できるプロバイダー

Terraform上でランダムな値を生成し、それを利用できるようにするプロバイダーです。
Random Providerを使用すると、Terraform上でランダムな値を生成し、その値をリソース名などに利用することが可能になります。

※プロバイダーとは、各リソースを操作するためのプラグインのようなものだと思ってます。

Random Providerの種類

TerraformのRandom Providerには、生成する値の種類によっていくつかのバリエーションがあります。
実際に出力される値のイメージをわかりやすくするため、Output値のサンプルも併せて紹介しています。

項目 概要 Output値

random_id

他のリソースと識別するための一意の乱数を生成します。さまざまなタイプの変数を生成することが可能です。 ramdom_id = {
“b64_std" = “4Wj831me760="
“b64_url" = “4Wj831me760"
“byte_length" = 8
“dec" = “16242510092323188653"
“hex" = “e168fcdf599eefad"
“id" = “4Wj831me760"
“keepers" = tomap(null) /* of string */
“prefix" = tostring(null)

random_integer

指定した範囲内でランダムな数値を生成します。 random_integer = {
“id" = “14172"
“keepers" = tomap(null) /* of string */
“max" = 50000
“min" = 1
“result" = 14172
“seed" = tostring(null)
}
random_password 使い方はRandom_stringと同じですが、コンソールに結果が表示されない仕様です。
主にパスワードなど、機密性の高い変数を生成する場合に使用します。
random_password = <sensitive>
random_pet

ランダムなペット名を生成します。
結果が “adapted-wombat" のように表示される通り、動物の名前が生成されます。

random_pet = {
“id" = “adapted-wombat"
“keepers" = tomap(null) /* of string */
“length" = 2
“prefix" = tostring(null)
“separator" = “-“
}

random_shuffle

定義したリスト内の値からランダムに1つを選択して生成します。ランダムなリージョンを選択する場合などに活用できます。

random_shuffle = {
“id" = “-“
“input" = tolist([
“eastus",
“eastus2",
“westus",
“westus2",
“westus3",
])
“keepers" = tomap(null) /* of string */
“result" = tolist([
“westus2",
])
“result_count" = 1
“seed" = tostring(null)
}

random_string

英数字(オプションを使用すると特殊文字を含む)のランダムな順列を生成します。
一意のIDを生成する場合はrandom_id、機密性が必要な場合はrandom_passwordを使用してくださいとの記載があります。

random_string = {
“id" = “EETJZR22HaDMNHtc"
“keepers" = tomap(null) /* of string */
“length" = 16
“lower" = true
“min_lower" = 0
“min_numeric" = 0
“min_special" = 0
“min_upper" = 0
“number" = true
“override_special" = “/@£$"
“result" = “EETJZR22HaDMNHtc"
“special" = true
“upper" = true
}

random_uuid

UUIDを生成します。
一意のUUID形式の文字列が必要な場合に使用します。

random_uuid = {
“id" = “9256e618-acf2-b142-0fca-db9ffa4f2e1b"
“keepers" = tomap(null) /* of string */
“result" = “9256e618-acf2-b142-0fca-db9ffa4f2e1b"
}

Random Providerの使い方

TerraformのRandom Providerを使用するには、Terraform ブロック内のrequired_providersでRandom Providerを指定する必要があります。
ランダムな値を付与してリソースを作成する場合は、Resource ブロック内で呼び出して使用します。

※required_providersに項目を追加した後は、terraform initを実行する必要があります。

Random Providerのサンプル

Random Providerのサンプルです。
TerraformのブロックでRandom Providerを指定しています。
各リソースを呼び出して利用しています。

必須項目や確認出来る項目はRandom Providerで各リソースに記載があります。

terraform {
  required_version = “>= 1.0.0"
  required_providers {
    azurerm = {
      source = “hashicorp/azurerm"
      version = “1.44.0"
    }
    random = {
      source = “hashicorp/random"
      version = “>= 3.0"
    }
  }
}

provider “azurerm" {
  features {}
}

resource “random_id" “id-test" {
  byte_length = 8
}

resource “random_integer" “integer-test" {
  min = 1
  max = 50000
}

resource “random_password" “password-test" {
  length           = 16
  special          = true
  override_special = “_%@"
}

resource “random_pet" “pet-test" {
}

resource “random_shuffle" “shuffle-test" {
  input        = [“eastus", “eastus2", “westus", “westus2″,"westus3"]
  result_count = 1
}

resource “random_string" “string-test" {
  length           = 16
  special          = true
  override_special = “/@£$"
}

resource “random_uuid" “uuid-test" {
}

output “ramdom_id" {
  value = “${random_id.id-test}"
}

output “random_integer" {
  value = “${random_integer.integer-test}"
}

output “random_password" {
  value = “${random_password.password-test}"
  sensitive = true
}

output “random_pet" {
  value = “${random_pet.pet-test}"
}

output “random_shuffle"{
  value = “${random_shuffle.shuffle-test}"
}

output “random_string"{
  value = “${random_string.string-test}"
}

output “random_uuid"{
  value = “${random_uuid.uuid-test}"
}

—広告—

TerraformのRandom Providerを使ってAzureストレージアカウントをデプロイ

random_idを使用してストレージアカウント名を生成

Terraformを使用してAzureのストレージアカウントを作成します。
random_idを利用してストレージアカウント名を生成します。
ストレージアカウントと同時に、リソースグループも作成しています。

ストレージアカウントを作成する

random_idの変数を定義します。

resource “random_id" “id-test" {
  byte_length = 4
}

random_idではbyte_lengthが必須の項目となっています。
1-8の範囲で指定します。今回は4としています。

ストレージアカウントのリソースの名前の項目でrandom_idを利用しています。

resource “azurerm_storage_account" “test-sa" {
  name = “sa${random_id.id-test.dec}"

今回はdecを使用するため、random_id.id-test.decとなります。

terraform {
  required_version = “>= 1.0.0"
  required_providers {
    azurerm = {
      source = “hashicorp/azurerm"
      version = “>= 2.0"
    }
    random = {
      source = “hashicorp/random"
      version = “>= 3.0"
    }
  }
}

provider “azurerm" {
  features {}
}

resource “azurerm_resource_group" “rg-test" {
  name = “test-rg"
  location = “East US2"
}

resource “random_id" “id-test" {
  byte_length = 4
}

resource “azurerm_storage_account" “test-sa" {
  name                     = “sa${random_id.id-test.dec}"
  resource_group_name      = azurerm_resource_group.rg-test.name
  location                 = azurerm_resource_group.rg-test.location
  account_tier             = “Standard"
  account_replication_type = “LRS"
  access_tier              = “Cool"

  tags = {
    environment = “Terraform Random Test"
  }
}

random_idを使用して作成されたストレージアカウントのリソース名を確認

Terraformを使って作成した、ストレージアカウントのリソース名を確認します。

作成されたストレージアカウントの確認

ストレージアカウントのリソース名が、sa216174299となっています。

Terraform Showコマンドを使って、random_idで生成された値を確認します。
random_idで生成された値が、ストレージアカウント名に利用されていることが確認できます。

PS C:\terraform\RG> terraform show

# azurerm_storage_account.test-sa:
resource “azurerm_storage_account" “test-sa" {
    access_tier                    = “Cool"
    account_kind                   = “StorageV2"
    account_replication_type       = “LRS"
    account_tier                   = “Standard"
    name                           = “sa2161741299"

# random_id.id-test:
resource “random_id" “id-test" {
    b64_std     = “gNmN8w=="
    b64_url     = “gNmN8w"
    byte_length = 4
    dec         = “2161741299"
    hex         = “80d98df3"
    id          = “gNmN8w" 

Random Providerで生成したランダム値をterraform apply -replaceで更新

TerraformのRandom Providerで生成された値は、意図的に再生成しない限り同じ値のまま保持されます。
値を再生成する方法はいくつかありますが、terraform apply -replace(Terraform v0.15.2以降。以前のバージョンではtaint)を使用して置き換えることができます。

※詳細は公式サイトを確認してください。実行にあたっては十分注意して下さい。

terraform apply -replaceを実行

terraform apply -replaceを実行します。
uuid-testという名前で生成したrandom_uuidリソースを対象に実行しました。
結果を確認すると、id=c721bf56・・・が削除され、id=fb48e05a・・・が新たに生成されています。

PS C:\terraform\RG> terraform apply -replace="random_uuid.uuid-test"

random_uuid.uuid-test: Destroying… [id=c721bf56-6364-79f8-9626-3e0445ac95a1]
random_uuid.uuid-test: Destruction complete after 0s
random_uuid.uuid-test: Creating…
random_uuid.uuid-test: Creation complete after 0s [id=fb48e05a-665b-945c-2db1-1d7d8fdddc91]

 最後に

TerraformのRandom Providerにはさまざまなリソースがあり、多種多様なランダム値を簡単に生成できることが分かりました。
ストレージアカウント作成時にはrandom_idを利用していますが、random_stringを利用することでも作成が可能です。

引き続き、いろいろ試してみたいと思います。

Terraform関連の記事は、こちらで紹介しています。

Terraformの記事一覧

スポンサーリンク