TL;DR

Terraform で作成・管理したいインフラのオブジェクト。resource ブロックで宣言する。リソースの種類はプロバイダが提供する。

仕組み

resource ブロックにはリソースの種類とラベルの 2 つを付ける。ラベルは Terraform がステートの中でリソースを追跡するための名前で、インフラそのものは変えない。設定の中では <TYPE>.<LABEL>.<ATTRIBUTE> の形で属性を参照する。

公式ドキュメントによると、Terraform はリソースを次のように扱う。

  • 設定にあるが、まだ存在しないリソースを作成する
  • 引数が変わったリソースを更新する。その場で更新できなければ、削除して作り直す
  • ステートにあるが設定から消えたリソースを削除する

count、for_each、depends_on、provider、lifecycle のメタ引数で、リソースの扱い方を変えられる。count と for_each は同時に使えない。

例

resource "aws_instance" "web" {
  ami           = "ami-a1b2c3d4"
  instance_type = "t2.micro"
}

関連

出典