ランダム文字列を作成する方法 – Terraform –

はじめに

Terraformでランダム文字列を作成することができます。その手順について記載します。
ランダム文字列はパスワードを作成する場合などに使用します。
ランダム文字列を生成する場合は、Terraformのリソースであるrandom_stringを使用します。
Terraformのマニュアルも併せて参考にしていただけると、作業がスムーズに進むと思います。
(参考情報)
random_string – Terraform –

random_string

(引数)
length : 文字列の長さを数値で指定します。必須。
upper : 半角大文字英字を含むかどうか。*1
lower : 半角小文字英字を含むかどうか。*1
number : 数字を含むかどうか。*1
special : 記号を含むかどうか。*1
*1 任意。設定値はtrue/false。デフォルト値はtrue。
(注意事項)
下記の引数を全てfalseに設定することはできません。
– upper
– lower
– number
– special

手順概要

(基礎編)
各引数の生成文字列を確認します。対象の引数をtrueに設定して、残りの引数をfalseに設定します。
確認項目は下記の4項目です。
– upper
– lower
– number
– special
(応用編)
複雑なパスワードポリシーを想定して、ランダム文字列を生成します。
下記のパスワードポリシーを例として、手順を記載します。
– パスワードの桁数 : 16桁
– 先頭の文字 : 半角大文字英字
– 最後の文字 : 記号
– 中間の文字 : 半角大文字英字,半角小文字英字,数字

 

1. 基礎編

1.1. tfファイルを作成する。

# cat ec2.tf
provider "aws" {
  region     = "ap-northeast-1"
}

resource "random_string" "default" {
  length = 16
}

resource "random_string" "upper" {
  length  = 16
  upper   = true
  lower   = false
  number  = false
  special = false
}

resource "random_string" "lower" {
  length  = 16
  upper   = false
  lower   = true
  number  = false
  special = false
}

resource "random_string" "number" {
  length  = 16
  upper   = false
  lower   = false
  number  = true
  special = false
}

resource "random_string" "special" {
  length  = 16
  upper   = false
  lower   = false
  number  = false
  special = true
}

resource "aws_instance" "ec2" {
  count         = 1
  ami           = "ami-eb50cd8d"
  instance_type = "t2.micro"
  key_name      = "aws_v2"

  tags {
    type        = "terraform"

    random_default   = "${random_string.default.result}"
    random_number    = "${random_string.number.result}"
    random_upper     = "${random_string.upper.result}"
    random_lower     = "${random_string.lower.result}"
    random_special   = "${random_string.special.result}"

  }
}

1.2. Terraformを初期化する。

# terraform init
Initializing provider plugins...

1.3. Terraformの計画を立てる。

# terraform plan -out=tfplan
Refreshing Terraform state in-memory prior to plan...

1.4. インスタンスを作成する。

# terraform apply "tfplan"
tags.%:                       "" => "6"
  tags.random_default:          "" => "v4af8k3]7b8z@8R5"
  tags.random_number:           "" => "7203888510025405"
  tags.random_upper:            "" => "GWFHEGDFKLRUAUEN"
  tags.random_lower:            "" => "hebamcxlaagctcfh"
  tags.random_special:          "" => "@)@(}*-{?#++><=&"   tags.type:                    "" => "terraform"

1.5. ランダム文字列を確認する。

# terraform show
  tags.% = 6
  tags.random_default = Dl4ph_oyKJgnfiZ_
  tags.random_number = 7567771841281505 
  tags.random_upper = OMVZCLVKOGDHFXUE 
  tags.random_lower = wbyrjrsotvmirafv
  tags.random_special = @)@(}*-{?#++><=&
  tags.type = terraform

2. 応用編

2.1. tfファイルを作成する。

# cat ec2.tf
provider "aws" {
  region     = "ap-northeast-1"
}

resource "random_string" "upper" {
  length  = 1
  upper   = true
  lower   = false
  number  = false
  special = false
}

resource "random_string" "mix" {
  length  = 14
  upper   = true
  lower   = true
  number  = true
  special = false
}

resource "random_string" "special" {
  length  = 1
  upper   = false
  lower   = false
  number  = false
  special = true
}

resource "aws_instance" "ec2" {
  count         = 1
  ami           = "ami-eb50cd8d"
  instance_type = "t2.micro"
  key_name      = "aws_v2"

  tags {
    type           = "terraform"

    random_pattern = "${random_string.upper.result}${random_string.mix.result}${random_string.special.result}"

  }
}

2.2. – 2.4. 基礎編の手順を参照。

2.5. ランダム文字列を確認する。

# terraform show
  tags.% = 2
  tags.random_pattern = VrjbyGEZdRod5v0[
  tags.type = terraform

まとめ

Terraformの発展に貢献できれば幸いです。

コメントを残す