こんにちは、かびらです。
今回はTerraformについて解説します。
Terraformとは?

Terraformは、サーバーやネットワークなどのインフラを、コードで自動的に構築・管理できる仕組みです。
このような仕組みを、「Infrastructure as Code」を略して、「IaC(アイ・エー・シー)」と呼びます。
TerraformはAWSだけでなく、GCPやAzureなど、複数のクラウドに対応しています。
Terraformでインフラを管理する仕組み

Terraformは、開発者のコマンド実行や、CI/CDパイプラインに組み込んで実行することができます。
Terraformを実行すると、コードに書かれた内容をもとに、AWS上のインフラを自動で構築・変更します。
Terraformは、Stateファイルに現在のインフラの状態を記録しておき、次に変更を加えるときにその差分を判断します。
このように、Terraformはコードと実際のAWSの状態を見比べながら、インフラを安全に管理しています。
Terraformを採用した理由

当初、IaCツールとしてTerraformとAWSのCloudFormationのどちらを使うかで悩んでいました。
それぞれを比較検討した結果、最終的にTerraformを採用しています。
ここでは、その理由を3つの観点から見ていきましょう。
対応範囲
まずは対応範囲です。
Terraformは、AWS以外にもGCPやAzureなど、複数のクラウドに対応しています。
一方のCloudFormationは、AWS専用のツールです。
Luxucomでは、将来的にマルチクラウド展開も視野に入れているため、Terraformの方が柔軟だと判断しました。
実装
次に実装面です。
Terraformは、シンプルで読みやすいHCL構文を採用しています。
一方のCloudFormationは、JSONやYAMLで定義しますが、やや複雑です。
初めてIaCツールを導入することもあり、初学者でも扱いやすいTerraformを選びました。
運用
最後に運用面です。
Terraformは、GitHub Actionsと相性が良いです。
一方で、CloudFormationはAWSサービス内で完結します。
Luxucomでは、すでにGitHub ActionsでCI/CD環境を構築していたため、そのまま統合できるTerraformを採用しました。
このように、対応範囲・実装のしやすさ・運用のしやすさの3つの観点から、LuxucomではTerraformを採用しています。
Terraformと関連するアーキテクチャ

Luxucomでは、GitHub ActionsとTerraformを連携させて、インフラの構築や更新を自動化しています。
開発者がコードをプッシュすると、GitHub ActionsがCIを実行し、Terraformを使ってAWSの設定を確認します。
その後、マージ時にCDが動き、Terraformが変更内容をAWSに反映します。
これにより、アプリの更新だけでなく、インフラの変更も安全かつ自動で行えるようになっています。
Terraformを使って良かった点

Terraformを導入して、まず感じたのはリリース作業が圧倒的に楽になったことです。
これまで手動で行っていたインフラ変更を、CI/CDの仕組みに載せて自動化できるようになりました。
また、インフラの情報をコードで管理できるようになったことで、構成を正確に把握しやすくなりました。
さらに、試験環境の構築や破棄も、ボタンひとつでできるようになり、検証の効率が大きく上がりました。
Terraformを使って難しかった点

Terraformを使ってみて、最初に苦労したのはHCL構文に慣れることでした。
独特の書き方なので、最初のうちはエラーの原因を見つけるのに時間がかかりました。
また、Terraformのフォルダ構成や実行の流れを理解するのにも少し時間がかかりました。
どこに何を定義して、どの順番で実行すればいいのかを掴むまで、試行錯誤が必要でした。
ただ、いずれの課題もChatGPTに尋ねながら一つずつ解決していきました。
今ではその経験がしっかり活きていて、リリース作業も大幅に楽になりました。
結果的に、Terraformを導入して本当に良かったと感じています。
さいごに
今回は、Luxucomのインフラを支えるTerraformについて解説しました。
Terraformを使うことで、サーバーやネットワークなどの構成をコードで管理でき、GitHub Actionsと組み合わせることで、インフラの変更も自動化できるようになっています。
次回は、CDの中でアプリのイメージを管理しているECRについて詳しく解説します。



