IaCの基本とTerraformの仕組み・用語を学ぼう

eyecatch-iac-terraform-basic
目次

概要

IaCとは

Infrastructure as Code (IaC) は、インフラストラクチャの管理をプログラム的に行うアプローチでコードで定義された設定を使用してクラウドリソースやオンプレミスの環境を構築・管理します。特にDevOpsやSREなどのインフラ管理関連の文脈でよく使われる用語であり、デベロッパーであっても一定の理解があることが望ましい概念です。

IaC利用のメリットの1つは冪等性(何度実行しても同じ結果が得られること)が担保されることです。これにより開発、テスト、本番環境など複数の環境でインフラ構築を簡単に再現することができます。また設定がコードで管理されるため、変更の追跡やバージョン管理が容易であることもメリットの1つと言えます。

一方、デメリットしては学習コストの高さが挙げられます。IaCによるインフラ構築を実現するためにはツールの習得に加え対象インフラの理解(AWSやAzureなど)が必要となるため使いこなすまでに時間がかかる可能性があります。

個人的なIaC利用のメリットとしては、設定ミスのチェックしやすい、開発ライクで作業のしやすいことが挙げられます。1つ目のメリットについて、コード実行後にリソースを手動確認することでコードとインフラ設定をダブルチェックできるため、手動設定に比べミスを減らすことができています。もう1つのメリットについてはコードを書いて画面で確認という普段のアプリ開発と近い感覚で作業ができるため、慣れると手動設定に比べて作業しやすいと感じています。

IaCツール

通常IaCと言った場合、コードでリソース作成を制御するツールを指します。IaCツールの代表格としてはクラウドベンダー非依存のTerraformやAWS公式のIaCサービスであるCloudFormationなどが挙げられます。

しかしIaCツールは他の様々なツールと組み合わせて利用することでインフラ管理を効率的に行うことができます。下記のインフラ管理ツールと役割を簡単に押さえておくことで技術選定がスムーズに行うことができるでしょう。

  • リソース管理
    • Terraform、AWS CloudFormation
  • OSイメージ管理
    • Packer、Vagrant
  • サーバー内の環境構築管理
    • Ansible、Chef
  • CI/CD
    • AWS Codepipeline、GitHub Actions
  • コンテナ管理
    • Docker

Terraformとは

TerraformはHashiCorpによって開発されたオープンソースのInfrastructure as Code (IaC) ツールで、インフラストラクチャをコードとして管理し、クラウドプロバイダやオンプレミスの環境に対して一貫して構築、変更、バージョン管理を行うことができます。

主要なクラウドサービス(AWS、Azure、Google Cloudなど)のリソースを管理・プロビジョニングするために使用されることが多いツールですが、他にも多くのプロバイダをサポートしています。特に複数のクラウドサービスを利用する環境においては有益なツールと言えます。

Terraformの仕組みと基本用語

仕組み

Terraformを理解する上で処理の全体像を把握することは重要です。下図はその概要がわかりやすく図示されています。ここではplan、applyなどのterraformコマンドを実行するとTerraformCoreを通じて各種クラウドサービスリソースが制御されること.tfファイルと.tfstateファイルでリソースを制御していることを理解するとよいでしょう。

キャディ株式会社, CADDi Tech Blog

ステート

Terraformではインフラ設定の記述は.tfファイルに記述し、.tfファイルの内容と実際のリソースとの対応を保持しているのがステートになります。実際にはリソース実体の情報を.tfstateファイルで管理します。

AWSのEC2を例に挙げると、EC2のセキュリティグループやインスタンスタイプなどの設定内容は.tfファイルに記述し、実際に作成されるEC2のarnなどの情報が.tfstateファイルに書き込まれます。

プロバイダー

Terraformにおけるプロバイダーとは、インフラを管理する対象プラットフォームのことで具体的にはAWSやAzureなどのクラウドサービスを指します。プロバイダーを複数設定することでAWSとAzureのリソースを同時に管理することが可能になります。

バックエンド

Terraformにおけるバックエンドとは、tfstateファイルの保存先のことを指します。バックエンドを切り替えることでさまざまな方法でtfstateファイルを管理できます。デフォルトではローカルに.tfstateファイルが保存されますが、設定を行うことでS3などのストレージに保存することが可能になります。

個人開発では.tsstateファイルをローカルで管理しても問題ないと思いますが、チーム開発でterraformを利用する場合はなるべく共有ストレージで.tsstateファイルを管理する方がよいでしょう。

.tfファイルの記述

ブロックタイプ

.tfファイルはHCL(HashCorp Configuration Language)と呼ばれる言語で記述することができます。

ブロックタイプ説明
providerプロバイダの設定を記述する
resourceクラウドサービス上のリソースを定義する
localsリソース内で使用する変数を定義する
variable外部から設定可能な変数を定義する
outputリソースやモジュールの出力を定義する
module他のモジュールの読み込みを指示する
dataTerraformが管理しないリソースの参照を定義する

Standard Module Structure

Terraformではリソースをまとめて管理することをモジュールと呼びますが、そのモジュール管理のベストプラクティスとしてStandard Module Structureという考え方を提唱しています。この考え方ではフォルダ、ファイル構成を提案しています。参考までに下記のコードはTerraform公式から引用したものになります。下記の構成は最小限のモジュール管理用構成になり、README.mdはterraformで管理するIaCの概要説明を、main.tfは具体的なリソースの設定記述を、variable.tfは変数の管理を、outputs.tfは出力の管理を行うファイルとなり、記述内容がなかったとしても作成するのが望ましいです。

$ tree minimal-module/
.
├── README.md
├── main.tf
├── variables.tf
├── outputs.tf
Terraform, Standard Module Structure

基本コマンド

Terraformの基本コマンドは下記の4つ(initplanapplydestroy)になります。

initコマンドでは、.tfファイルの内容をチェックし必要なプロバイダやモジュールのダウンロード、バックエンドの初期化などを行います。planコマンドでは実際に作成するリソースのチェックを行い、applyコマンドで実際にリソースの作成・変更・削除を実施します。destroyコマンドは作成したリソースの全てもしくは一部を削除するためのコマンドになります。

まとめ

本記事ではTerraformを理解する上で必要な基礎知識を解説しました。この記事で解説した内容を理解することでTerraformによるインフラ構築がスムーズになると思います。本記事でぜひ理解を深めてくださいね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

Hack Luck Labの管理人hakula(ハクラ)です。2012年にSIerに新卒入社し、SE、新規事業、情シスを担当。その後、ITコンサルを経て、現在はバックエンドエンジニア。過去にはC#、SQL Server、JavaScriptで開発を行い、現在はPython、Rest Framework、Postgresql、Linux、AWSなどを使用しています。ノーコードツールやDX関連も興味あり。「技術は価値を生むために使う」ことが信条で、顧客や組織への貢献を重視しています。

目次