Terraformとは?AWSとの連携方法についても解説!
thumb_whatterraform_01
Terraformとは?AWSとの連携方法についても解説!
アンドエンジニア編集部
2023.11.17
この記事でわかること
Terraformはクラウドインフラをコード化するツール
TerraformによるIaCでインフラ構築を高速化し、冪等性を担保する
Terraformで外側を、Ansibleで内側を管理する

Terraformとは

img_whatterraform_01

Terraformは、HashiCorp社によって開発された、インフラをコードによって管理するIacを支援するオープンソースのプロビジョニングツールです。

Terraformによってクラウドやオンプレミスなどのプラットフォームを問わず、インフラをコード化することで設定の矛盾やミスを排除し、素早いインフラの構築や複製が容易になります。

【参考】:Terraform公式

Terraform Cloudとは?概要から使い方まで解説!

IaCとは

img_whatterraform_02

IaCとは「Infrastructure as Code」の略で、「コードとしてのインフラ」という意味を持つ言葉です。IaCにはリソースを構築する手順を記述していく手続き型と、リソースの状態を記述する宣言型の2つの型があり、Terraformは宣言型のIaCツールです。

インフラ管理手法の変遷

従来は、オンプレミスと呼ばれるデータセンター内に物理的なインフラを構築する方式が主流で、インフラの構築や設定は手順書に従って手動で実施していました。

スクリプトによる自動化の試みもされていましたが、自動化の範囲が限定されてしまうことや、スクリプトの管理やメンテナンスを怠ると予期せぬ障害の原因になったり、業務の属人化によりスクリプトがブラックボックス化したりといった難点がありました。

現在はAWSをはじめとしたクラウドプラットフォームがシェアを伸ばしており、複数のパブリッククラウドを併用するマルチクラウド環境も珍しくはなくなってきました。

クラウド上のリソースは、オンプレミスと比較して調達・廃棄・拡張・縮小が容易なため、需要予測をせずにスモールスタートできるなどサービス提供のスピードが大幅に加速します。

そのため、従来の手動操作やスクリプトによる部分的な自動化といった手法では大量の作業を素早く行うことを要求するクラウドのスピード感についていけなくなっているのです。

それらの課題を解決したのがIaCです。インフラをコード化することで、コマンド1つで大規模なデプロイや変更を正確に、短時間で自動的に実行できます。

Terraform以外のIacツールとの比較

img_whatterraform_03

IaCを実現するツールはTerraformだけではありません。有名なところではChef・Puppet・Ansibleなどがありますし、AWSのCloudformationなど、クラウドベンダでも独自のIaCサービスを展開しています。

では、それらの競合ツールと比較した場合、Terraformの強みとはなんでしょうか。ここでは、AnsibleやAWS Cloudformationと比較してTerraformのメリットを解説します。

Ansibleとの違い

TerraformとAnsibleは同じIaCを提供するツールですが、何が違うのでしょうか。結論から言えば、2つは競合するツールではなく、お互いに補完しあう関係にあります。

Ansibleは手続き型のアプローチを取る構成管理ツールで、1つ1つのリソースの設定作業や、ソフトウェアのインストールといった設定手順を自動化するのが得意分野です。

これに対して、Terraformは宣言型のアプローチを取るオーケストレーションツールです。全体のアーキテクチャを定義する機能に優れており、Ansibleが得意とする個別の設定手順の自動化は苦手です。

このように、TerraformとAnsibleでは得意とする範囲が違うため、Terraformでインフラを定義し、Ansibleで設定を管理するというように併用するのがベターです。

【参考】:Ansible

Ansibleとは?構成管理ツールの概要から効果的利用方法を解説

AWS Cloudformationとの違い

各クラウドベンダでも独自のIaCサービスを開発しており、AWSではCloudformationが提供されています。Cloudformationは言うまでもなくAWSリソースを扱うことに最適化されており、AWSリソースのみを扱う場合はCloudformationに軍配が上がります。

これに対して、Terraformはマルチプラットフォームに特化しており、複数のクラウドプラットフォームやオンプレミスといった異なる環境が混在する場合でも、Terraform1つで管理できるという強みがあります。

現在はAWSのみでも、将来的にマルチプラットフォームを見据えているという場合も、コードを流用しやすいTerraformを選択するメリットがあります。

また、Terraform自体はGo言語で開発されているオープンソースソフトウェアであるため、OSを問わず利用できます。

【参考】:Cloudformation

Terraformの機能

