はじめに
次の仕事でTerraformを使うことになったため、勉強のためにまとめていこうと思います。
私のスキル感
以前、CloudFormationは勉強して以下のような記事をいくつか書きましたが、Terraformは以前気になって少し触ってみた程度で、もうすっかり忘れてしまったので改めて学びなおそうと思います。
Terraformとは
HashiCorpが提供しているツールで、いわゆるインフラ環境をコードで管理するIaC(Infrastructure as Code)と呼ばれるツールの一種となります。
CloudFormationも同様のツールとなりますが、CloudFormationがAWS環境の構築のみ対象としているのに対して、TerraformはAWSだけではなく、GCPやAzureでも使用できるツールとなります。
また、CloudFormationと同様、各種クラウド基盤のサービス部分の構築を対象としているため、サーバの設定などを行う場合はAnsible等のツールを利用する必要があります。
勉強のための参考書など
いきなり独学で覚えるのも大変なので、以下を参考に体系的に勉強してみようと思います。
「実践Terraform」は以前触ってみた際に買って途中までやって積んであったもの、「AWSとTerraformで実現するIaC」はちょうどUdemyでセールになっていたのでポチったものです。
Terraformのインストール準備
今回は以下環境を想定してインストールしてみようと思います。
| 種別 | 内容 |
|---|---|
| OS | Windows 11 Home |
| アーキテクチャ | AMD Ryzen 7 3700U |
| 基盤環境 | Amazon Web Service |
目的となるTerraformをインストールする前に、前提となる機能や周辺設定を先に整えておきます。
- Terraform用IAMユーザ作成
- AWS CLIのインストール
- AWS CLIへのTerraform用ユーザプロファイル作成
- Gitのインストール
上記1~3はTerraformからAWS環境を操作するための専用ユーザ作成と操作に必要となるAWS CLIのインストール&セットアップ、4はTerraformのソースコード管理と、後述するtfenvでGitのパッケージに含まれるGit Bashを使いたいためGitのインストールを行います。
Terraform用IAMユーザ作成
Terraformからの実行用として、AWSのIAMに以下Terraformユーザを作成しておきます。
実際の運用環境ではしっかりと権限設定する必要がありますが、今回はTerraformの勉強が目的なのでAdministratorAccessの管理ポリシーを直接割り当ててしまいます。
| 設定項目 | 設定内容 |
|---|---|
| ユーザー名 | terraform |
| AWS認証情報タイプを選択 | アクセスキー - プログラムによるアクセス |
| 既存のポリシーを直接アタッチ | AdministratorAccess |
| タグ | 未設定 |
IAMユーザ作成後、作成したユーザの「認証情報」タブからアクセスキーをCSVファイル等で取得しておきます。
AWS CLIのインストール
AWSの以下オンラインマニュアルよりWindows用インストーラをダウンロードして実行するだけです。
インストール完了後、PowerShellやコマンドプロンプト等で以下のように表示されればOK。
aws --version
aws-cli/2.7.10 Python/3.9.11 Windows/10 exe/AMD64 prompt/off
AWS CLIへのTerraform用ユーザプロファイル作成
先ほど取得したアクセスキーを使い、AWS CLIにTerraform用のユーザプロファイルを作成します。
PowerShellよりaws configureを実行し、以下のように登録していきます。
aws configure
AWS Access Key ID [None]: XXXXXXXXXXXXXXXXXXXX
AWS Secret Access Key [None]: YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
Default region name [None]: ap-northeast-1
Default output format [None]: json
尚、すでに別のユーザプロファイルが存在する場合は以下を参考に別のプロファイルを作成します。
Gitのインストール
GitもWindows版は以下ダウンロードページよりWindows用インストーラをダウンロードして実行するだけです。
インストール時、色々と聞かれますが、そのままデフォルトでも問題ありません。
Terraformのインストール
今回はtfenvというツールを使ってTerraformをインストールしようと思います。
tfenvとはTerraformを複数バージョンインストールして、切り替えて使用できるツールです。
Terraformは頻繁にバージョンアップが行われており、バージョンにより構文が変わってしまって動かないといったこともあるため、そのような場合、tfenvでバージョンを切り替えて使用するといった運用を行うことができます。
今回の目的としてはTerraformの使い方を覚えることなので、tfenvはインストールしなくても良いですが、実際の運用では使われることも多いと思われるので、これを機にtfenvも使ってみようと思います。
- tfenvのインストール
- tfenv用環境変数の設定
- tfenvを使用したTerraformのインストール
尚、tfenvを使用しない場合のTerraformインストール方法も補足として記載したため、tfenvを使用しない場合は、以下の補足を確認してください。
- 【補足】tfenvを使用しないTerraformのインストール
- 【補足】コマンドからのTerraform用環境変数の永続設定
tfenvのインストール
tfenvのインストール&初期セットアップは、先ほどインストールを行ったGit Bashより以下tfenvのGitHubからClone、その後tfenvのパスを設定するため環境変数の設定を行うといった流れとなります。
以下をGit Bashから実行してGitHubからダウンロードします。
なお、以下の場合「C:\Users\[ユーザ名]」に「.tfenv」というフォルダが作られて、その中にCloneしたファイルが格納されますので、別の場所にしたい場合はパスを変更してください。
git clone https://github.com/tfutils/tfenv.git .tfenv
tfenv用環境変数の設定
tfenvのコマンドへのパスを通すため、ホームディレクトリ(C:\Users\[ユーザ名])に「.bashrc」ファイルを作成してPATHの環境変数設定を行います。
パスはWindowsの形式ですと設定ができないそうなので、以下のように変換します。
- 【変換前】:C:\Users\UserName.tfenv\bin
- 【変換後】:/c/Users/UserName/.tfenv/bin
また、以下ではヒアドキュメントで設定を行っておりますが、そのまま実行すると$PATHが変数展開されてしまうため、_EOF_をシングルクォートかダブルクォートでくくるようにします。
cat << "_EOF_" >> .bashrc
export PATH=$PATH:/c/Users/UserName/.tfenv/bin
_EOF_
.bashrcが作成出来たら、sourceコマンドで作成した.bashrcを読み込んでおきます。
source .bashrc
tfenvを使用したTerraformのインストール
Terraformをtfenvのコマンドを使用してダウンロード&インストールを行います。
tfenvを使用してインストール可能なTerraformのバージョンを確認するためには以下コマンドを実行します。
tfenv list-remote
すると以下のようにインストール可能なTerraformバージョンが表示されるため、インストールするバージョンを控えておきます。
1.3.0-alpha20220622
1.3.0-alpha20220608
1.2.3
1.2.2
(省略)
今回は記事を書いている時点で最新安定板となる「1.2.3」をインストールしてみようと思います。
tfenv install 1.2.3
tfenvコマンドを実行することで、指定のバージョンのTerraformをインストールすることができましたが、tfenvを使用する場合、さらに端末にインストールされているバージョンからどのバージョンを使用するかを指定する必要があるため、tfenv useコマンドで指定します。
tfenv use 1.2.3
現在使用しているバージョンを確認するためにはtfenv listコマンドを実行します。
コマンド結果のうち、先頭に「*」が記載されているバージョンが現在使用中のバージョンとなります。
tfenv list
* 1.2.3 (set by /c/Users/UserName/.tfenv/version)
インストールしたバージョンが「*」で指定されていれば完了です。
【補足】tfenvを使用しないTerraformのインストール
補足としてtfenvを使用しない場合のTerraformインストール方法についても記載しておきます。
Windows版のインストール自体は簡単で、HashiCorpのダウンロードページからダウンロードしたファイルを任意の場所に格納して実行するだけとなります。
ただ、適当な場所に置いただけではパスが通っていないので、環境変数の設定も行っておきます。
【補足】コマンドからのTerraform用環境変数の永続設定
GUI画面から設定を行っても良いですが、今回はPowerShellで設定しようと思います。
コマンドからの環境変数設定方法については以下で紹介しているため、ユーザ変数のPATHに永続設定を追加する方法だけ記載します。
設定前の設定を以下コマンドで確認します。
[System.Environment]::GetEnvironmentVariable('PATH' , 'User')
環境変数PATHにパスを追加するには既存設定の後ろに付け加えないといけないため、ちょっと面倒ですが仮の変数を作って、結果を結合して作ります。
$path = [System.Environment]::GetEnvironmentVariable('PATH' , 'User')
$path += ';' + 'C:\Users\UserName\Documents\terraform_1.2.3_windows_amd64'
[System.Environment]::SetEnvironmentVariable('PATH' , $path , 'User')
一度PowerShellを閉じたのち、再度開き、パス指定なしで以下のコマンドが実行できれば成功です。
terraform.exe --version
Terraform v1.2.3
on windows_amd64
おわりに
今回はWindowsにtfenvとTerraformをインストールして、初期セットアップまで行いました。
次回は開発するのに必要となるツール類のインストール&セットアップを行っていこうと思います。