(とすることによりデフォルトはterraform.tfvars
ファイル)。
私たちはAntonのanswerと似たようなことをしますが、sedを使ってテンプレートを使用すると複雑になりません。だから、基本的な例として、あなたの構造は次のようになります。ここでは
$ tree -a --dirsfirst
.
├── components
│ ├── application.tf
│ ├── common.tf
│ ├── global_component1.tf
│ └── global_component2.tf
├── modules
│ ├── module1
│ ├── module2
│ └── module3
├── production
│ ├── customer1
│ │ ├── application.tf -> ../../components/application.tf
│ │ ├── common.tf -> ../../components/common.tf
│ │ └── terraform.tfvars
│ ├── customer2
│ │ ├── application.tf -> ../../components/application.tf
│ │ ├── common.tf -> ../../components/common.tf
│ │ └── terraform.tfvars
│ └── global
│ ├── common.tf -> ../../components/common.tf
│ ├── global_component1.tf -> ../../components/global_component1.tf
│ ├── global_component2.tf -> ../../components/global_component2.tf
│ └── terraform.tfvars
├── staging
│ ├── customer1
│ │ ├── application.tf -> ../../components/application.tf
│ │ ├── common.tf -> ../../components/common.tf
│ │ └── terraform.tfvars
│ ├── customer2
│ │ ├── application.tf -> ../../components/application.tf
│ │ ├── common.tf -> ../../components/common.tf
│ │ └── terraform.tfvars
│ └── global
│ ├── common.tf -> ../../components/common.tf
│ ├── global_component1.tf -> ../../components/global_component1.tf
│ └── terraform.tfvars
├── apply.sh
├── destroy.sh
├── plan.sh
└── remote.sh
を、あなたの計画を実行/ラッパーシェルスクリプトがディレクトリにcd'ingとterraform get -update=true
を実行しているようなものを扱うルートレベルから破壊する/適用されますが、また、フォルダにterraform init
を実行すると、S3用の独自の状態ファイルキーが得られ、各フォルダの状態を個別に追跡できます。
上記のソリューションには、物事に共通のインターフェイスを提供するためのリソースをラップする汎用モジュールがあります(たとえば、EC2インスタンスには入力変数やプライベートRoute53レコードに応じて特定のタグが付けられます) "
これらのコンポーネントには、同じフォルダにTerraformによって適用される一連のモジュール/リソースが含まれています。 ELB、アプリケーションサーバ、データベースをapplication.tf
にして、それをある場所にシンボリックリンクすることで、Terraformで制御する場所を1つにすることができます。場所のリソースに差異がある場合は、それらを切り離すことになります。上記の例では、staging/global
にはglobal_component2.tf
が存在し、プロダクションには存在しません。これは、環境へのインターネットアクセスを防止するために、一部のネットワーク制御などの非本番環境でのみ適用されるものである可能性があります。
本当のメリットは、開発者が望むTerraformコードを生成するテンプレート作成ステップを行うのではなく、開発者用のソース管理ですべてを簡単に見ることができることです。
また、環境内の唯一の違いは、場所内のファイルにあるterraform.tfvars
ファイルのDRYにあり、各フォルダがほぼ同じであるため、変更をテストするのが簡単になります。
この方法では、各フォルダ内またはルートからterraformを実行しますか?それに応じて、状態ファイルがルートパスまたは各フォルダに格納される可能性があるため、私は尋ねています。 –
親フォルダからTerraformを実行することはできません。 Terraformは、現在のディレクトリにあるものだけで動作します。それが起きると、私たちが実行したい場所に 'cd 'してそこから' terraform' CLIコマンドを実行するレポのルートにあるいくつかのヘルパースクリプトがあります。 – ydaetskcoR
はい、私はいつもそうすることができます... 'terraform plan path/to/something' –