インフラストラクチャとアプリケーション用にそれぞれ別の状態ファイルがあることは意味があります。
これに役立つツールはありますか(内蔵されているかどうか)。一種のテラフォーム状態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
私がもしそこツールに興味があると思います私はterraform rmとterraform import を別の状態ファイルに分割する傾向があります。または状態ファイルをコピーし、必要のないファイルを削除します。あなたがここで管理しているリソースの数に依存します –
d1ll1nger
私はそれがスクリプトに悪いことではないと思います、 'terraform state list'を' rm' + 'import'でループオーバーします... – munchybunch
あまりにも悪くない、ちょっとしたことは、ルートテーブル内の個々のルートなど、インポートできないリソースだと思います(私が最後にチェックしたときは、とにかくできなかった) – d1ll1nger