なぜterraformなのか

nomoa,infraTerraform

IaCを読んでさらに仕事でもterraformを数ヶ月使用してみた。自分だけがterraformを使っている状況では意味がないので布教する際に何を根拠にterraformを使うべきなのかまとめる。

一般的に述べられているIaCのメリット

terraformを実際に使用してみた視点から以下に述べる

CLIから構成を変更できるのでCI/CDの導入が可能について

Github Actionsにてterraformを利用することによってPRごとに異なるテスト環境を作成することができた。CIから作成するように記述するとコード化されることを強制されるので人間が操作する余地がない。

gitによるバージョン管理

変更履歴が保存されていることによって他人によって修正された箇所が理解できる。

コードの共有・再利用

全く同じ構成であれば再利用できるが実際はプロジェクトの予算、要件によって異なるので想像してたようには再利用はできない。小さな単位(vpc, ses)だけmoduleとして切り出して必要な部分だけうまく再利用することはできる?

コード化された手順を第三者が検証できる

第三者が検証する必要のあるほどコンプライアンスが厳しいシステムを作成したことがないためわからない。PRを通して第三者がチェックできるという文脈では役に立っている。

なぜterraformなのか

以下に詳しく書いてみる。

冪等性

従来の方法

宣言的フォーマットの場合

docker-composeなどの宣言的フォーマットを備えたツールで修正した場合ymlファイルを修正してインフラを修正する。再作成するときに、Containerが持っている状態は再作成される。 何かしら(OS, packageなど)アップデートされて動かなくなってい場合この時点で気づいて直すことができる。

など従来の方法より煩雑になっているのは間違いない。
が、アプリケーションコードをproductionへ手作業で反映しないようにinfraもコード管理することによる恩恵を受けることができる。

イミュータブルサーバーアプローチ

本番環境前に様々なテスト可能、実際のデータを書き込むテストはできない。そもそも一回deployすると次の新規開発が無いようなprojectでは効果は薄い?

awsのインフラを表現できるクラウド利用に適したIaCツール

実務で2パターンほどinfra構築したがawsにあってterraformにない機能はなかった。fargate spotが発表された際にもすぐ対応されたことからも「結局コンソール画面から操作している」といったことには大抵の場合はならない。

最後に

terraform結構使えるので積極的に使ってゆく。

© nomoa.devRSS