はじめに
こんにちはー
TIG DXチーム 1のゆるふわエンジニアの前原です。
最近は、プラットフォームを新規で構築するプロジェクトや、既存の環境を運用改善していくプロジェクトに従事しています。その中で私はクラウドインフラ部分を担当しており、アーキテクチャデザインや、Terraform・Ansible・Packerといった構成管理ツールを利用したAWSやGCP環境の構築をしています。
本記事では、最近バージョンアップしたTerraform 0.12の構文がこんな感じで変わったよー的な話を伝えていきます。
大きくは以下の流れで進めます。
- Terraformの事始め (今回の記事です)
- Terraform 0.12でVPCを構築する (次回の記事で説明します!)
これからTerraformを触っていきたいといった方にもわかるように書いていきます。
そのため少し長めの内容になってしまいますが、お付き合いください。
Terraformとは
Terraformは、HashiCorpによって開発された構成管理ツールで、主にクラウド環境(クラウド以外でも利用可能)を構築するときに利用します。
Terraformなどのツールを利用しない場合は、ブラウザを通してGUIから構築するケースがあるかと思います。その場合は、作業ミスをなくすために設定手順書やパラメータシートを元に構築するかとおもいますが、規模が大きくなったり関わる人が多くなってくると、人による設定ミスなどが発生することも多いのでは無いでしょうか。ミスを回避するために、各種施策やドキュメントの陳腐化を防ぐ方法に時間を費やすことも多々あるでしょう。
そういったケースにTerraformのような構成管理ツールを利用することで、インフラの構成をコードに落とし込み、状態を定義できるようになります。
これにより誰が実行しても結果が同じになることで、ミスを低減することが可能です。また、コードを見ることで常にインフラの最新状態を把握できます。また、コード化しているため、Gitなどのバージョン管理システムで管理することもできます。
…と、ここまでメリットについて書きましたが、いざTerraformを使用するとそれなりに学習コストが必要となります。
Terraformの事始め
ここでは、Terraformを実行するための環境をつくります。
環境
Terraformを体験するために以下の環境で行います。
AWS
Terraform: 0.12.6
&0.11.14
tfenv: 1.0.1
MacBook Pro Mojave
orWindows10 64bit
Terraformのインストール
Terraformのインストールを行います。
Mac OSの場合
Terraformの実行環境を準備します。
今回は、バージョンの切り替えを楽にしてくれるtfenvを利用します。
### Install tfenv |
tfenvでterraformをインストールし、使用可能なバージョンを確認します。
$ tfenv install latest |
バージョンの切り替えは、use
を利用することで簡単に切り替えることができます。
$ tfenv use 0.11.14 |
tfenvを使用しない場合は、こちらのサイトを確認してください。
Windowsの場合
Terraformをダウンロードします。
ダウンロードしたファイルを解凍し、C:¥Windows
配下にterraform.exe
を配置します。
コマンドプロントもしくはお使いのターミナルを開き、以下のコマンドを発行します。
$ terraform version |
ここでは試しておりませんが、Windowsもtfenv(only Git-bash)に対応しているので興味のある方は試して頂ければと思います。
- GitHub: tfenv
Terraform を実行するまでにやること
環境変数の設定
AWSのAPIを発行するために必要な設定です。
AWSのIAM Userであらかじめユーザを作成し、アクセスキーとシークレットキーを環境変数にセットします。
# MacOSの場合 |
Mac OSの場合に限りますが、複数のAWSアカウント扱っている場合は、direnvを利用するとディレクトリ単位で環境変数を切り替えることができるため便利です。
もし、HTTP Proxy配下の環境で実行したい場合は以下のオプションも追加で設定ください。
# MacOSの場合 |
tfstateファイルの管理について
tfstateファイルは、Terraformで管理しているインフラの状態を管理するためのファイルです。
このファイルは非常に大切です。
通常、tfstateファイルを保存する場所を指定しない場合は、Terraformを実行したディレクトリに保存されます。
そのため、複数人でTerraformを実行する環境や、可用性を意識するとローカルでの保存はイケてないです。
そこで、tfstateファイルを管理するためのS3 バケットを用意します。
(AWS CLIが実行できることを前提とします)。
また、バケットはバージョニングの設定をします。
バージョニングすることでtfstateファイルに予期せぬ更新や、壊してしまった時に戻せるようにするためです。
### バケットの作成 |
リージョンの選択
リージョンは適切に選択してください。
もし学習用途であればバージニア(us-east-1)を利用することを個人的におすすめします。
理由は、単純に安いからです!
ただ、本記事は諸事情によりシドニーで構築しています(ap-southeast-2)
Terraformのディレクトリ構成
以下のようなフラットなディレクトリ構成で、1つのディレクトリにtfファイルを配置する設計にします。
以下の3つのtfファイルについては、次章以降で説明します。
- backend.tf
- provider.tf
- versions.tf
. |
Backendの指定
tfstateファイルをS3 バケットで管理するため、Backend用のtfファイルを作成します。
先ほどAWS CLIで作成したバケットを指定します。
terraform { |
Providerの指定
Terraformは、AWSだけでなく、GCP、Alibaba Cloudなど様々なプロバイダに対応しています。
今回は、AWSを利用するための定義をします。
また、リージョンを指定します。
provider "aws" { |
Versions
このファイルはなくても問題ないのですが、Terraform 0.12から構文が変わっているため、明示的に記述します。
以下により0.12
以上のバージョンでないと実行できないようになっています。
(Terraformのアップグレードコマンドで0.12にした場合は、自動で作成されます)
terraform { |
Terraform init
準備が整ったので、Terraformを実行します。
まず、Terraformのワークスペースの初期化や、プラグインをダウンロードするためにterraform init
を実行します。
terraform init |
問題がなければ以下のようなメッセージが出力されます。
Terraform has been successfully initialized!
仮に0.11.14
でterraform init
を実行すると以下の結果になります。
terraform init |
Workspaces の準備
本構成は、stg
とprd
の2つの環境を構築します。
stgはStaging(検証環境)、prdはProduction(本番環境)の略です。
Terraformでは、複数の環境を構築するにあたって便利なWorkkspace
があります。
Workspaceを使うことで、ディレクトリで環境を分けることなく、コード内で識別することが可能となります。
それでは、Workspaceコマンドでstg
とprd
を作成します。
$ terraform workspace new stg |
現在のWorkspaceを確認します。
$ terraform workspace show |
最後に作成したprd
が対象になっているため、変更します。
$ terraform workspace select stg |
まとめ
これで、いよいよTerraformで環境構築できる準備が整いました。
次回の記事では実際のAWSリソースのTerraform定義から、VPCを作成する手順を説明していきますのでお楽しみに!
- はじめてのTerraform 0.12 ~実践編~
- 1.Technology Innovation Groupの略で、フューチャーの中でも特にIT技術に特化した部隊です。その中でもDXチームは特にデジタルトランスフォーメーションに関わる仕事を推進していくチームです。 ↩