LoginSignup
7
0

More than 3 years have passed since last update.

Terraformでの環境分割について

Posted at

はじめに

こんにちは、インフラエンジニアをしています。@hayaosatoです。
現在ディップではインフラのクラウドリソースの管理にTerraformを取り入れようと日々検証を行なっております。
その中でTerraformの環境分割はどのようにやるのか、自分なりに考えてみたので共有しようと思います。
参考程度に読んでいただけると幸いです。
よろしくお願い致します。

結論

早速結論ですが、Terraformの環境分割はModuleを用いて行いました。
ディレクトリ構成は以下のようになっております。
こちらのディレクトリ構成はこちら(https://qiita.com/shogomuranushi/items/e2f3ff3cfdcacdd17f99)を参考にさせていただきました。

├── provider.tf
│
├── production
│   ├── serviceA
│   │   ├── variables.tf
│   │   ├── outputs.tf
│   │   └── main.tf
│   ├── serviceB
│   └── serviceC
├── staging
├── development
│
├── examples
│   ├── variables.tf
│   ├── outputs.tf
│   └── main.tf
│
└── modules
    └── resourceA
        ├── main.tf
        ├── outputs.tf
        └── variables.tf

なぜこうしたか

Terraformの環境分割には大きくWorkspace, Module, ディレクトリ分割があると思います。
今回、Moduleでの環境分割を選定した理由としては、
誤った環境へのリソース変更の適用を避けるためです。
terraformでのリソース変更では破壊的変更も起きるので一歩間違えると即、サービス障害となってしまいかねません。
なので環境分割方式の選定時はこれだけは担保しようと思っていました。
もちろん、気をつけなければどの環境分割方法でもミスは起こりますし、どの環境方法でもミスを起こさない事も可能です。
その中で比較ミスを起こしにくいものとして選定しました。

なぜModuleにしたのか

上記のように、環境をディレクトリ分割する事で、どの環境にいるのかがプロンプトに常に表示されるので
Moduleディレクトリ分割にしようと思いました。
その中で、Moduleを利用した方が共通部分のソースコード管理がしやすいのでModuleを利用することにしました。

サーバレス

現在は管理しているリソースの種類が少ないので現状の構成となっておりますが、
今後サーバレスなアーキテクチャを管理するとなると現状の構成のままでは上手くいかないのではないかと思います。
サーバレスなアーキテクチャはアプリケーションのソースコードと親和性が高いので、
現状の構成のようにインフラ定義のみのリポジトリに配置するよりDockerfileのような感じで
アプリケーションのリポジトリに配置するのが良いのではないかと思っています。

最後に

今回の構成は現状のリソース管理における管理構成として考えてみました。
今後のリソース状況によってはかなり変化するのかなと思っています。
引きづつきどのように管理することがより楽な運用を実現するか、考えて行きたいと思います。

参考

7
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
0