Terraformを使ってAWSやGCP等のクラウドインフラストラクチャをコードで管理(IaC=Infrastructure as Code)していきます。
第1回となる前回はWindows環境にてTerraformの実行環境を構築し、テストとしてAWS上にEC2インスタンスを起動するまでの手順を解説しました。
第2回となる今回は、Terraformを使用するうえで理解しておくべき基本的な知識について解説します。
最低限理解しておきたいTerraform用語
用語 | 意味 |
---|---|
Configuration コンフィグレーション | インフラを表したコード。 .tfファイルにDSLであるHCL2(Hashi Corp Language2)で書くTerraformのコードのこと。 |
HCL2 | HashiCorp Configuration Languageの略 |
Resource リソース | Terraformで管理対象となる基本単位 |
Provider プロバイダ | ResourceやData Sourceなどを作成/更新/削除するプラグイン。 aws/google(gcp)/azureなど。 |
Provisioner プロビジョナ | リソースの作成/削除時に実行するスクリプトなどのプラグイン。 local-exec/remote-exec/chefなど |
State ステート | Terraformが認識しているリソースの状態が記載されたファイル。 tfstateファイルのこと。 |
Backend バックエンド | Stateの保存先。local/s3/gcsなど。 |
Module モジュール | Resourceなどを再利用するためにConfigurationを纏めたもの。 |
tfstateファイル
Terraformで作成したリソースの情報は『tfstateファイル』に記録されます。
tfstateファイルはTerraformが管理しているリソースの現在の状態を記録しているファイルで、terraformにとって非常に重要な役割を担っているファイルとなります。
terraform plan で表示される実行計画は、このtfstateファイルとの差分を表示しています。 そうすることで、terraformは実際のリソース(AWS等)の構成とのマッピングを正確かつ素早く行うことを可能としています。
tfstateファイルを使用している目的は公式ドキュメントにて詳しく解説されていますので、より深く理解するために一読をお勧めします。
なお、tfstateファイルについては本シリーズの次回以降で詳しく解説する予定です。
Terraformコードの記述
Terraformのコードは拡張子 .tf のファイルに HCL2(Hashi Corp Language2) で記述します。
以下のコードはAWSの東京リージョンにEC2インスタンス(OSはAmazon Linux2、インスタンスタイプは”t3.nano”)を作成するコードの例です。
provider "aws" {
profile = "terraform"
region = "ap-northeast-1"
}
resource "aws_instance" "tftest" {
ami = "ami-08c84d37db8aafe00"
instance_type = "t3.nano"
}
コードは一つのファイルにまとめて書くことも、複数のファイルに分割して書くことも可能です。
小規模な環境であれば一つのファイルに記述することで問題ありませんが、ある程度大きな規模の環境になってくると環境(本番、ステージング、開発、etc.)やリソースのタイプ(EC2、VPC、RDS、etc.)ごとに分割して記述することで保守性が高まります。
ある程度の規模のアプリケーションを開発する際に、一つのファイルに何千行ものコードを記述するのではなく複数のファイルに分割して記述するように、インフラの構築や管理をコード化するIaCにおいても保守管理性を維持することは重要です。
Terraformコマンド
Terraformのコマンドで主に使用するものは以下のとおりです。
コマンド | 用途 |
---|---|
plan | コードの実行計画を確認します。 いわゆるdry run(ドライラン)です |
apply | コードの内容を実行(適用)する。 オプションなしで実行すると、plan が先に実行され、確認プロンプトで yes と入力することにより実際に適用される。 オプション -auto-approve をつけると plan による確認を省略することができる。 |
destroy | コードに記載したリソースを削除する。 applyと同様にオプション -auto-approve をつけると実行計画の確認を省略することができる。 |
リソースの作成
EC2インスタンス等のリソースを作成する場合は、Terraformの apply コマンドを実行します。
$ terraform apply
内容に問題がなければ”yes”と入力して実行します。 ※”yes”以外を入力すると実行は中止されます。
リソースの変更(インプレースアップデート)
リソースに変更を加えるには、tfファイルのリソースを編集して再度applyを実行します。
試しにEC2インスタンスにタグを追加してみます。
provider "aws" {
profile = "terraform"
region = "ap-northeast-1"
}
resource "aws_instance" "tftest" {
ami = "ami-08c84d37db8aafe00"
instance_type = "t3.nano"
tags = { #EC2インスタンスにタグを追加する
name = "TestTag"
}
}
編集したらtfファイルを保存し、applyを実行します。
$ terraform apply
tfstatファイルの内容と照合され、差分が変更点として表示されます。 インプレースアップデートとしてタグ『TestTag』が追加されることが表示されています。 内容に問題がなければ”yes”と入力して実行します。
※”yes”以外を入力すると実行は中止されます。
なお、EC2インスタンスのユーザデータの編集など、インスタンスの停止を伴う変更もインプレースアップデートとして扱われますが、apply実行時に停止が必要であるかどうかは確認できませんので注意が必要です。
リソースの変更(リプレース)
既に作成済みのリソースに対する変更は『インプレースアップデート』として実行されますが、インスタンスの再作成が必要な項目を変更する場合は、『リプレース』として実行されます。
リソースの削除
リソースを削除する場合は destroy を実行します。
$ terraform destroy
今回は、Terraformの基本的な使い方を解説しました。
次回はTerraformのコードを記述する言語(DSL)であるHCL2について基本を解説します。