RDSのインスタンスクラスごとのメモリ量を取得するterraform providerを作った

github.com

これはなに?

RDSのインスタンスクラスごとのメモリ量を習得するterraform provider。

インスタンスクラスごとにデータソースを定義するか、

data "rds_db_instance_memory" "rds" {
  instance_class = "db.t3.micro"
}

#=> {
#     "instance_class" = "db.t3.micro"
#     "memory" = 1
#   }

インスタンスクラスごとのメモリ量のマップを定義するデータソースを使って、メモリ量を取得できる。

date "rds_db_instance_memory_map" "rds" {
}

#=> {
#     "memory_by_instance_class" = tomap({
#       "db.m1.large" = 7.5
#       "db.m1.medium" = 3.75
#       "db.m1.small" = 1.7
#       ...
#     })
#   }

あと、クラスタインスタンスも合わせたすべてのDBインスタンスインスタンスクラスを取得するデータソースも追加した。

data "rds_db_instances" "rds" {
}

#=> {
#     "instances" = tolist([
#       {
#         "instance_class" = "db.t3.micro"
#         "name" = "database-1"
#       },
#       {
#         "instance_class" = "db.t3.small"
#         "name" = "database-2"
#       },
#       ...
#     ])
#   }

用途

terraformでDatadogのアラートを設定するときに、メモリ使用量の閾値をパーセンテージで設定したいときとかに使う想定。

RDS情報の取得先

instances.vantage.sh

Vantageというクラウドコストの最適化サービスをやっている会社のOSSのよう。

https://instances.vantage.sh/rds/instances.json からJSONでRDSの情報を取得できるので

curl -sSfL https://instances.vantage.sh/rds/instances.json \
| jq 'map({key: .instanceType, value: .memory | tonumber}) | sort_by(.key) | from_entries'

とやってインスタンスクラスごとのメモリ量のJSONを生成している。