【Terraform】基本的な操作と設定まとめ

2023/05/17に公開

はじめに

「Terraformとは?」基本的な概念と操作、また設定についてまとめました。

特徴

Terraformには以下の特徴があります。

  • 複数のクラウドサービスに対応している
  • 人間にとって読みやすい設定
  • 状態をもつリソースの管理
  • Trraform Cloud

宣言的

状態をもつリソースでも宣言的な設定ファイルで管理することができます。実際のインフラの状態はState Fileとして管理され、どんな変更が行われるかをトラックできます。

.tf設定ファイル

main.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つの文字列が記述されています。 typenameです。
typeのプリフィックスは providerの名前と対応しています。これによって

  • どのプロバイダの
  • どのリソースか

が判別されます。

構築

設定ファイルを作成したら、必要なプロバイダをインストールします。

terraform init

さらに、設定ファイルをフォーマットします。

terraform fmt

さらに、設定ファイルのバリデーションを行います。

terraform validate

最後に、設定を適用します。

terraform apply

行われる予定の変更がCLI上に出力されます。確認し、変更を実際に適用します。

変更

以下のコマンドを実行することで、変更を適用できます。

terraform apply

行うべき変更がない場合は、その旨がCLI上に出力されます。

変更がある場合には、それを確認し適用できます。

破棄

使用しないリソースを破棄する場合は、以下のコマンドを実行します。

terraform destroy

applyと同様に、必要な変更は実行前に出力されます。また、実行順も自動的に決定します。

変数

設定ファイルに変数を定義して使うことができます。

variables.tf
variable "instance_name" {
  description = "Value of the Name tag for the EC2 instance"
  type        = string
  default     = "ExampleAppServerInstance"
}
main.tf
 resource "aws_instance" "app_server" {
   ami           = "ami-08d70e59c07c61a3a"
   instance_type = "t2.micro"

   tags = {
     Name = var.instance_name // ここで使用
   }
 }

また、実行時の引数として、変数に値を設定することも可能です。

terraform apply -var "instance_name=YetAnotherName"

出力データの利用

applyの実行時の出力を利用することができます。

outputs.tf
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の設定を追加します。

main.tf
terraform {
 cloud {
   organization = "organization-name"
   workspaces {
     name = "learn-tfc-aws"
   }
 }

 required_providers {
   ///
 }
}

CLI上でTerraform Cloudにログインし Terraform initします。

Cloudを使用しないない場合は、ローカルに自動で作成されたterraform.tfstateファイルで
状態が管理されますが、Cloudを使用する場合はこのファイルは不要になります。

まとめ

基本的な概念と操作、また設定についてまとめました。

参考

https://developer.hashicorp.com/terraform/tutorials/aws-get-started

Discussion