2017-08-16 15 views
3

dev/stage/prod環境を管理するためにTerraformをセットアップしたいと思います。インフラストラクチャはすべての環境で同じですが、各環境の変数には違いがあります。理想的なテラフォームワークスペースプロジェクトの構造

Terraform 0.10にワークスペースが導入された今、理想的なTerraformプロジェクト構造はどのようになりますか?インフラストラクチャに名前を付ける/タグ付けするときにワークスペースを参照するにはどうすればよいですか?

答えて

2

静的な環境では、ワークスペース(以前は「環境」)を使用しないことをお勧めします。これは、かなり複雑なものを追加し、追跡するのが難しいためです。

すべての環境で単一のフォルダ構造を使用し、ワークスペースを使用して環境を分離し、ワークスペースに基づく条件付き値を使用して差異を設定できます。実際には(特に2つ以上の環境がネストされた三項ステートメントにつながっている)、これを管理するのは難しいでしょう。

代わりに、静的環境ごとに別々のフォルダを使用し、シンボリックリンクを使用して、すべての環境ですべての.tfファイルを同じに保ち、各環境で違いを提供するterraform.tfvarsファイルを使用することを推奨します。

短期間のレビュー/ラボ環境などの動的環境にワークスペースを使用することをお勧めします。これは柔軟性を高めるためです。私は現在、Gitlab CIでレビュー環境を作成するためにそれらを使用しています。したがって、すべてのブランチには、マニュアルでの統合や探索的なテストに使用できる、オプションで配置されたレビュー環境があります。

1

古い世界では、terraformを実行するときにvar '環境'に入っている可能性があります。これは、.tfファイルで"${var.environment}"として補間します。

ワークスペースを使用して、環境変数に渡す必要、あなたはちょうどあなたが正しいワークスペースにあることを確認した後、あなたが管理したいかについては"${terraform.workspace}"

であなたの.tfファイル内補間がありません

variable "vpc_cidr" { 
    type = "map" 

    default = { 
    dev = "172.0.0.0/24" 
    preprod = "172.0.0.0/24" 
    prod = "172.0.0.0/24" 
    } 
} 

これは、その後、ルックアップ

"${lookup(var.vpc_cidr, terraform.workspace)}" 
を使用してaws_vpcリソースで参照することになりますので、同様にすべての変数は、私は、varmapを使用してお勧めしますワークスペースを作成し、選択の

プロセスは非常に簡単です:

terraform workspace 
Usage: terraform workspace 

    Create, change and delete Terraform workspaces. 


Subcommands: 

    show  Show the current workspace name. 
    list  List workspaces. 
    select Select a workspace. 
    new  Create a new workspace. 
    delete Delete an existing workspace. 

ので、次の操作を実行したいプリプロダクションのための新しいワークスペースを作成するには: terraform workspace new preprod

、あなたが実行した場合計画があれば、リソースがないはずです。これがバックエンドで行うことは、 'preprod'の状態を管理するための新しいフォルダを作成することです。

+1

以前のプロジェクトでは、フォルダを使用して環境を区別しました。そのため、すべてのモジュールを含むmodulesというフォルダがあり、次にプロバイダのフォルダには、環境ごとに別々のフォルダ(DEV、TEST、PREPRD、...)が作成されました。ワークスペースはこれがもう必要でないことを意味しますか?私の意見では、TFウェブサイトの説明が少し曖昧だからです。 – Bjorn121

+0

@ Bjorn121これは私が見つけようとしていることです、彼らのウェブサイトの文書は、これが私が理解していることからまだ推奨されていると言えます。彼らのベストプラクティスのレポも時代遅れです。あなたはまだそれを見つけましたか? –

関連する問題