[初学者向け]Terraformを学ぼう5! ~Workspacesなど諸々 ~

こんにちは。KOUKIです。

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

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

前回

前回は、Variablesについて学びました。

Min / Max Functions

TerraformのFuncionsには、Min / Maxがあります。これらは、普通のプログラミングでもよく見かける特定の範囲内の最小値 / 最大値を取得する関数です。

これらの関数は、Variablesの中でも呼び出すことができます。lengthは不可なので、不思議ですよね。

パス指定の冴えたやり方 

以前、ローカルのパスをプロパティに指定したことがありました。 

しかし、Terraformの組み込みのValuesを使うと上記の様に直接記述する必要がなくなります。

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

  • path.module is the filesystem path of the module where the expression is placed.
  • path.root is the filesystem path of the root module of the configuration.
  • path.cwd is the filesystem path of the current working directory. In normal use of Terraform this is the same as path.root, but some advanced uses of Terraform run it from a directory other than the root module directory, causing these paths to be different.
  • terraform.workspace is the name of the currently selected workspace.

「path.XXXX」でパスが取得できる様ですね。

これを使って、先ほどのコードを書き換えてみましょう。

文字列の中でコードを展開するには、${} で囲めば大丈夫です。

Mapとlookup Function

TerraformにはMap型とそのkeyからvalueを検索するlookup Functionがあります。

これを使うと環境切り替えなどコードなどを簡単に実装できそうです。

イメージの切り替え例

デフォルトは、devなので開発環境で立ち上がります。

しかし、prodに変更すると本番環境の状態で立ち上がるはずです。

環境の切り替えは、CI/CDパイプラインを作るときに役立ちそうです。

Portの切り替え例

開発/本番環境でPortを分けました。

Workspaces

Terraformには、GitのブランチみたいなWorkspacesという概念があります。

操作コマンド

下記のコマンドで、Workspaceのリストを表示しましょう。

初期の段階ではdefaultのみ存在し、どのWorkspaceを指しているかを示す「*」が確認できます。

そして、WorkSpacesを作成するには、以下のコマンドを実行します。

Workspacesを作成すると「terraform.tfstate.d」フォルダ配下に作成したWorkspaceと同じ名前のフォルダが作成されます。

Workspaceを切り替えるには、以下のコマンドを実行します。

「dev」環境でnoderedコンテナを立ち上げてみましょう。

もう一度、「terraform.tfstate.d」フォルダ配下を確認すると「dev」フォルダ配下に「terraform.tfstate」が生成されたことが確認できます。

Prod環境に切り替えるとprodフォルダ配下に生成されるはずなので、ぜひお試しください。

Reference

Workspaceは、「terraform.workspace」キーワードで取得することが可能です。

このキーワードは、スクリプトの中から使用することができます。

下記のコマンドで、動作確認をしましょう。

lookupの代わりにMapを使おう!

lookupで値参照していた箇所を、MapのKeyアクセスに変更します。

こちらの方が記述が少なくてすみますし、読みやすいですね。

以下のコマンドで、noderedコンテナが作成されるか確認します。

次回

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

Terraformまとめ

ソースコード

main.tf

variables.tf

terraform.tfvars

outputs.tf

locals.tf

Makefile

コメントを残す