Terraform入門：インフラをコードで管理しよう！



## Terraformとは？

**Terraform**は、HashiCorp社が提供する**Infrastructure as Code (IaC)**ツールの一つです。IaCとは、インフラの構築や設定を手動ではなく、**コード**として記述・管理する手法のことです。Terraformを利用することで、AWS (Amazon Web Services) のEC2やRDSといったリソースを、AWSマネジメントコンソールを操作することなく、コードで定義し、自動的に構築・管理できます。

Terraformの特徴として、**宣言的**な記述方式を採用している点が挙げられます。これは、インフラの「あるべき状態」を記述するだけで、具体的な構築手順を意識する必要がないということです。例えば、RDSのインスタンスを構築したい場合、必要な設定（インスタンスタイプ、ストレージサイズなど）を記述するだけで、Terraformが自動的にその状態を実現してくれます。

また、Terraformは**マルチクラウド**に対応しており、AWSだけでなく、Google CloudやAzureなど、複数のクラウドプロバイダーのインフラを単一のツールで管理できるという大きな利点があります。

## Terraformのメリット

Terraformを利用することには多くのメリットがあります。

*   **コードによるインフラ管理とバージョン管理**: インフラの構成を `.tf` ファイルといったコードで管理するため、**Gitなどのバージョン管理システム**を利用して変更履歴を追跡したり、以前の状態に戻したりすることが可能です。
*   **GUIレスでのインフラ変更**: AWSマネジメントコンソールなどのGUIを操作することなく、コードの変更とTerraformのコマンド実行だけでインフラの変更が可能です。
*   **コードの共有と再利用**: 作成したインフラ構成のコードは**共有**したり、**再利用**したりすることができます。これにより、同じような構成を何度も記述する手間が省けます。Terraformには**モジュール**という再利用可能な構成単位も存在します。
*   **デプロイの自動化と高速化**: インフラの構築・変更作業を**自動化**できるため、手作業による設定ミスを減らし、迅速かつ安定した環境構築が可能になります。
*   **設定ミスの削減**: コードとしてインフラを定義することで、手作業による**ヒューマンエラーを削減**し、より安定した環境を提供できます。
*   **環境の容易な複製**: テスト環境、ステージング環境、本番環境など、**同じ構成の環境を簡単かつ迅速に複製**できます。
*   **災害復旧の容易化**: 環境をコードで管理しているため、**災害からの復旧作業を迅速に行う**ことができます。
*   **不要なリソースの自動削除**: Terraformは、コードで定義された状態に基づいてインフラを管理するため、**不要になったリソースを自動的に削除**することが可能です。これにより、リソースの削除忘れによるコスト増を防ぎます。
*   **CI/CDとの連携**: インフラの構築・変更をコードで行うため、**CI/CD (継続的インテグレーション/継続的デリバリー)** パイプラインに組み込みやすく、開発から運用までの流れをスムーズにできます。
*   **コードがドキュメントとして機能**: インフラの構成がコードとして明確に記述されるため、**ドキュメントとしての役割**も果たし、設定内容の把握や変更の追跡が容易になります。
*   **マルチクラウド対応**: AWS、Google Cloud、Azureなど、**複数のクラウドプロバイダー**のインフラをTerraform一つで管理できるため、クラウド間の移行やマルチクラウド戦略を採用する際に役立ちます。
*   **活発なコミュニティ**: Terraformは**オープンソース**であり、活発な開発者コミュニティと利用者が存在するため、情報やサポートが豊富です。

## Terraformの使い方の順番

Terraformを利用したインフラ構築の一般的な流れは以下の通りです。

1.  **TerraformとAWS CLIのインストール**: まず、Terraformの実行ファイルとAWSのサービスをコマンドラインから操作するための**AWS CLI (Command Line Interface)** をインストールします。
2.  **AWS CLIの設定**: AWS CLIを利用するために、**アクセスキーID**と**シークレットアクセスキー**を設定します。IAMユーザーを作成し、必要な権限を付与した上で、これらの認証情報を設定します。
3.  **.tfファイルの作成**: インフラの構成を記述する**`.tf` 拡張子のファイル**を作成します。通常、プロバイダーの設定（どのクラウドを利用するか）、リソースの定義（EC2インスタンスやRDSインスタンスなど）などを記述します。
    *   **プロバイダーブロック**: 利用するクラウドプロバイダー（例：AWS）やリージョンなどを設定します。
    *   **リソースブロック**: 構築・管理したいインフラリソースの種類や設定を記述します。
4.  **Terraform init コマンドの実行**: 作成した `.tf` ファイルがあるディレクトリで、ターミナルから `terraform init` コマンドを実行します。このコマンドは、必要なプロバイダーのダウンロードやバックエンドの設定など、Terraformの初期化処理を行います。
5.  **Terraform plan コマンドの実行**: `terraform plan` コマンドを実行すると、現在の構成と `.tf` ファイルに記述された構成を比較し、どのような変更（作成、変更、削除）が実行されるかを確認できます。実際にリソースが変更される前に、このプランを確認することで、意図しない変更を防ぐことができます。
6.  **Terraform apply コマンドの実行**: `terraform apply` コマンドを実行すると、`terraform plan` で示された変更が実際にAWS環境に適用されます。実行前に確認を求められるため、内容を再度確認してから `yes` を入力します。
7.  **TF Stateファイルの管理**: Terraformは、管理しているリソースの現在の状態を**TF Stateファイル** (`terraform.tfstate`) に保存します。このファイルは非常に重要であり、Terraformがリソースの変更を追跡するために使用されます。チームでTerraformを利用する場合は、このStateファイルをS3などのリモートストレージで管理することが推奨されます。
8.  **Terraform destroy コマンドの実行**: 不要になったインフラリソースを削除したい場合は、`terraform destroy` コマンドを実行します。このコマンドを実行すると、Terraformが管理している全てのリソースを削除するためのプランが表示され、確認後に削除が実行されます。
9.  **モジュールとデータソースの活用**: より複雑なインフラ構成を管理する際には、**モジュール**を利用してコードを再利用可能な単位に分割したり、**データソース**を利用して既存のAWSリソースの情報を取得し、Terraformの構成に利用したりすることができます。

## 参考URL

*   【Terraform 入門】Terraform を使って AWS EC2 や RDS を構築しよう Learn Terraform in 30 Minutes: [https://www.youtube.com/watch?v=n2WPi27Auuk](https://www.youtube.com/watch?v=n2WPi27Auuk)
*   【Terraform入門編】Terraformとは？その活用法について解説。: [https://www.youtube.com/watch?v=fg1xWZA1-EU](https://www.youtube.com/watch?v=fg1xWZA1-EU)
*   【Terraform講座-1】はじめに/IaCのメリット/AWSで利用されるIaCツール /Terraform概要/リソースの作成、変更、削除: [https://www.youtube.com/watch?v=QmW4jQ7nLoc](https://www.youtube.com/watch?v=QmW4jQ7nLoc)
*   【業務レベル】terraformを使ってAWSにリソースを作成する【インフラエンジニア】【セキュリティエンジニア】【フリーランス】: [https://www.youtube.com/watch?v=WmnOE_4ZtyU](https://www.youtube.com/watch?v=WmnOE_4ZtyU)