Terraform
https://gyazo.com/591adac080a9a4db320f53b8be0e478b
概要
インフラの構成をソースコードとして管理するためのツール
※あくまでもインフラ構成を管理するのであって、サーバー内のユーザー設定やライブラリのインストールなどはできない]
※もし、サーバー内も管理したい場合は、imageでデプロイするか、ansibleなどを併用して管理していく必要がある
仕組み
設定ファイルを記述することで、terraformコマンドでCloud Serviceに対して操作を行うことができる
https://gyazo.com/ae86dbfe2fea75a898234f348f2f1dbe
構成要素
Working Directory
main.tf
ここに何を書くかは、チームの方針によってまちまちだが、主にプロバイダーの定義(やモジュールの呼び出し)に使われている。
code:yml
directory
├── main.tf :リソース定義(ファイル名は任意)
├── providers.tf :プロバイダ設定
├── variables.tf :変数設定
└── terraform.tfstate :リソースの現状を示すファイル(自動作成)
.trraform/terraform.tfstate
対象クラウドに適用した最新の設定情報(リソースの現状を示すファイル)が全て記載されており、非常に重要なファイル。
.trraform/modules
別ディレクトリ/リモートにあるtfファイルを関数が配置される場所。module機能を使うためにある。
.trraform/plugins
terraform init をすることで生成されるプロバイダーのファイル群。
ローカルPC上の Terraform がリモートのクラウドを操作するためには、対象のクラウドごとに用意された provider ツールを使用する必要があるため、必要なファイル群となる。
.trraform/environment
本番環境、staging、開発環境等の環境毎に構成が若干異なる際に使う仕組み。(2017から登場した)
Backend
対象クラウドに適用した最新の設定情報をチーム間で共有できるようにするための場所。(Backendの設定を行っておくと、AWS S3 などのストレージ領域に保存しておくことができる)
.trraform/terraform.tfstateが個人のローカルPCに入った状態だと、開発効率の悪化 及び 属人性が高まってしまうので、チーム開発では割と必須の機能。
Hashicorp
Cloud Serviceを操作する上で、HashiCorp社が提供しているProviderを使う必要があり、そのProividerが存在する場所。
main.tfとかにProviderを記述することで、HashiCorp社のプログラムからProviderを引っ張ってきて、.trraform/plugins配下に格納される感じ。
Targets
Terraformの操作対象となるCloud Serviceのこと。
尚、操作の対象が「ローカルPC内の仮想環境」なのか「Cloud service」なのかが、Vagrantと異なる点 参考