Terraform超入門

はじめに

こんにちは!TechBull 運営チームの富田(@Cooking_ENG )です!SREとして働く中、業務でTerraformを使ってAWSのリソースを作成したり、DataDogの設定を行ったりする機会が増えてきたので、アウトプットとして、Terraformの入門をブログにまとめたいと思います。

Terraformとは

Terraform は、HashiCorp社が開発したオープンソースの IaC(インフラ構成の管理ツール) です。.tfファイルを使ってインフラをコードを定義し、プロバイダーというクラウドサービスと連携する仕組みを使って、クラウドリソース(AWS・GCP・Azureなど)を自動的に作成・変更・削除することができます。

Terraform公式

IaC (Infrastructure as Code)

IaCとは、Infrastructure as Code の略です。

これまで手作業やGUIを使って構築していたサーバーやネットワークなどのインフラ構成を、コードで定義して管理する考え方が主流となっているのが IaC(Infrastructure as Code)の特徴です。
IaCを用いてインフラを管理することで、次のようなメリットがあります。

再現性の向上

コード化して設定を管理するので、環境が変わっても同じコードを使用することで、同じインフラ環境を構築がしやすくなります。

自動化によるヒューマンエラー防止

IaCを導入すると、自動化によって手動で行う作業が少なくなり、設定、運用のミスを減らすことができ、ヒューマンエラーを防止することができます。

コードレビュー

コードを使ってインフラ構成を管理するので、アプリケーション開発同様、GitHubを使ってチームの方にレビュー依頼をすることができます。レビューを使ってチームで認識を揃えることでより安全性の高い環境を構築することができます。

また、個人的にはGUIでは見えにくかった、環境の全体像がコードによって把握しやすくなっていることもIaCを使うメリットだと思います。

TerraformはこのIaCの代表的なツールであり、「設定ファイル(.tf)」にリソース定義を書くことで、環境を一貫して管理することができます。

  • s3_bucket.tf

※例:Terraformを使ったAWS S3のリソースを作成するソースコード

Terraformの基本コマンド

Terraformを使う上で、最初に覚えておきたい基本コマンドを紹介します。

terraform init

terraformを使用する前に、プロバイダーやモジュールをダウンロードして準備するコマンドです。(初期化コマンド)
実行後、.terraformディレクトリが作成され、プラグインやモジュールの内容がこのディレクトリに格納されて使用できるようになります。


terraform plan

コードの変更によってどのようなインフラ変更が発生するかを確認するコマンドです。
実際にリソースを作成・変更・削除する前に、影響範囲を安全にチェックできます。

※実行例

  • +:新しく作成されるリソース

  • ~:変更が加えられるリソース

  • -:削除されるリソース


terraform apply

定義したリソースを実際にクラウド上へ反映するコマンドですTerraformが差分をもとにリソースを作成・変更・削除します。

ローカルからもクラウドに反映はできますが、チーム開発ではGitHubActionsなどのCI/CDを使ってApplyをする方法もあります。


terraform destroy

Terraformで管理しているリソースをすべて削除するコマンドです。検証環境や一時的に作成したリソースをクリーンアップするときに使用します。

実行前に terraform plan のような確認が入るため、削除対象をしっかり確認してからコマンドを実行することをおすすめします。


terraform fmt

Terraformのコード(.tfファイル)を自動的に整形し、全体のコードスタイルを統一してくれるコマンドです。

整形されるのはインデントやスペースのみで機能的な変更は行われません。CI/CDの一環で、Terraformのlintを確認するのが一般的なので、プルリクエストを作成する前に実行することを意識しておくといいと思います。


tfstateファイル

Terraformは、作成したインフラの状態をterraform.tfstateというファイルに保存します。
このファイルには、Terraformが「今、どんな環境で何がデプロイされているのか」を認識するための非常に重要なデータが書かれています。

tfstateの主な役割

コードと実際のインフラの比較
コード上で定義してある内容とクラウド上の状態を照らし合わせ、差分を把握します。

変更差分の計算
terraform planterraform apply の際に、どのリソースを作成・変更・削除するかを判断します。

破壊的変更の防止
状態を正確に管理することで、意図しないリソース削除や設定変更を防ぎます。

チームでTerraformを使う場合は、HCP Terraformなどのリモート環境でtfstateファイルを保存・管理するとチームが同じ状態を参照することができるので安全に開発ができると思います。

※HCP TerraformとはTerraformの状態管理と実行をクラウド上で安全かつ便利に行えるサービスです。

まとめ

触ってみたかったTerraformを業務で触ることでできて、より便利さを実感することができました。

個人的には、これまでAWSなどのリソースを確認する際、マネージドコンソールだけではインフラ構成の全体像が把握しにくかったのですが、TerraformをはじめとするIaCを導入することで、インフラの全体像をより高い解像度で把握できる点が大きな利点だと感じています。

まだまだわからないことが多いですが、SREとしてまずはTerraformを抑えてインフラの構築、運用がしっかりできるように成長していきたいと思います。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

上部へスクロール