🍞

フォルダで複数環境管理(エッセンス編) - Terraformのきほんと応用

2022/02/27に公開

ていねいを心掛けたTerraform記事です。スクリーンショット満載でやった気になれます。
Terraformといえばクラウドリソースの作成ですが、この記事ではローカルPC上のリソース作成で済むように工夫しています。
Terraform関連の他の記事は「Terraformのきほんと応用」からどうぞ。

概要

Terraformで悩むのが環境の管理方法です。システムを開発する場合に本番環境のみということは非常に稀で、開発環境やステージング環境などの複数の環境を管理することがほとんどです。
複数の環境を管理する方法として最もメジャーなのが、環境ごとにフォルダをわける方法です。この記事では、フォルダを使った複数環境管理のエッセンスを説明します。
他の記事と同様にローカルPC上で完結するコードを使います。より実践的なコードは「フォルダで複数環境管理(実践編)」を参照してください。

ゴール

環境の管理にフォルダを使って、開発、ステージング、本番の3つの環境にファイルを作成する。
goal

必要なもの

特徴

説明

環境ごとにフォルダを作成し、設定ファイルなどを環境ごとに作成します。
リソース定義はモジュールフォルダに配置し、環境フォルダからモジュールとして参照します。
このような構成とすることで環境ごとの違いを管理しつつ、リソース作成を共通化することができます。

ソース配置イメージ

フォルダ構造とソース配置のイメージは以下の通りです。

terraform/
 ├─── envs/
 │    ├─── develop/
 │    │    ├─ main.tf
 │    │    └─ setting.tf
 │    ├─── staging/
 │    │    ├─ main.tf
 │    │    └─ setting.tf
 │    └─── production/
 │         ├─ main.tf
 │         └─ setting.tf
 └─── modules/
      └─── hello/
           └─ helloworld.tf

環境ごとのソースの例

設定ファイルを環境ごとに作成します。

envs/develop/setting.tf
locals {
  file = {
    content  = "hello world in develop!"
    filename = "../../output/develop/develop.txt"
  }
}

モジュールの呼び出しは環境ごとに定義します。冗長に感じるかもしれませが、特定の環境にのみ存在するリソースなどの管理も行いやすくなります。

envs/develop/main.tf
module "develop_main" {
  source   = "../../modules/hello"
  content  = local.file.content
  filename = local.file.filename
}

まとめ

  • 設定は環境ごとにフォルダをわけて個別に作る
  • リソースの定義はモジュール化して共通化する
  • フォルダ構成でどのような環境があるかわかる
  • 環境フォルダのソース差分を見ることで違いを比較しやすい

サンプルコードによる実演

  1. サンプルコード
    この記事で使用するコードはgithub上に公開しています。

  2. 開発環境のファイル作成
    開発環境はoutput/develop/develop.txtを作成する設定にします。

    envs/develop/setting.tf
    locals {
      file = {
        content  = "hello world in develop!"
        filename = "../../output/develop/develop.txt"
      }
    }
    

    カレントディレクトリを開発フォルダに変更してinit、applyを実行します。

    cd envs\develop
    terraform.exe init
    terraform.exe apply
    

    goal
    設定通りにoutput/develop/develop.txtが作成されています。
    goal
    ファイルの内容も指定の通りです。
    goal

  3. ステージング環境のファイル作成
    同じようにステージング環境のファイルも作成します。

    cd ..\staging
    terraform.exe init
    terraform.exe apply
    

    goal
    設定通りにoutput/staging/staging.txtが作成されています。
    goal
    ファイルの内容も指定の通りです。
    goal

  4. 本番環境のファイル作成
    本番環境も同様です。

    cd ..\production
    terraform.exe init
    terraform.exe apply
    

    goal
    設定通りにoutput/production/production.txtが作成されています。
    goal
    ファイルの内容も指定の通りです。
    goal

感想

この記事で説明するフォルダ構成が、いちばんオーソドックスで実践的なTrraformの使い方だと思います。インフラ育ちでコーディングに慣れていないメンバーがTerraformを使い始めた場合は、この管理方法を薦めることが多いです。

次はこれをやろう

  1. フォルダで複数環境管理(実践編)
  2. ワークスペースの使い方(鋭意作成中)

Terraform関連の他の記事は「Terraformのきほんと応用」からどうぞ。

GitHubで編集を提案

Discussion