こんにちは咲矢です。
今回はAWSにおけるTerraformの始め方を、初心者を対象に6ステップで紹介してみたいと思います。
Webアプリ開発の学習をしている方なら、Terraformを使えばAWSの設定情報をコード化できるということを、聞いたことがある人は多いと思います。
しかし、情報としては聞いたことがあっても、実際に挑戦するとなると難易度は高く感じますよね。
どうやって始めるのかわかりにくく、チュートリアル的なものも少ない。
そこで、Terraformを始めるためのとっかかりをつかむために必要な手順を、なるべく完結に紹介していきます。
記事の最後に関連リンクも載せておきます。
挫折しそうになったら、そちらも参考にしてみてください。
それではやってみましょう!
■ tfenvをインストールする
Terraformをインストールする準備として、tfenvをインストールします。
tfenvとはTerraformをバージョン管理するためのものです。
イメージとしてはRubyのrbenvみたいなものです(実際、インスパイアされてるとのこと)。
なくてもTerraformできますが、バージョンによって結構変わることがあるらしいです。
それに、tfenvを介したほうがTerraformのインストールも簡単です。
なので、導入しておきます。
tfenvの公式Github(https://github.com/tfutils/tfenv)に手順があるので、そのとおりにインストールしていきます。
Mac編:
Macの場合はHomebrewを使ってインストールできます。
コマンド:
Linux(WSL)編:
Linuxで手動インストールする場合は
★gitをクローンする
★パスを通す
★設定の変更を反映させる
■ Terraformをインストールする
いよいよTerraform本体を、tfenvを使ってインストールします。
コマンド:
インストールが終わったら確認してみます。
こんな感じでバージョン情報が表示されればインストール成功です。
■ 設定ファイルを書く準備をする
Terraformは、設定をtfファイルに記述していきます。
そのファイルをまとめて置くための専用のフォルダを、プロジェクトフォルダ直下に作ります。
名前はわかりやすくするために、「terraform」としておきましょう。
今後terraformのコマンドを使用する時はterraformフォルダで行うので、ディレクトリを移動しておきましょう。
■ 初期設定をtfファイルに書く
Terraformはコマンドを叩いて設定をAWSにプッシュします。
そのための最初の設定を、これからファイルに記述していきます。
backend.tfというファイルを、terraformフォルダ内に作ります。
backend.tfに最初に必要な設定を記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
backend.tf terraform { #Terraformのバージョンを固定するために記述 required_version = "1.0.7" backend "s3" { #mybucketの部分には自身のS3バケットの名前を入力 bucket = "mybucket" key = "terraform.tfstate" #S3バケットがあるリージョンを設定 region = "ap-northeast-1" } } #利用するサービスをAWSの東京リージョンに設定 provider "aws" { region = "ap-northeast-1" } |
■ 初期化する
これで準備が整ったので初期化します。
コマンド
エラーが出なければ成功です。
これでAWSのインフラをコード化する準備ができました。
次から実際にインフラ設定を書いていきましょう。
■ 実際にインフラ設定を書いてみる
VPCを構築する
Terraformでは、設定をtfファイルに記述します。
そのファイルの中で「resaurce」という構文によって、インフラ設定を定義します。
参照してくれるtfファイルは、カレントディレクトリ(今回の例ではterraformフォルダ)にあるものすべてです。
ファイル名は何でも大丈夫ですので、内容がわかりやすい名前をつけておくと良いでしょう。
まずはvpc.tfファイルを作成してVPCネットワークを作ってみましょう。
今回は、CIDR_BLOCKが
192.168.0.0/16
のVPCネットワークを例とします。
1 2 3 4 5 6 7 8 9 |
vpc.tf resource "aws_vpc" "test-vpc" { cidr_block = "192.168.0.0/16" instance_tenancy = "default" tags = { "Name" = "test-vpc" } } |
構文の意味は、
・1行目の“aws_vpc”はVPCを構築するよ、という意味。固定。
・1行目の“test-vpc”はterraform内で使うID。自分で名前をつけられます。
・波括弧の中に設定の詳細を書きます。
この設定でVPCネットワークを作ります。
AWSに設定を送信する前に、確認のためのコマンドを打ってみましょう
このコマンドで、どんなインフラが出来るのか確認ができます。
OKでしたか?
それではいよいよAWSに設定を送信して見ましょう
コマンド:
途中で最終確認のために処理が止まるので、良ければ「yes」を入力してエンターしましょう。
エラーが出なければ成功です。
AWSのコンソールでVPCのサービスを見て確認してみましょう。
「test-vpc」というVPCが作成されていますよね。
出来ていればバッチリです。
サブネットを構築する
せっかくなのでこのVPCにサブネットを作ってみましょう。
先ほど作ったVPCネットワークをサブネットに分割します。
CIDR_BLOCKは
「192.168.0.0/24」
に設定。
この設定で、このサブネットのネットワークアドレスの範囲は
192.168.0.1~192.168.0.254
になります。
わかりやすいようにサブネット用の設定ファイルを別に作成します。
名前は「subnet.tf」としておきましょう。
subnet.tfの記述はこんな感じ。
1 2 3 4 5 6 7 8 9 10 |
subnet.tf resource "aws_subnet" "test-subnet" { availability_zone = "ap-northeast-1a" vpc_id = aws_vpc.test-vpc.id cidr_block = "192.168.0.0/24" tags = { "Name" = "test-subnet" } } |
構文はVPCの時とほぼ同じですが、ここでポイントがあります。
vpc_id = aws_vpc.test-vpc.id
の部分。
この左項は、「サブネットを構築するVPCのIDを指定してくださいね」という意味。
そして、この右項は、先程定義したVPCのIDを、文字列ではなく、設定を参照する形で表現しています。
vpc.tfファイルの
resource “aws_vpc” “test-vpc” {
}
この部分を思い出してください。
ここでは、“aws_vpc”のリソースを、“test-vpc”という名前で構築しました。
ここで定義したVPCリソースのIDを参照するのが、
「aws_vpc.test-vpc.id」
という表現なのです。
こうすることによって実際の値ではなく、vpc.tfファイルで定義したVPCの名前から、IDを参照することができます。
初めて「terraform apply」する時は当然IDが割り振られていないので、こういう記法があるということを覚えておきましょう。
それではVPCの時と同じように
で確認してみましょう。
サブネットの設定が追加されていると思います。
OKでしたら送信してみましょう
成功したらAWSコンソールで、VPCのサブネットの設定を見てみましょう。
最初に作成したVPCの中に、今作成したサブネットが出来ているはずです。
これで、たとえ真っ更な状態からでも、コマンドをちょっと叩くだけで最低限のネットワークが作れますね!
ちなみに今回作ったインフラは、
というコマンドですべて破棄できます。
「apply」した時と同じように、チェックが走った後に最終確認があります。
削除してOKなら「yes」を入力してエンターすれば、作成したリソースをすべて削除してくれます。
■ まとめ
Terraformの入門はいかがでしたか?
知らないと、どんな操作感なのかイメージしづらいツールですが、手を動かしてみると感じがつかめると思います。
今回紹介したものはごく一部の機能ですが、AWSのあらゆるインフラをコード化することが可能です。
リソース作成の構文に関しては、公式のドキュメントが割とわかりやすいので、英語を恐れずに見てみることをおすすめします。
TerraformはWEBアプリ開発において、かなり応用度が高いです。

CIDRって何?
とか、

AWSとかよく分からない・・・
という方には難しく感じるでしょう。
ネットワークの基礎や、AWSでのインフラ構築の基礎の学習がまだの方はそちらを先に進めることをおすすめします。
(ページ下の参考リンクに、学習におすすめの本を紹介しておきます)
ぼくとしては、さらにRailsチュートリアルを終えているくらいの学習段階を想定しています。
難しいことをいきなりやろうとすると挫折しやすいのは、プログラミング学習のあるあるです。
難しいなと感じた方は、以前の記事でWEBアプリ開発の学習ロードマップを紹介しているので、そちらを進めてからTerraformへチャレンジしてみてください。
■ 参考リンク
AWSのリソースを利用するための構文はこちらで検索:
Terraform公式 AWSで利用する際のドキュメント
【過去記事】WEBアプリ開発の学習ロードマップ:
【SPA化】RailsアプリをCircleCIを使ってAWSにデプロイするまでのロードマップ【Fargate】
環境がWindowsという方(miwato様のQiita記事):
Terraformインストール(Windows版)
もう少ししっかりと入門したい方:
クライン様のYoutube動画講義

おすすめの書籍:
初めてのAWSという方にオススメのハンズオン教材。
ネットワーク構築の基礎を手を動かして学べます。
コメント