img_whatterraform_04

Terraformには、IaCをより便利にするための機能がいくつも備わっています。代表的なものに絞って解説します。

Terraform独自の言語、HCLとは

Terraformでは、HashiCorp Config Languageという独自の言語を用いてコードを記述します。HCLはHashiCorp社が独自に開発した言語ですが、JSONと互換性があるため、JSONの知識があれば理解しやすいでしょう。

なお、必ずしもHCLを使わなければいけないわけではなく、JSONにコンバートすることも可能です。

【参考】Terraform公式-Terraform Language Documentation

JSONとは?概要からJSONファイルフォーマットまで解説!

Terraformのモジュールとは

Terraformで作成したコードは、モジュールというテンプレートにすることができます。例えば、サーバを作成するコードをモジュールにしておけば、同じサーバを1つのソースコードから複数作成することが可能になります。

また、モジュールにはパラメータの指定ができるため、同じモジュールから起動したサーバの設定をパラメータで少し変更する、といったことも可能です。

【参考】Terraform公式-modules

Terraformのインポートとは

Terraformではインフラをコードで定義できると説明しましたが、既存のリソースをインポートしてコード化することもできます。例えば、AWS環境上に存在する仮想サーバをimport機能によってTerraformの管理下に置くことが可能です。

ただし、import機能ではリソースの状態をコードとして保存しますが、構成までは反映されません。そのため、全く同じ状態にはならないので差分を吸収する作業が必要です。

Terraformのワークスペースとは

Terraformでインフラを作成したり変更を加えたりする際に、いきなり本番環境に適用するのではなく、一旦テストをしたいということがあると思います。ワークスペースを利用すれば、同じコンフィグファイルを使ってテスト用の環境に適用して影響を確認することが可能になります。

【参考】Terraform公式-workspaces

Terraformのプロバイダーとは

Terraformにおけるプロバイダーとは、TerraformとクラウドやSaaSサービス、その他のAPIとを繋ぐプラグインのことを指します。Terraformでは、まず必要となるプロバイダーを宣言します。プロバイダーの役割は、Terraformが管理できるリソースタイプやデータソースを追加することです。

現在は、AWSをはじめとした殆どのクラウドプラットフォーム用プロバイダーが存在する他、現時点ではプロバイダーが存在しないプラットフォームに関しては独自に作成することもできるため、Terraformは実質的にあらゆるインフラを管理することができると言えます。

【参考】Terraform公式-Providers

AWSの勉強方法6選!インフラ基礎がないと学習は厳しい?

AWSとの連携方法

img_wahatterraform_05

Terraformの活用例として、AWSのリソースをTerraformで管理する方法について解説します。AWSには、ブラウザベースの統合開発環境であるAWS Cloud9というサービスがあります。

Cloud9は、コードエディター・デバッガー・ターミナルなどの機能が備わっている上、Terraformも使用可能であり、Terraformの学習にも最適です。

【参考】AWS公式-AWS Cloud9

AWS Cloud9を利用すれば無料で開発環境を入手できるのか?

AWS Cloud9でTerraformを利用する方法

まずは、お持ちのAWSアカウントにログインして、AWS Cloud9で作業環境を作成します。AWSでは最小権限の原則を推奨しているため、AWSCloud9Administratorの権限のみを付与したIAMユーザーを作成して使用することをおすすめします。

ログインできたら、AWSマネジメントコンソールからCloud9を検索してCloud9の管理画面にアクセスします。管理画面でCreate environmentをクリックして、ウィザードに従って必要な情報を入力し、環境を作成します。

テスト目的の利用であれば、設定する項目はNameのみで構いません。

AWSマネジメントコンソールとは?機能やCLIとの違いを解説

tfファイルを作成する

Cloud9が起動したら、Terraformのリソース定義ファイルであるtfファイルを作成します。今回は、例としてAWSの最も基本的なネットワークリソースであるVPCを作成します。

Cloud9のターミナルで以下のコマンドを実行して、ファイルを作成します。

vi aws_vpc.tf

ファイル内に、以下のコードを入力して保存します。



