インフラの構成管理を自動化するTerraform入門
Terraformとは?
これまでの連載で扱ってきたVagrantやPackerは、どちらかというと開発者向けのツールでした。それに対して今回紹介するTerraformは、インフラを構築するためのツールであり、開発者だけなく、運用担当者でも必要となりうるツールです。
TerraformはHashiCorpにより、オープンソースとして公開され、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のダウンロードとセットアップ
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
連載バックナンバー
Think ITメルマガ会員登録受付中
全文検索エンジンによるおすすめ記事
- マシン・イメージを自動構築し、作業効率を高めるPacker入門
- Iacツール「Terraform」の基本的な使い方
- TerraformからPulumiへの移行
- Oracle Cloud Hangout Cafe Season7 #2「IaC のベストプラクティス」(2023年7月5日開催)
- 「Terraform」のコードを自分で書けるようになろう
- SecretもPulumiで使いこなしたい! PulumiのSecurityを試してみよう
- 「Pulumi Stack」とは ー Pulumiによるマルチステージ環境の構築方法
- Policy as Codeでインフラのコンプライアンスを自動実現! 「Pulumi CrossGuard」を活用してみよう
- PulumiでAWSリソースをデプロイしよう
- 既に存在するリソースをPulumiで管理してみよう