[初学者向け]Terraformを学ぼう4! ~Variables ~

こんにちは。KOUKIです。

初学者向けに、Terraformの使い方を紹介しています。

今回は、TerraformのVariablesについて学びましょう。

前回

前回は、TerraformのFunctionsについて学びました。

Variables

プログラミング言語にも馴染みがあるVariablesについてここで触れておきます。

Variablesは、以下のように宣言します。

これは、以下の方法で呼び出します。

デフォルト値(1880)を渡してあるのでその値でコンテナが生成されますが、もしデフォルト値がない場合はplan呼び出し時に入力する必要があります。

しかし「-var」オプションを付けて呼び出すことで、これを回避できます。

あるいは、環境変数にセットするのもありです。

TF_VARは接頭辞であり、この命名規則を守る必要があります。

typeもつけられます。

以下は、公式サイトからの抜粋です。

  • string: a sequence of Unicode characters representing some text, like "hello".
  • number: a numeric value. The number type can represent both whole numbers like 15 and fractional values like 6.283185.
  • bool: a boolean value, either true or falsebool values can be used in conditional logic.
  • list (or tuple): a sequence of values, like ["us-west-1a", "us-west-1c"]. Elements in a list or tuple are identified by consecutive whole numbers, starting with zero.
  • map (or object): a group of values identified by named labels, like {name = "Mabel", age = 52}.

Variables Validation

Variablesには、Validationがつけられるようです。

default値を1881にして、テストしてみましょう。

便利ですね。

Variables/Outputs ファイル

これまで実装したVariablesやOutputsは、ファイルを分離することができます。

まずは、以下のファイル名で、ファイルを作成してください。

上記のファイル名にしておくと、plan/applyコマンド実行時に自動的に読み込まれます。

作成後は、main.tfに実装したVariablesとOutputsをそれぞれのファイルに記述するだけです。

plan/applyコマンドを実行して、問題がないか確認してください。

terraform.tfvars

変数を宣言する方法として「.tfvars」も便利です。次のファイルを作成しましょう。

terraform.tfvars」のファイル名にしておくと、自動的に読み込まれます。

これで、「ext_port」変数をどのファイルからも読み取れるようになります。

もともと宣言していたext_portのdefault値を消しましょう。

ちなみに、「–var-file」オプションを指定するとファイルを指定できます。

sensitiveオプション

CI/CDパイプラインなどを構築する際、実行結果としてパスワードなどsensitiveな情報を表示したくない場合があります。

このようなとき、sensitiveオプションが役に立ちます。

output.tfファイルの「IP-Address」に指定したexternalを表示しようとしてエラーになりました。このように、sensitiveを指定すると重要な情報を外に出せなくなるので便利です。

このエラーを回避するために、outputにもsensitiveオプションを指定します。

local-exec Provisioner

terraformが動作するMachine上で、処理を実行したいときがあります。例えば、特定のディレクトリを作成したいといった場合ですね。

このような時に、local-exec Provisionerが役に立ちます。

ローカル上にnoderedvolディレクトリを作成し、権限を付与しました。

このコードを実行してみましょう。

sudoコマンドを使用しているのでPasswordを聞かれますが、ローカルPCのパスワードを入力すればOKです。

「terraform apply」を実行した時、ローカルに「noderedvol」ディレクトリが作成されました。

このディレクトリをコンテナにマウントしたい場合は、docker_containerリソースにvolumesオプションを設定します。

Local Values

Local Valuesもよく使うので、ここで学んでおきましょう。

詳しく説明する前に、ext_port変数number typeからlist typeに変更し、コンテナを複数立ち上げられるようにします。

この状態で、planを実行します。

ext_portとcontainer_countに指定した数(3)は同じなので、特に問題なくコマンドが実行できました。しかし、container_countを4にするとどうなるでしょうか。

この様にエラーになりました。

次に、length関数を使って、ext_portに格納された値数分だけコンテナが作られるようにしてみましょう。

一見問題なく見えますが、コマンドの実行はエラーになります。

Variablesでは、関数を使った処理ができないのです

これを解決するために、Local Variablesを使います。

Local Variablesを参照するには、「local」キーワードを使用します。

この状態でもう一度、planコマンドを実行します。

OKですね。

ちなみに、Local Variablesも外出しできます。

次回

次回は、Workspaceなどについて学びましょう。

Terraformまとめ

ソースコード

main.tf

variables.tf

terraform.tfvars

outputs.tf

locals.tf

Makefile

コメントを残す