Terraformに入門してみた。
今回はTerraformに入門してみたと題して、Terraformとは何者か?ということをざっくり紹介できたらなと思っております。
最近知らない技術に業務で触れる機会が本当に多く、入門記事ばかりですがお付き合いください。
Terraformとは
TerraformはHashiCorpが開発しているIaCツールでGo言語で開発されています。
IaC(Infrastructure as Code)とはインフラをコード化して管理する方法で近年注目されており、こちらを実現するツールの一つとしてTerraformが存在します。競合ツールとして有名なのがAWS CloudfFormationです。
CloudfFormationとの大きな違いとして、「プロバイダーを問わない」点にあります。CloudfFormationはAWS専用のIaCツールですが、TerraformはAWSはもちろん、Azure・GCP等といったほとんど全てのプロバイダーに対応しています。
また独自のTerraformCLIが存在し簡単なコマンドでインフラを作成・削除することが可能です。
Terraformの仕組みと基本コマンド
terraformの仕組みを基本コマンドと一緒に紹介します。
1. terraform init
Terraformの環境を構築したら最初に実行する必要があるコマンドです。Terraformの初期設定を行なってくれるコマンドで、ワークスペースの初期化やプラグインがダウンロードされます
2. terraform plan
terraformの規則に従ってコードを書き終えた時に実行するコマンドです。変更内容が表示されるコマンドで、コードで記載した内容が正しいか確認することができます。
(例 S3バケットをap-north-eastで作成します。みたいな内容が表示される)
3. terraform apply
planで変更内容を確認したら、applyで変更を実行します。コマンドを実行すると変更内容が表示されるので、問題がなければyesを入力します。入力後リソースの構築が実行され、正常に終了すれば完了です。
4. terraform destroy
applyしたリソースを破棄するコマンドです。apply同様コマンドを実行すると破棄対象が表示されるため、問題なければyesを入力します。入力後リソースの破棄が実行され、正常に終了すればリソースが削除されます。
ここまでが流れになります。
流れとは別に一つ整形するコマンドを紹介します。
(番外編)terraform fmt
インデントなどのスタイルをフォーマットするコマンドです。gitにコミットする際等、整形したい時に実行するコマンドです。
tfファイル
terraformのコードを記載する際は拡張子.tfを用いたファイルを使用します。tfファイルの書き方が決まっているのでそのフォーマット(一例)を紹介します。
resource "リソースの種類" "リソース名" {
設定項目1 = 値1
設定項目2 = 値2
設定項目3 = 値3
}
こちらはresourceを記述する際のフォーマットになります。ここでいうresourceは例えばAWSのVPC・サブネット・EC2インスタンス等を指しています。
"リソースの種類"の箇所にVPCやサブネットといった値を設定(書き方は公式ドキュメントを参照)します。
"リソース名"は任意の名前を指定することが可能です。
上記はリソース指定の際の書き方ですが、プロバイダーを指定する際の書き方は別のフォーマットになります。しかしシンプルで分かりやすくそんなに難しく感じないのではないかと思います。
(例)
プロバイダーをAWSを指定。リージョンをap-northeast-1に指定する場合
provider "aws" {
region = "ap-northeast-1"
}
その他記載方法は公式ドキュメントを参照してください。
tfstateファイル
Terraformではデフォルトでtfstateファイルというものが存在します。名前の通りTerraformで管理しているインフラの状態を記録するファイルです。tfstateファイルは自動生成され、保存場所を指定してしない場合Terraformを実行したディレクトリに保存されます。
インフラに変更を加える場合、Terraformはtfstateファイルを見てリソースの追加・変更があるかを判断しています。ローカルにtfstateファイルがあると、メンバーが最新のtfstateファイルからリソースの状況を参照できなくなるため、通常はS3などメンバーが共有できる所で管理します。
Terraform実行環境構築
terraformを実行するために必要なツールはterraformの環境とAWS CLIです。またTerraformを実行するためのAWSクレデンシャルが必要です。terraformの環境はDockerを使って作成することも可能です。
私はAWSクレデンシャルの準備とDockerで環境を構築し実行しています。
まとめ
入門編としてterraformの基礎をまとめてみました。
IaCツールの入門としてこれから入る方には、CloudFormationよりはterraformから入りプロバイダー問わずインフラを作成できる方がいいかもしれないです。
今後本格的にterraformを触っていくので実務で感じたことがあったらまた記事にしてまとめてみようと思います。
最後まで読んでいただきありがとうございましたmm