「Terraformのコードから構成図作れないかな?」
構成図の管理は中々大変なものです。自動化するソリューションは色々あると思います。
今回はTerraformコードから構成図を作成できるPluralithというツールが便利だったため、紹介します。
Pluralithとは
Terraformの構成をビジュアライズできるツールです。
引用: Pluralith - Visualize Terraform Infrastructure
例えばEC2とVPCの構成をTerraformで書くと、以下のように図にしてくれます。
実行モードにLocalとCIの2つがあります。
実行モード | 概要 | 料金 | 備考 |
---|---|---|---|
Local | ローカルPC上で実行 | 無料 | 実行結果が48時間で削除される等、制限あり。 |
CI | GitHubActionsやGitLab、Terraform CLoud上で実行 | Plan数課金(500 Runsで$250/USD) |
CIに組み込むことで真価を発揮するツールかと思うので、Localは検証・実運用はCIといった使い分けをするのが良さそうです。
やってみた
今回はLocalで試してみます。
Pluralith CLIのインストール
利用にはユーザー登録が必要です。
以下のページからユーザー登録します。
サインインができたら以下のページに遷移します。
Localで試したいため、Local Setup
を選択します。
Download CLI
でバイナリをダウンロードして、macの場合は以下のコマンドでcliを利用できるようにします。
mv pluralith_cli_darwin_amd64_v0.2.2 pluralith
mv pluralith /usr/local/bin/
chmod +x /usr/local/bin/pluralith
ブラウザで表示されているAPI Key
を使って、CLIでログインします。
PLURALITH_API_KEY="<API Key>"
pluralith login --api-key $PLURALITH_API_KEY
構成図を作成してみる
VPCとEC2の構成をTerraformで用意しました。
この構成で構成図を作成してみます。
main.tf
provider "aws" {
region = "ap-northeast-1"
}
data "aws_availability_zones" "available" {}
locals {
name = basename(path.cwd)
vpc_cidr = "10.0.0.0/16"
azs = slice(data.aws_availability_zones.available.names, 0, 3)
}
module "vpc" {
source = "terraform-aws-modules/vpc/aws"
name = local.name
cidr = local.vpc_cidr
azs = local.azs
private_subnets = [for k, v in local.azs : cidrsubnet(local.vpc_cidr, 8, k)]
enable_nat_gateway = false
}
data "aws_ssm_parameter" "amazonlinux_2023" {
name = "/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-6.1-x86_64" # x86_64
}
resource "aws_instance" "main" {
ami = data.aws_ssm_parameter.amazonlinux_2023.value
instance_type = "t3.micro"
subnet_id = module.vpc.private_subnets[0]
tags = {
Name = local.name
}
}
terraform apply
でリソースを作成します。
terraform apply
リソースが作成できたら、Pluralithで構成図を作成します。
$ pluralith graph
⠿ Initiating Graph ⇢ Posting Diagram To Pluralith Dashboard
→ Authentication
✔ API key is valid, you are authenticated!
→ Plan
✔ Local Execution Plan Generated
✔ Local Plan Cache Created
✔ Secrets Stripped
✔ Costs Calculated
→ Graph
✔ Local Diagram Generated
✔ Diagram Posted To Pluralith Dashboard
→ Diagram Pushed To: https://app.pluralith.com/#/orgs/<URL>
コマンドを実行すると自動的にブラウザで構成図が表示されました。
作成される図も見やすくていい感じです。
PDFやPNGにエクスポートすることもできます。
変更箇所とコストの確認
作成するだけではなく、変更履歴も確認できます。
EC2をコメントアウトしてみてみましょう。
main.tf
provider "aws" {
region = "ap-northeast-1"
}
data "aws_availability_zones" "available" {}
locals {
name = basename(path.cwd)
vpc_cidr = "10.0.0.0/16"
azs = slice(data.aws_availability_zones.available.names, 0, 3)
}
module "vpc" {
source = "terraform-aws-modules/vpc/aws"
name = local.name
cidr = local.vpc_cidr
azs = local.azs
private_subnets = [for k, v in local.azs : cidrsubnet(local.vpc_cidr, 8, k)]
enable_nat_gateway = false
}
data "aws_ssm_parameter" "amazonlinux_2023" {
name = "/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-6.1-x86_64" # x86_64
}
# resource "aws_instance" "main" {
# ami = data.aws_ssm_parameter.amazonlinux_2023.value
# instance_type = "t3.micro"
# subnet_id = module.vpc.private_subnets[0]
# tags = {
# Name = local.name
# }
# }
以下コマンドで構成図を作成します。
$ pluralith graph
変更を検知して、コメントアウトしたEC2がハイライトされています。
また、コストの変化も確認できます。
EC2が1台削除されるため、10USD/月程度が削減できることを確認できました。
Pull Requestとかに添付されていたら、とても便利ですね。
おわりに
Terraform構成をビジュアライズできるツール Pluralith の紹介でした。
作成される図もきれいで実用的でした。
CIに組み込むことでPull Requestで変更がビジュアルで確認できるため、変更箇所の把握がしやすくなり、生産性が上がりそうです。
料金もそこまで高く無いのも嬉しいポイントですね。(500 Plan/月で250USD)
Terraform CloudのRun Tasksで使えるみたいなので、次回はこちらを試してみたいと思います。
以上、AWS事業本部の佐藤(@chari7311)でした。