Terraformについて

Infrastructure as Code

Terraformを説明する上で外せない内容がInfrastructure as Codeと呼ばれる、インフラをコードで記述することによってバージョン管理、プロビジョニングの自動化 を行うことが可能となる技術についてである。

Infrastructure as Code(以下: IaC)は先述のようにインフラをコードで管理することでインフラのバージョン管理、プロビジョニングの自動化、構成管理等を行うことが出来る。
これにより、以下のような利点がある。

IaCにはさまざまなものが存在している。
以下は、その一例である。

例えば、ansibleはRedHat社が開発しているOpne Source Software(以下: OSS)であり、Python製のIaCである。
PlayBookと呼ばれるYAMLのファイルに設定情報など構成情報を定義し、定義されたPlayBookに従ってインフラの構築を行うIaCである。
そのため他のIaCに比べ学習が容易であり、導入しやすい
また、エージェントなどをサーバ側にインストールする必要がなく、pythonが動き、SSH接続ができる環境であればどのような環境でも実行することが出来、導入することができる。
一方で、複雑な構成を記述するのに向いていなかったり、条件分岐や反復などが重なると複雑化することがある。

このようにそれぞれのIaCごとに特徴などが存在する。
今回はその中でも『 **Terraform** 』について述べていく。

Terraformとは

Terraformとは、HashiCorpが提供しているIaC(Infrastructure as Code)の一つである。
使用言語はHCL(HashiCorp Configuration Language)という独自言語である。そのため、ansibleのように簡単に学習することはできないが、個人的な感想ではansibleよりも構成が見やすくなれるとインフラ構築や運用がやりやすい言語であると思っている。

terraformによる開発の大まかな流れは以下のような形になる。

  1. HCLにてインフラの設定などを記載する。
  2. terraform planを実行し、環境との差分や実際に変更される部分を確認する。
  3. terraform applyを実行し、環境に変更内容を反映する。

上記のスリーステップを踏むことでインフラの設定や構築を行うことができる。そのためインフラの構築における設定ミスやデプロイメントに関しての負担などが大幅に軽減される。