
目次
Terraformとは
インフラリソースをコードで定義して管理することをInfrastructure as Code(IaC)と呼びます。
Terraformは、HashiCorp社により開発されているオープンソースのIaCツールであり、クラウドを扱うIaCツールとしてデファクトスタンダードの地位を確立しています。
Terraformを使用すると、AWSやGCPなどのクラウドサービス上のインフラ環境(Webサーバーやデータベースなど)をコードで定義し、コードに基づいたインフラ環境を自動構築することができます。また、コードを見るだけでインフラの構成内容を理解できるようになりますし、インフラ環境もGitなどのツールでバージョン管理ができるようになります。
結果として、Terraformを利用することでオペレーションミスが無くなるほか、実体とドキュメントの二重管理から解放され、複数システムでコードを再利用することで効率化を図ることが出来ます。様々なリソースが必要となる場合に、手動で行うよりもアジリティの高いインフラ開発が可能になります。
Ansibleとは
AnsibleもIaCツールとしてはという有名でよく使われます。
Terraformはインフラ構築(サーバ/DB、ネットワーク設定)を得意とするIaCツールであるのに対し、Ansibleはアプリケーション環境の構築(ミドルウェアの導入、アプリデプロイ)を得意とします。
TerraformとAnsibleにはそれぞれ得意とするプロビジョニングレイヤが異なりますので、双方を効果的に使い分けることでIaCの効果を最大化することが出来ます。
その他のIaCツール
Terraformと同様にインフラ構築に強みを持つツールとしてGoogle Cloud Deployment ManagerやAWS CloudFormation、Azure Resource Managerなどが存在します。これらのツールはそれぞれのクラウドベンダーが自社サービスを扱うために開発されたツールですので、マルチクラウド環境においてはコードを統一して管理することが出来ません。その点、Terraformであれば1つのツールで複数のクラウドに対応可能なので、一貫性のある効率的な運用が可能となります。
Terraformの基本操作
TerraformのコードはHCL(HashiCorp Configuration Language)という言語で実装します。
(HCLはHashiCorp社が設計した言語)
init
Terraformのコードが格納されるディレクトリで「terraform init」コマンドを実行すると、リソースに必要なバイナリファイル(プロバイダなど)がダウンロードされます。
plan
「terraform plan」コマンドを実行するとどのような変更を実行するかという実行計画が出力されます。このコマンドにより、実際のリソースに変更を加えることなく、一連の変更の実行計画が正しいかどうかを確認することができます。
apply
「terraform apply」コマンドを実行するとplan の結果が表示され、最終確認が行われます。yes と入力するとリソース作成が行われます。
destroy
「terraform destroy」コマンドを実行するとapply と同様にplan の結果が表示され、最終確認が行われます。yes と入力すると作成されたリソースが削除されます。
Terraformのファイル構成
Terraformでは、tfファイル(拡張子が.tf)で定義された情報に従って各種リソースを構築します。
単一ファイルにすべてを定義することも可能ですが、分離することが一般的です。
標準構造に従った最小限の推奨モジュール構成として以下の構成が定められています。
.
├── README.md
├── main.tf
├── variables.tf
├── outputs.tf
(参考)Terraform公式サイト
README.md
tfファイルで定義したリソースについての説明ドキュメントとして用意します。作成されるリソースについての説明等を記述します。
main.tf
リソース定義(ファイル名は任意)を行うファイルです。以下のような項目をブロックを分けて定義します。
- resourceブロック
作成するクラウドリソースを指定します。以下はAWSでEC2リソースを指定する場合の例です。
「resource “<リースの種類>” “<リソース名>” {}」という構文で定義します。
リソースの種類を指定する例として、VPCの場合は「aws_vpc」、セキュリティグループの場合は「aws_security_group」のように指定します。
resource "aws_instance" "web_server" {instance_type = "t2.micro"ami = "ami-00000000000000000"}
- providerブロック
構築するリソースのプロバイダー情報を記載します。
プロバイダはAWS、GCP、AzureなどのAPIの違いを吸収するラッパの役割を果たします。
以下はAWSのリソースを作成する場合の例です。
provider には”aws”を定義し、regionには、リソース構築先のAWSリージョンを指定します。
プロバイダはTerraform本体とは別で管理されており、terraformm init コマンドで、指定したプロバイダのバイナリファイルをダウンロードする必要があります。
provider "aws" {region = "ap-northeast-1"}
- moduleブロック
Terraformコードを分割してモジュール化する仕組みがあり、以下のように定義することができます。
モジュールごとにディレクトリを分ける必要があり、モジュール定義では対象のディレクトリを指定します。
module "network" {source = "./network"}
variables.tf
インプット変数情報を「variable」として定義します。
インプット変数は関数の引数のようなもので、これを使用することで、main.tfなどのモジュールのソースコードを変更せずにカスタマイズが可能です。
type として変数に受け入れられる値の型(string, number, list)を指定します。また、default にはTerraformを実行するときに値が設定されていない場合に使用する値を指定します。
variable "availability_zone_names" {type = list(string)default = ["us-west-1a"]}
outputs.tf
アウトプット変数情報を「output」として定義します。
モジュール外から値を取得する場合や、apply時にターミナルに値を出力したい場合に使用します。
tfstateファイル
apply 実行時にTerraformが自動的に.tfstateファイルを生成します。このファイルにはクラウドリソースの現在の状態が記録されます。tfファイルとtfstateファイルの差分を見ることで必要な更新のみが行われるようになります。
まとめ
Terraformの概要や基本コマンド/ファイル構成についてご紹介しました。Terraformのより詳細な使い方につきましては公式ページのドキュメントをご確認ください。
IaCツールを使用してインフラをコード管理する場合、アプリケーション開発と似たような観点でファイル構成やモジュール化を検討する必要があります。管理対象のシステムの規模に応じて、再利用性や保守性を考慮した設計とすることで、より高度なインフラ開発が可能になります。
-
GeNEEの開発実績製造業、小売業、流通業、印刷・出版業など、業界別のベストプラクティスを保持しています。
弊社の開発実績にご関心のある方はこちら一部公開可能な事例を掲載中
-
GeNEEの事業内容
現在、6事業を展開しております。お客様の状況や目標に合わせて、FITするソリューションを提供いたします
6事業の詳細はこちら
-
弊社主催セミナー
最大月に1回のセミナーを開催しております。毎回30名以上の方にご出席いただいております。
テック系のセミナーにご興味ある方はこちら月に1回テック系セミナー開催中
-
オウンドメディア
GeNEE は技術に関する情報発信を積極的に行っています。 弊社のお客様だけでなく、業界全体に貢献のできる品質の高い情報提供を心掛けています。
最先端テクノロジーの情報配信中
-
GeNEEの会社概要
ビジネスxテクノロジーxデザインの三位一体で、お客様の課題を解決する独自のアプローチをご紹介
創業から15年の実績
-
GeNEEの5つの特徴
なぜGeNEEはコンサルティングやシステム開発のプロジェクト成功率が高いのか。
競合他社との違いや優位性についてまとめております。GeNEEの5つの特徴
-
GeNEEへのお問い合わせ
DX/ITコンサルティングのご依頼やシステム開発・スマホアプリ開発のご相談はこちらのフォームからお願いいたします
お問い合わせフォームはこちら
-
GeNEEの資料をダウンロード
ご希望の会社様にGeNEEのパンフレットをお送りしております。
ITベンダーとの繋がりをお探しの方は是非お気軽にリクエストください。資料ダウンロードはこちら
取締役
大阪大学工学部、大阪大学大学院情報科学研究科修了。
国内最大手IT企業の株式会社NTTデータで大手金融機関向けに債権書類電子化システム、金融規制・法規制対応システムの要件定義・インフラ設計・開発・構築・複数金融サービスのAPI連携等を手がける。その後、株式会社GeNEEの取締役に就任。
基本情報技術者試験、応用情報技術者試験、Oracle Master Platinum等多数

>
>
>
>
>
>
>
>
>
>
>
>
>
>
>