tl;dr
- 最近アドカレしか qiita 書いてないのでたまにはと思って
- terraform でこんな遊び方もできるんだよ例
- Amazon EBS のボリュームタイプ gp2 をレポートにして出力する遊び
- API の実行コスト以外は元々かかってると思うしこれ自体ではほぼゼロコスト(のはず)
code
terraform aws_ebs.tf
# 取得条件
data "aws_ebs_volumes" "gp2" {
filter {
name = "volume-type"
values = ["gp2"]
}
}
# 条件に合致した各データ
data "aws_ebs_volume" "gp2" {
for_each = toset(data.aws_ebs_volumes.gp2.ids)
filter {
name = "volume-id"
values = [each.value]
}
}
output "gp2" {
value = templatefile("${path.module}/report.tftpl", { volumes = [for s in data.aws_ebs_volume.gp2 : s] })
}
terraform report.tftpl
ID, IOPS, SIZE, Name
%{ for v in volumes ~}
${v.id},${v.iops},${v.size},${try(v.tags.Name,"-")}
%{ endfor ~}
雑な説明
- aws 設定は好きにしていい(環境変数で設定してあれば aws provider は書かなくていい。ぶっちゃけ上の2ファイルだけ置いて plan して大丈夫)
- リージョン別に実行したり、同時に複数リージョンを見たりは自由課題ってことで(手元に数がなくてページングとかも試してない。何件いけるのか不明)
- aws_ebs_volume"s" で gp2 の ebs を複数取得して、aws_ebs_volume を for_each でぶん回して必要な数だけ作る
- templatefile() を使ってテンプレートを読み込み、aws_ebs_volume の数だけループして出力する
- だけ。
まとめ?
- Amazon EBS は gp3 にするとコストメリットがあるので、まだ gp2 のボリュームがあるなら切り替えを検討しましょう
- terraform は IaC のツールだけど単純には Provider を介したインターフェースみたいなもんなのでインフラを作るだけじゃなくてこういうレポート的なものを作ることもできる的な話(各クラウドの data source 次第)
- 他にもこんな小ネタ見たいなぁ(誰か書かないかなぁチラッ)