インフラの構成管理を自動化するTerraform入門

2015年7月14日(火)
前佛 雅人(ぜんぶつ まさひと)

Terraformとは?

これまでの連載で扱ってきたVagrantやPackerは、どちらかというと開発者向けのツールでした。それに対して今回紹介するTerraformは、インフラを構築するためのツールであり、開発者だけなく、運用担当者でも必要となりうるツールです。

TerraformHashiCorpにより、オープンソースとして公開され、GitHub上で開発が進められています。ドキュメントでは、Terraformについて「インフラの構築・変更・バージョン管理を安全かつ効果的に行うためのツールです」と紹介されています。

Terraformは、Amazon Web Services(以下、AWS)だけでなく、DigitalOcean、GoogleCloud、Heroku、Docker、OpenStackなどの、様々なインフラに幅広く対応しています。

現時点では、それぞれのクラウドが提供する様々な機能に対応できていない箇所もあります。それでも、仮想サーバの起動や停止といった基本的な機能の多くには対応していますし、日々機能追加や改良がGitHub上で進められています。

Terraformが求められる背景

クラウド技術やサービスの普及によって、システムが動作する環境を必要な時に準備・調達し、すぐに利用できることが当たり前になりつつあります。しかもインフラは単に追加できるだけでなく、不要になった場合の削除もすぐに行えるようになりました。またそれらの作業は、ブラウザを通して簡単に行える点も魅力です。

その一方で、このクラウド上のインフラ(システム基盤)を、どのように管理・維持するのかという新しい課題が生まれつつあります。

例えばブラウザを通したGUIによって、インフラは誰でも手軽・簡単に操作できるようになりました。しかし作業者は人間であり、設定ミスを引き起こす懸念が少なからずあります。あるいは、しっかりした手順を作っていたとしても、クラウド上のサービスや仕様変更により、手順そのものを随時見直す必要性も生まれます。

インフラのコード化

インフラを安全かつ効率的に管理するために、Terraformはコードによってインフラの状態を定義します(Infrastructure as Code)。利用者は、テキスト形式のファイル上に、「どこのデータセンタで」、「どのようなスペックを持つ仮想サーバやリソースを使うのか」といったインフラの状態を、コードとして記述しておきます。

Terraformそのものは、コマンドライン上でインフラを操作するツールです。コード作成後は、「terraform plan」(計画)を実行して、どのように設定が反映されるのか確認します。内容に問題がなければ、「terraform apply」(適用)を実行し、実際のインフラに反映します。

インフラをコードとして記述することには、以下のような利点があります。

  • GUIを通さずインフラに変更を加えられる
  • コードを共有・再利用できる
  • コードのバージョン管理ができる
  • 設定適用前の第三者による確認ができる

この中でも特徴的なのは、GUIを通さずに環境の構築・変更・破棄ができる点です。しかもTerraformは自動的に作業を進行できますので、正確さと時間短縮という明確な利点をもたらします。

それだけでなく、インフラの状態をコードとして管理するため、一般的なソースコードと同じように、社内や組織での情報共有や、変更内容のレビューも簡単です。また、一時的に利用するような検証・デモ環境の構築や削除も、Terraformを使えば誰でも正確かつ迅速に行えるようになります。

一方で、Terraformを使うにあたっては、独自の書式を覚える必要があります。独自とはいえ、比較的シンプルなものですし、複雑な文法や記法でもありません。また、全てを覚える必要もなく、自分の使いたい機能に関する記法を覚えるだけで、すぐに利用できます。

APIや他のツールとの比較

Terraformと類似のツールや機能を比較してみると、そこにも違いがあります。クラウドごとにAPIやコマンドライン・ツールが提供されているほか、AWSにはCloudFormationが提供されています。

他のツールとの大きな違いは、使い始めるためには対象となるクラウドに関する知識だけでなく、APIやプログラミング言語に関する知識も必要となる点です。また、処理を実行する前の確認や、処理後に正常に動作しているかを確認する仕組みは提供されていません。

一方、Terraformは各クラウドの全ての機能を扱えるわけではなく、現時点では基本的なインフラや機能のサポートに留まっています。

Terraformは、ChefやPuppetのようなツールとも異なります。これらの構成管理ツールも、コードによってインフラを管理するものですが、管理する対象はOS上の設定やミドルウェア・開発環境です。一方Terraformは、クラウド用の仮想マシンやリソースを管理します。ですから必要があれば、TerraformはChefやPuppetと組みあわせて使うこともできます。

Terraformの構成と機能

Terraformは「リソース」と呼ばれる単位で、様々なクラウドの基盤を扱います。例えば、仮想サーバも1つのリソースです。他にも、マシン・イメージや、オブジェクト・ストレージ、DNSサービス、ロードバランサーなどの機能を、それぞれリソースとして扱います。

このリソース情報を、コードの中に記述します。コードを作成した後の流れは、次のようになります。

  • コード(「.tf」形式のファイル)上で、インフラのリソース状態を定義する
  • インフラの構築・変更・破棄を、すべてコマンドラインを通して行う
  • 設定反映前にドライ・ラン機能(terraform plan)実行して確認後、設定を適用(terraform apply)する
  • IPアドレスや仮想サーバに関する情報を確認する(terraform show)

この手順は環境を構築する時だけでなく、変更、削除の際も同じものです。作業は常に「terraform」コマンドを通して行います。コマンドを実行時、リソースで指定されたクラウドごとにterraform-providerが呼び出され、APIを通した自動処理を行います。仮想マシンが起動した後は、terraform-provisionerを通して、OS上の設定を自動的に行うプロビジョニングを行うこともできます(図1)。

Terraformの構成と利用の流れ

図1:Terraformの構成と利用の流れ

Terraformのダウンロードとセットアップ

Terraformを使うにはバイナリファイルをダウンロードし、パスの通った場所にファイルをコピーします。

ダウンロード用ページから、最新安定版のTerraformをダウンロードします。以下はLinux(64bit版)バージョン0.6.0を例に、ダウンロードセットアップの手順を紹介します。ここではterraform(コマンド)本体と関連ファイルを「/usr/local/bin」に設置しています。

コンソール画面

$ wget -O terraform_0.6.0_linux_amd64.zip https://dl.bintray.com/mitchellh/terraform/terraform_0.6.0_linux_amd64.zip
$ unzip terraform_0.6.0_linux_amd64.zip
$ sudo cp ./terraform ./terraform-provider-* ./terraform-provisioner-* /usr/local/bin/

正常にセットアップされたかどうかを確認するには、「terraform version」コマンドを実行します。次のようにバージョン情報が表示されれば、準備完了です。

コンソール画面

$ terraform version
Terraform v0.6.0
著者
前佛 雅人(ぜんぶつ まさひと)
クリエーションライン株式会社

Technology Evangelist
ホスティングサービスで運用保守サポートに携わった後、現職へ。サポート業務や新技術検証や開発業務を行う傍ら、実家で農作業のため東京と富山を往復する日々。趣味で監視や自動化に関するOSS検証や翻訳を行う。とりわけ運用・監視の省力化・最適化に興味。辛口の日本酒が大好き。
Twitter: @zembutsu (https://twitter.com/zembutsu)

連載バックナンバー

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています