Terraformとは
TerraformはHashiCorpという会社が開発したIaCツール(Infrastructure as Code)です。
Terraformを使うことでAzureなどのクラウドリソースをコード化することができ、バージョン管理や再利用、共有などを行うことができます。
インフラをコード化することで以下のようなメリットがあります。
- 効率的にインフラ環境を構築できる:コード化が完了していればTerraformを実行するだけで、定義されたリソース設定を基に構築してくれます。
- 人的ミスの削減:Terraformが自動的にインフラを構築してくれるため、ヒューマンエラーを防ぐことができます。
- 保守性の向上:インフラがコード化されたことによりGithubなどでバージョン管理を行うことができるようになりました。これにより、大規模な構成でもメンテナンスが行いやすくなります。
Terraformの基本的なワークフロー
Terraformでの一般的なワークフローは以下のようになります。
- Write(コードを書く): 構築したいリソースをコードで定義します。
- Plan(変更内容の確認):クラウド上のインフラと構成と、リソースを定義したコードを比較します。次のステップであるApply(変更の適用)を実行した際にリソースが作成されるのか、更新されるのか、または破棄されるのか教えてくれます。「terraform plan」コマンドで実行されます。
- Apply(変更の適用):コード化されたリソースの設定をクラウド上に適用します。「terraform apply」コマンドで実行されます。
どうやって書くのか
Terraform ではHCL(HashiCorp Configuration Language)と呼ばれる構文で定義リソースの設定を記述します。
以下の例は、HCLでAzureのリソースグループを定義しているコードです。
resource "azurerm_resource_group" "example" {
name = "example-resources"
location = "West Europe"
}
resource
というブロックの中に、リソース名とリージョンを指定しています。
どうやってクラウド上のリソースとコードを比較しているのか
Terraformではterraform.tfstate
というファイルにリソースの状態がJSON形式で保存されています。
terraform plan
を実行した際は、terraform.tfstate
とコード化されたリソース設定を比較することで、リソースがどう変更されるのかわかるようになっています。terraform plan
が実行できるのはterraform.tfstate
があるおかげということですね。
terraform.tfstate
はterraform apply
を実行するたびに更新されるので、常に最新の状態を保つようになっています。
デフォルトではローカルに自動生成されますが、クラウド上に保管することが推奨されています。
おわり
業務でTerraformを使いそうなので簡単にまとめてみました
ちなみにHashiCorpという名前は創設者であるMitchell Hashimotoさんの名前が由来しているそうです