🐡

IaCツールとは?Terraform等のIaCツールを使うメリット・デメリットを紹介

2023/01/08に公開

内容

TerraformやCrossplaneといったIaCツールについて紹介します。

対象読者

  • TerraformやCrossplaneといったIaCツールを使ったことがない
  • IaCツールを少しだけ使ったことがあるが、いまいちメリットが理解できていない

IaCツールとは

Infrustructure as Codeの略で、AWSやGCP、Kubernetes・MySQLなどのリソースをコードで管理する技術のこと。
AWSでサーバーを作成・更新したい場合、IaCツールがないと、AWSのコントロールパネルから直接EC2を作成・更新しなければならないが、IaCツールを使うことによって、yamlファイル等をgithubにpushするだけでリソースを作成・更新できるようになる

IaCツールのメリット・デメリット

IaCツールを使うことで多少のデメリットはあるものの、多くのメリットを享受できます。

メリット

IaCツールを導入すると、ソースコードでインフラリソースを管理できるようになります。それによって、さまざまな恩恵を受けることができます。

リリース前にレビューが受けられる

IaCツールがない場合、AWS上になにかリソースを追加する場合、ブラウザでAWSコンソールから作成しなければなりません。
その場合、他人のレビューを受けるためには、スクリーンショットを撮り、作業フロー(手順書)をドキュメント化しなければなりません。これはお世辞にも効率的とはいえません。
しかし、IaC化されていれば、アプリケーションコードの修正と同じフローで、ソースを修正し、github上でレビューを行うことができるようになります。

複数環境を簡単に作成・管理できる

IaCツールを導入すると、Production環境とStaging環境、Test環境などの複数環境が簡単に作成できます。
Network構成からWebサーバー、DBサーバーまでソースで管理されているため、同じソースを他のAWS環境に適用すれば、Production環境と全く同じStaging環境を作成することが可能です。(もちろん、StagingのみCPUやメモリなどのリソースを変更することも簡単です。)

リソース間の関係が可視化できる

IaCツールを導入すると、

  • セキュリティグループAは、リソースBとリソースCに使われている
  • リソースBはデータベースDに紐づいている
  • データベースDはネットワークEに構築されている

などのリソース間の関係が簡単に把握できます。
そのため、リソースの関係を可視化するために構成図を作成・運用する必要性がなくなります。(ドキュメントを作る・運用するというのは大きなコストなため、IaCツールを導入する大きなメリットの一つになります)

誰かがリソースを変更したら、(自動で)引き戻せる

AWS上で誰かが間違えてリソースを変更した場合、IaCツールを導入しているとその変更を検知することができます。(ソースで管理している状態とAWS上の状態が異なるため)
また、CrossplaneのようなControlplane型のIaCツールを使っていると、その変更を自動で検知し、ソースコードと同じ状態に自動で引き戻してくれます。

デメリット

IaCツールを導入することで発生するデメリットは大きくわけて2つです。

学習コストが高い

IaCツールの代表格Terraformを使う場合、Terraform用の言語(HCL)を覚えなければなりません。 また、stateファイルの管理など、Terraform独自の構造も覚えなければならないため、IaCツールを導入する際の学習コストは検討した方がいいでしょう。

IaCツールを動かす環境を用意しないといけない

Terraformを使う場合はCI等でterraform cliを実行する。Crossplaneを使う場合はCrossplaneが動作するKubernetesクラスターを用意するなど、IaCツールの動作環境を用意しなければなりません。
また、IaCツールもver upしていくため、IaCツールのverup等、運用負荷も考慮する必要があります。

まとめ

IaCツールのメリット・デメリットを紹介しましたが、個人的にはIaCツールは現代のweb開発で必須のツールだと思っています。そのため、チーム開発を行う場合は必ずIaCツールの導入を検討することをおすすめします。

note

勉強法やキャリア構築法など、エンジニアに役立つ記事をnoteで配信しています。

https://note.com/ring_belle/membership

Discussion