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"
}