クラウドを学び始めてしばらくすると、インフラをコード化できることを知りました。
Infrastructure as Code(IaC)ってやつですね。
IaCのツールは様々です。
AWSであればCloudFormation、AzureであればARMTemplate、
そして、マルチクラウドに対応しているIaCのツールがHashiCorp社のTerraformです。
前に少しだけ触ったことはあったTerraformを改めて学んで、知見がたまってきたのでチュートリアル形式でまとめてみたいと思います。題材は、学習のためにAWSCLIで作った環境をTerraformで再現することにしました。
作りながら覚えるTerraform入門シリーズ
システム構成
ELB、EC2、RDSなどの一般的な3層アーキテクチャの構成です。
ソースコードは以下にあります。
環境
- macOS BigSur 11.3.1
- Homebrew 3.1.9
Terraformインストール
Homebrewで簡単にインストールできます。
brew install terraform
現時点での最新バージョン0.15.5
がインストールされました。
実態は/usr/local/bin/
にあるのでPATHを通す必要もありませんでした。
terraform --version
Terraform v0.15.5
ちなみに、tfenv
を使ってインストールする方法もあります。
tfenv
を使うと、複数のバージョンを切り替えたり、チーム開発においてバージョンを固定するのに便利そうです。ただ、tfenv
経由でterraformコマンドを実行すると遅かったので、現時点では使うのを控えています^^;
# tfenvのインストール
brew install tfenv
# tfenvを使ってterraformをインストール
tfenv install 0.15.4
tfenv install 0.15.5
# デフォルトバージョンを指定
tfenv use 0.15.4
# 一覧を表示(0.15.4を使う設定になっている)
tfenv list
0.15.5
* 0.15.4 (set by /usr/local/Cellar/tfenv/2.2.2/version)
# バージョン確認
terraform --version
Terraform v0.15.4
# バージョン切り替え
tfenv use 0.15.5
# バージョンが切り替わった
tfenv list
* 0.15.5 (set by /usr/local/Cellar/tfenv/2.2.2/version)
0.15.4
# バージョン確認
terraform --version
Terraform v0.15.5
tfenv
を利用する場合、カレントディレクトリに.terraform-version
というファイル名でバージョンを書いてあげると、指定バージョンの利用を強制できます。tfenv install
だけで(引数なしに)指定バージョンをインストールすることもできるようになります。
0.15.5
VSCode拡張機能
以下の2つをインストールしました。
「HashiCorp Terraform」で構文チェック、シンタックスハイライト、候補表示ができるようになりますが、リファレンスにジャンプしたい場合に「Terraform Autocomplete」が便利そうだったので試験的に使っています。
それと、リンクページにも記載のあるとおり「HashiCorp Terraform」には自動フォーマットの機能がありますので、"editor.formatOnSave": true
を追記して有効にしておくと便利です。保存のたびにインデントを整えてくれます。
Formatting
To enable formatting, it is recommended that the following be added to the extension settings for the Terraform extension:
"[terraform]": {
"editor.formatOnSave": true
}
エイリアス設定
terraformを使い始めると次のようなコマンドを頻繁に入力することになります。
- terraform plan
- terraform apply
- terraform destroy
毎回terraform
と打つのが面倒なので、.zshrc
にエイリアスを登録しておくと便利です。
alias tf="terraform"
alias tfp="terraform plan"
alias tfv="terraform validate"
alias tff="terraform fmt -recursive"
alias tfa="terraform apply -auto-approve"
alias tfd="terraform destroy -auto-approve"
apply
やdestroy
は作成・更新・削除するためのコマンドです。
-auto-approve
をつけているのでyes/noの確認の入力を求められませんが、実際の業務で使用するのはとても危険なので、必要に応じてカットするようにしましょう。慣れるまではエイリアスを使わずに手入力して、planの結果を確認してからyes/noという流れのほうが良いかもしれません。
git-secretsのインストール
terraformを使ってAWSにアクセスするには、あらかじめ認証情報を登録しておく必要があります。
認証情報を定義する方法はいくつかありますが、そういった機密情報を誤ってGitのソース管理に含めてしまわないようにgit-secretes
をインストールしておきます。
# インストール
brew install git-secrets
# git-secretsの設定
git secrets --register-aws --global
git secrets --install ~/.git-templates/git-secrets
git config --global init.templatedir '~/.git-templates/git-secrets'
AWSCLIのインストール
AWSへアクセスするための認証情報を登録するためにAWSCLIをインストールします。
公式ページ の「MacOS」のリンクからPKGをダウンロードしてインストールすることができます。
AWSCLIがインストールできたら、IAMユーザーのアクセスキーを登録します。
このユーザーのアクセス権に従ってterraformでリソースの作成・更新・削除などが行われますので、通常はAdministratorAccess
の権限を持つユーザーを作成して割り当てます。
aws configure set aws_access_key_id <アクセスキーID>
aws configure set aws_secret_access_key <シークレットアクセスキー>
~/.aws/credentials
を確認して、認証情報が登録できていることを確認します。
[default]
aws_access_key_id = <アクセスキーID>
aws_secret_access_key = <シークレットアクセスキー>
試しに動作確認を行ってみます。
以下のコマンドを実行して、利用するIAMユーザーの情報が表示されればOKです。
aws sts get-caller-identity
{
"UserId": "ABCDEFGHIJKLMNOPQRSTUVWXYZ",
"Account": "123456789012",
"Arn": "arn:aws:iam::123456789012:user/terraform"
}
これでterraformを利用するための準備は完了です。
次回は、VPCの作成と削除のコマンドを通じて、terraformの基本的な使い方を書いてみたいと思います!