※こちらの記事のオリジナル版(英語)はこちらになります。本記事は技術広報益山により和訳されました。
https://gmor-sys.com/2021/04/28/introduction-terraform/
こんにちは。GMOリサーチのシステム部でリーダーをしているNiekis Aurimas(オウリマス・ニエキス)です。
GMOリサーチでは1年ほど働いています。
私はリトアニアで生まれ育ちましたが、ドイツとイギリスに数年間住んだ後、新型コロナウイルス流行前に日本に移住しました。
昨年の冬から、弊社の新旧プロジェクトをベースに、様々な最新の技術や手法を盛り込んだ新しいプロジェクト体制の構築に取り組んでいます。
本日のテーマである「Terraform」は、インフラの開発と導入を自動化するため、新しいプロジェクト構成に使用していて、インフラ技術の経験が少ない開発者でも簡単に使えて、計画や開発に参加できるのがとても面白いと感じています。
それでは、早速「Terraform」についてご紹介していきます。
Terraformとは?
Terraformは、HashiCorp社が開発したオープンソースのInfrastructure as a Code(IaC)ソフトウェアツールです。
シンプルで習得しやすい宣言型言語を用いて、インフラの構築やプロビショニングを行うことができます。
Terraformではインフラの構成をコードで宣言します。また、SaltstackやPulumiなど、似たような機能を持つツールが多数存在します。
▼HashiCorp社公式YouTube
Terraformを使うメリット
まずはTerraformを使うメリットを列挙してみました。
- 構成管理だけでなく、オーケストレーションにも対応
- AWS、Azure、GCP、DigitalOcean、その他多くのサードパーティ・プロバイダーなど、複数のクラウド・プロバイダーをサポート
- クラウド・プロバイダーだけでなく、ベアメタルハードウェアと直接連携可能
- 構成をスムーズに変更できる不変的なインフラを提供
- 理解しやすい言語HCL(HashiCorp Configuration Language)を使用
- 他のプロバイダーへの移行が容易
- クライアント・オンリーのアーキテクチャをサポートしているので、 構成管理専用サーバーの必要無し
Terraformの基本コンセプト
Terraformの基本となる概念や用語をご紹介します。
変数
入力変数としても使用される変数は、おそらくTerraform必須のアイデアです。これは、Terraformモジュールがブロックのカスタマイズを可能にするために使用するキーと値のペアです。
Provider
サービス、ソフトウェア、ハードウェアのAPIと対話するためのプラグインです。
Module
すべての設定が定義されたTerraformテンプレートを含むフォルダです。
State
Terraformによって管理されているインフラと関連する設定に関するキャッシュされた情報で構成されています。
Resources
インフラストラクチャの設定と管理に使用される1つまたは複数のインフラストラクチャオブジェクト(コンピュートインスタンス、仮想ネットワークなど)のブロックを指します。
Data Source
プロバイダーによって実装され、外部オブジェクトの情報をテラフォームに返すためのもの。
Output Value(出力値)
他の構成が使用できるテラフォーム・モジュールの戻り値です。
Plan
インフラストラクチャの現実/現在の状態から望ましい状態に移行するために、何を作成、更新、または破壊する必要があるかを決定する段階の一つです。
Apply
望ましい状態に移行するために、インフラの現実/現在の状態の変更を適用するステージの1つである。
Terraformのライフサイクル
Terraformのライフサイクルは、init、plan、application、destroyで構成されています。
- Terraform initは、すべての設定ファイルからなる作業ディレクトリを初期化します。
- Terraform planは、インフラを望ましい状態に到達させるための実行計画を作成するために使用します。目的となる形を実現するために、設定ファイルの変更を行います。
- Terraform applyは、プランで定義された通りにインフラの変更を行い、インフラが望ましい状態になるようにします。
- Terraform destroyは、適用フェーズの後に汚染されていると判断された古いインフラリソースをすべて削除するために使用されます。
Terraformの仕組み
Terraformは2つの主要コンポーネントで構成されています。
- Terraform Core
- Public Modules from Community (Providers)
Terraform Core
Terraformコアは2つの入力ソースを使って作動します。
1つ目の入力ソースは、ユーザーであるあなたによって行われるTerraformの設定です。ここでは、何を作成またはプロビジョニングする必要があるかを定義します。そして2つ目の入力ソースは、テラフォームがインフラの現在の設定を最新の形で保っている状態です。
つまり、Terraformコアが行うのは、入力を受けて、何を適用する必要があるかの計画を把握することです。現在の状態と、最終的に希望する構成を比較します。その状態になるためには何をすればいいのか、設定ファイルを作成します。望ましい状態のインフラストラクチャに到達するために必要な、作成、更新、削除などのすべての必要なプロセスを把握します。
Public Modules
アーキテクチャーの2つ目の構成要素は、パブリックモジュール、つまり特定の技術のためのプロバイダーです。これは、AWS、Azure、GCPなどのクラウド・プロバイダーや、その他のInfrastructure as a Serviceプラットフォームなどです。また、VMware vSphereやKubernetes、GitHubのようなソフトウェアやサービスなど、下位または上位のコンポーネントである可能性もあります。
これにより、さまざまなレベルのインフラを定義することができます。
例えば、AWSインフラを構築し、AWS EKSインスタンスを作成し、必要なファイアウォールやルートを設定し、Kubernetesクラスター内にサービスやコンポーネントを作成し、デプロイメントプランを定義します。
終わりに
最後に、Terraformは企業から個人利用のプロジェクトまで使用可能なユニバーサルツールです。
すべての使用例を説明するには多くの記事が必要ですが、少なくとも私の紹介がTerraformの核となる考え方を理解する一助となれば幸いです。
*
GMOリサーチでは、WEBエンジニア(サーバーサイド、インフラ、フロントエンド)を随時募集しております。
興味のある方は、ぜひこちらからご応募ください!
詳しい募集要項など採用情報はこちら