provider "aws" {


  region = "ap-northeast-1"


}`


resource "aws_vpc" "test_vpc" {


  cidr_block           = "10.0.0.0/16"


  enable_dns_hostnames = true


}

「provider」ではプロバイダーとしてawsを定義しています。そして、「resource」でどのようなリソースを作成するかを定義します。AWSプロバイダーで作成が可能なAWSリソースは以下のURLを参照してください。

【参考】Terraform公式-AWS Provider

なお、他のリソースも作成したい場合は、すべてのリソースを1つのファイルに記述することもできますが、管理のしやすさを意識してサービス単位など複数ファイルに分けて作成することをおすすめします。

Terraformコマンドを実行してリソースを作成する

それでは、実際にTerraformコマンドを実行してリソースを作成してみましょう。まずは、ターミナル上で以下のコマンドを実行します。

terraform init

このコマンドは、Terraformの実行に必要なコマンドをインターネットから取得します。実行結果が「Terraform has been successfully initialized!」と表示されれば成功です。

続いて、以下のコマンドを実行してtfファイルの構文に問題がないことを確認します。構文エラーが出力される場合はエラーメッセージに従って修正し、再度実行してください。実行結果に「Success! The configuration is valid.」と表示されれば構文チェックは完了です。

terraform validate

 

なお、以下のコマンドを実行するとコードのインデントを自動的に修正してくれます。構文チェックの前に実行しておくことをおすすめします。

terraform fmt

 

構文に問題ないことを確認したら、以下のコマンドを実行します。

terraform apply

このコマンドを実行すると、まずTerraformによって作成・変更されるリソースの一覧が表示されます。

新規リソースが追加される場合は「+ create」、既存のリソースに変更が加わる場合は「~ update in-place」、既存のリソースが削除される場合は「- destroy」、リソースの再作成が発生するものは「-/+ destroy and then create replacement」で表現されます。

内容に問題がないことを確認したら、「Enter a value:」の欄にyesと入力し、エンターを押下して実行します。

実行結果に「Apply complete!」と表示されていればコマンドは成功です。実際に作成されたリソースをAWSマネジメントコンソールにログインして確認しましょう。

リソースの削除

Terraformで作成したリソースを削除するには、以下のコマンドを実行します。

terraform destroy

実行結果に「Destroy complete!」と表示されていればコマンドは成功です。実際に削除されたリソースをAWSマネジメントコンソールにログインして確認しましょう。

以上で、AWSとTerraformの連携方法についての解説は終了です。Terraformを用いてAWS上にリソースを構築する方法や、削除する方法が分かれば、クラウド環境のIaCを学ぶ上で初めの一歩を踏み出せたことになります。

Terraformの勉強法

img_whatterraform_06

Terraformの知識や技術を身に付けるには、まずTerraformで管理したいプラットフォームの知識を身に付けることが大事です。例えば、AWSのリソースを管理したいなら、まずはAWSの知識を学ぶ必要があります。

また、分からないことがある場合は公式ドキュメントをチェックしましょう。Terraformは現在進行形で開発が進められているオープンソースソフトウェアなので、常に最新の情報に更新されている公式ドキュメントが最も信頼性が高いです。

日本語へのローカライズはされていませんが、ブラウザ翻訳でもある程度読めると思いますので、是非チェックしてみてください。

2022年AWS学習におすすめの本14選!入門者・中級者・資格対策編

Terraformを学んであらゆるプラットフォームのIaCを担える人材に

img_whatterraform_07

今後もオンプレミスとクラウドのハイブリッド環境や、複数のクラウドプラットフォームのそれぞれの強みを活かしたマルチクラウド環境が増えていく可能性があります。

Terraformを学べば、どのような環境にもIaCを実現できるため、学習コスト対効果は非常に高いと言えます。積極的に活用して、プラットフォームを選ばないマルチな人材を目指しましょう。

クラウドサービスとは?種類やメリット・デメリットをわかりやすく解説
クラウドエンジニアに未経験からなるには資格は不要?適性・スキルも解説!
気になる人のXをフォローしよう!
アンドエンジニア公式LINEでは
新着記事やエンジニアに役立つ情報をお届け!
日々のキャッチアップをお手伝いします!
マイナビITエージェント

編集部オススメコンテンツ

Sponsored
【年収±診断】6つの質問に答えて、真の市場価値をチェック!
マイナビITエージェント
Sponsored

アンドエンジニアへの取材依頼、情報提供などはこちらから

お問い合わせ・情報提供
はじめて転職される方へ
SE・システムエンジニア(IT/通信/インターネット) 求人一覧

編集部おすすめコンテンツ

Sponsored
【年収±診断】6つの質問に答えて、真の市場価値をチェック!
マイナビITエージェント
Sponsored

アンドエンジニアへの取材依頼、情報提供などはこちらから

Powered by マイナビ AGENT