【Terraform】基本的な操作と設定まとめ
はじめに
「Terraformとは?」基本的な概念と操作、また設定についてまとめました。
特徴
Terraformには以下の特徴があります。
- 複数のクラウドサービスに対応している
- 人間にとって読みやすい設定
- 状態をもつリソースの管理
- Trraform Cloud
宣言的
状態をもつリソースでも宣言的な設定ファイルで管理することができます。実際のインフラの状態はState File
として管理され、どんな変更が行われるかをトラックできます。
.tf
設定ファイル
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 4.16"
}
}
required_version = ">= 1.2.0"
}
provider "aws" {
region = "us-west-2"
}
resource "aws_instance" "app_server" {
ami = "ami-830c94e3"
instance_type = "t2.micro"
tags = {
Name = "ExampleAppServerInstance"
}
}
terraform {}
このブロックには、Terraform自体の設定や必要なProviderなどを記述します。
provider {}
このブロックには、利用するProviderについてより詳細に記述します。
resource {}
このブロックには、例えば EC2
等、インフラとして利用するリソースを記述します。
ブロックには2つの文字列が記述されています。 type
とname
です。
type
のプリフィックスは provider
の名前と対応しています。これによって
- どのプロバイダの
- どのリソースか
が判別されます。
構築
設定ファイルを作成したら、必要なプロバイダをインストールします。
terraform init
さらに、設定ファイルをフォーマットします。
terraform fmt
さらに、設定ファイルのバリデーションを行います。
terraform validate
最後に、設定を適用します。
terraform apply
行われる予定の変更がCLI上に出力されます。確認し、変更を実際に適用します。
変更
以下のコマンドを実行することで、変更を適用できます。
terraform apply
行うべき変更がない場合は、その旨がCLI上に出力されます。
変更がある場合には、それを確認し適用できます。
破棄
使用しないリソースを破棄する場合は、以下のコマンドを実行します。
terraform destroy
apply
と同様に、必要な変更は実行前に出力されます。また、実行順も自動的に決定します。
変数
設定ファイルに変数を定義して使うことができます。
variable "instance_name" {
description = "Value of the Name tag for the EC2 instance"
type = string
default = "ExampleAppServerInstance"
}
resource "aws_instance" "app_server" {
ami = "ami-08d70e59c07c61a3a"
instance_type = "t2.micro"
tags = {
Name = var.instance_name // ここで使用
}
}
また、実行時の引数として、変数に値を設定することも可能です。
terraform apply -var "instance_name=YetAnotherName"
出力データの利用
apply
の実行時の出力を利用することができます。
output "instance_id" {
description = "ID of the EC2 instance"
value = aws_instance.app_server.id
}
output "instance_public_ip" {
description = "Public IP address of the EC2 instance"
value = aws_instance.app_server.public_ip
}
terraform output
# instance_id = "i-0bf954919ed765de1"
# instance_public_ip = "54.186.202.254"
この出力は、プロジェクト内の別のリソースに引き渡すなどして利用することができます。
リモート状態管理
Terraform Cloudを利用すればインフラの状態をリモートで管理することができます。
terraform
ブロック内に cloud
の設定を追加します。
terraform {
cloud {
organization = "organization-name"
workspaces {
name = "learn-tfc-aws"
}
}
required_providers {
///
}
}
CLI上でTerraform Cloudにログインし Terraform init
します。
Cloudを使用しないない場合は、ローカルに自動で作成されたterraform.tfstate
ファイルで
状態が管理されますが、Cloudを使用する場合はこのファイルは不要になります。
まとめ
基本的な概念と操作、また設定についてまとめました。
参考
Discussion