Terraform Cloudの課金単位のResourceについて説明してみる

2023.11.13

Terraform CloudはResourceの数に対して課金されます。

Standard $0.00014 per hour per resource

HashiCorp Terraform: Enterprise Pricing, Packages & Features

初見では、「Resourceの数って何?」と思う方も多いかもしれません。

この記事では、Terraform Cloudの課金単位であるResourceについて説明します。

結論

  • 課金単位のResourceとは、Terraformで管理しているリソースを指す
    • 例えばEC2インスタンス(aws_instance)やS3バケット(aws_s3_bucket)など
    • null_resourceやdataは含まない
  • Resource数の確認方法
    • terraform state listで確認
    • Terraform Cloudのコンソールから確認

Estimate Terraform Cloud Costs - Plans and Features - Terraform Cloud | Terraform | HashiCorp Developer

課金単位は、Terraformで管理しているリソースの数

以下のコードの場合、リソースの数は3になります。 (aws_subnet,aws_route_table,aws_route_table_association)

resource "aws_subnet" "main" {
  cidr_block        = cidrsubnet(data.aws_vpc.target.cidr_block, 2, var.az_numbers[data.aws_availability_zone.target.name_suffix])
  vpc_id            = var.vpc_id
  availability_zone = var.availability_zone
}

resource "aws_route_table" "main" {
  vpc_id = var.vpc_id
}

resource "aws_route_table_association" "main" {
  subnet_id      = aws_subnet.main.id
  route_table_id = aws_route_table.main.id
}

terraform-provider-aws/examples/networking/subnet/subnet.tf at main · hashicorp/terraform-provider-aws

null_resourcedataは含まれません。

複数のリソースを作る際に、for_eachなどを使うことがあると思います。(AZを配列にして、Subnetを作成等)

その場合は、コード上ではリソースブロックが1つなります。しかし、Terraformで実際に管理しているリソース に対して課金されるため、for_eachで書かなかった場合と同様にリソース数はカウントされます。

Resource数の確認方法

サンプルとして以下のコードを用意します。

課金対象としてカウントされませんが、null_resourcedataも用意しておきます。

resource "aws_vpc" "main" {
  cidr_block       = "10.0.0.0/16"
  instance_tenancy = "default"

  tags = {
    Name = "main"
  }
}

data "aws_region" "current" {}

resource "null_resource" "example" {
  triggers = {
    always_run = "${timestamp()}"
  }

  provisioner "local-exec" {
    command = "echo Hello, World!"
  }
}

terraform state listで確認

terraform state listコマンドでTerraformで管理しているResourceを出力できます。

このコマンドの出力には、datanull_resourceも含まれます。除外した方がより正確です。

$ terraform state list | grep -v '^data\..*' | grep -v '^null_resource\..*'
aws_vpc.main

1行につき1Resourceになるため、wcで行をカウントしてあげれば、おおよその数を把握できます。

$ terraform state list | grep -v '^data\..*' | grep -v '^null_resource\..*' | wc -l
1

Terraform Cloudコンソール上から確認

OrganizationごとのResource数

Standard Editionの場合、Usageから確認可能です。

Estimate Terraform Cloud Costs - Plans and Features - Terraform Cloud | Terraform | HashiCorp Developerから引用

WorkspaceごとのResource数

WorkspaceのOverviewやStatesから確認できます。

ただ、課金対象ではないdatanull_resourceも含まれるため、注意が必要です。

おわりに

Terraform Cloudの課金単位である、Resourceについてでした。

利用規模によっては割引も受けれることがあります。コストにお悩みの場合は、Hashicorp社や製品を取り扱うパートナー(弊社でも取り扱っています)に相談してみると良さそうです。

以上、AWS事業本部の佐藤(@chari7311)でした。

あわせて読みたい記事