2017-10-05 28 views
1

1つのtfstateファイルを使い始めると、かなり時間がかかりました。分割ファイルの分割

は今、それが計画する、本当に遅いですし、私は今、いくつかのtfstateファイル(当社の開発環境のための1つの、一般的な共有インフラストラクチャ用、および本番環境に1つ)に出て分割したいと思います。それはhttps://charity.wtf/2016/03/30/terraform-vpc-and-why-you-want-a-tfstate-file-per-env/Terraform Multiple State Files Best Practice Examplesで説明していますどのよう

これを支援するために、既存のツール(ビルトインかない)はありますか? terraform state mvのようなものですが、tfstatesの間ですか?

+1

私がもしそこツールに興味があると思います私はterraform rm とterraform import を別の状態ファイルに分割する傾向があります。または状態ファイルをコピーし、必要のないファイルを削除します。あなたがここで管理しているリソースの数に依存します – d1ll1nger

+0

私はそれがスクリプトに悪いことではないと思います、 'terraform state list'を' rm' + 'import'でループオーバーします... – munchybunch

+0

あまりにも悪くない、ちょっとしたことは、ルートテーブル内の個々のルートなど、インポートできないリソースだと思います(私が最後にチェックしたときは、とにかくできなかった) – d1ll1nger

答えて

1

インフラストラクチャとアプリケーション用にそれぞれ別の状態ファイルがあることは意味があります。

これに役立つツールはありますか(内蔵されているかどうか)。一種のテラフォーム状態mvのようですが、tfstatesの間?

いいえ、私の知る限り。共有部分(ECSクラスタ、ALB、ネットワーク設定、iamの役割など)を別のプロジェクト/リポジトリに移動します。

状態のバックエンドとしてS3を使用するときには、例えば、インフラストラクチャとアプリケーションの状態の異なるパスを定義することができます。

  • /infrastructure/nonprod/terraform.tfstate
  • /infrastructure/prod/terraform.tfstate
  • /apps/app1/test/terraform.tfstate
  • /apps/app1/uat/terraform.tfstate
  • /apps/app1/prod/terraform.tfstate

アプリケーションをTESTまたはUATにデプロイする場合は、非プロードS3状態へのパスを指定して、terraform initをインフラストラクチャプロジェクトでterraform applyより先に呼び出します。次に、テスタまたはUATパスへのパスを入力して、アプリケーションのterraform設定にterraform initを呼び出します。

理想的には、独自のシェルスクリプトを作成して、アプリのプロビジョニングとデプロイを行うことができます。次に、お気に入りのCIで、パイプラインを作成してインフラストラクチャをプロビジョニングし、必要に応じてアプリを導入することができます。あなたがたとえば、あなたが提供したいか、あなたが展開したいアプリをどのどの環境渡すことができますので、あなたがそれらのスクリプトをパラメータ化することを確認してください:

./my-shared-infrastructure/provision-infrastructure.sh nonprod

./my-app-1/deploy-application.sh uat v1.0