Terraform v0.10.7モジュールのTerraformリモートステート構成
私はDevOpsチームのためにテラフォームモジュールをまとめています。私たちが使用しているコンポーネントごとに別々のモジュールがあり、異なる環境と要件のモジュールを使用してスタック全体が作成されます。次のように
ディレクトリ階層は次のとおりです。
Terraform
- modules
- module-1 (main.tf, vars.tf, outputs.tf, backend.tf)
- module-2 (main.tf, vars.tf, outputs.tf, backend.tf)
- module-3 (main.tf, vars.tf, outputs.tf, backend.tf)
...
- environments
- qa (main.tf, vars.tf, outputs.tf, bakend.tf)
- stage (main.tf, vars.tf, outputs.tf, bakend.tf)
- prod (main.tf, vars.tf, outputs.tf, bakend.tf)
backend.tf では、私はS3と/resources/mod-1/terraform.tfstate
完全な階層としてバックエンドを指定しています。同じことが環境のbackend.tfにも当てはまります。
任意の環境にterraform get
とを入力すると、指定されたモジュールがすべて取得され、AWSインフラストラクチャに変更が適用され、そのenvのterraform.tfstateがS3の指定された場所に保存されます。
環境に使用されているすべてのモジュールについて、terraform.tfstateも生成され、S3にプッシュされます(envに1回適用されます)。 私はterraform apply
をどのモジュールにも実行していません。
私はそれらのモジュールに適用され、複数を与えないようにしたいS3からすると同時に、これらのモジュールのterraform.tfstateからいくつかのデータを使用し、環境に単一terraform apply
を与えるために計画を持っています。これはどのように達成できますか?
詳細な回答ありがとうございます!しかしenvのmain.tfがなければ何を実行しますか?任意のenvの 'main.tf'ファイルはsourceを持つすべてのモジュールを持ちます。したがって、envsの 'main.tf'は、使用するモジュールのリストを持っています(他の' main.tf'モジュールとは異なります)。 はい私はAWSを使用しており、S3をバックエンドとして使用したいと考えています。しかし、バックエンドとしてS3を設定することを許さないTerraformのバグがあり、 'terraform init'の間にrootユーザーであるにもかかわらず' InvalidClientTokenId'と表示されます。 –
AWS APIキーを正しく設定してください(https://www.terraform.io/docs/providers/aws/) – BMW
本当ですか? AWS APIキーを適切に設定せずにどのように私がこの時点で到達したと思いますか? Terraform Git for Openの問題を参照してください。私はもしあれば回避策を求めた。 (https:// github。com/terraform-provider/terraform-provider-aws/issues/663#issuecomment-334495683) –