Terraform で構築した構成を Pluralith で図にしてみる

# やりたいこと
Terraform でインフラを構築する際に、別で構成図を作成するのが面倒だったので State ファイルから自動的に作成できないものかと調べたところ、Pluralith というツールがあり便利そうだったので試してみました。その際の手順などをまとめます。

# Pluralith
概要はこのページを見るとわかる。この記事も以下を参考に行っている。

https://dev.classmethod.jp/articles/terraform-visualise-pluralith/

# 前提
Mac にインストールして構成図を出力してみる。マシンスペックは以下。
OS: Monterey 12.6.3
CPU: M1 Max
Memory: 32 GB

# 導入手順
## インストール
Pluralith の利用には登録が必要なので、以下ページからユーザ登録を行う。

https://app.pluralith.com/#/auth

ユーザ登録後、`CI Setup` と `Local Setup` を選択するウィンドウが表示される。ここでは、`Local Setup` を選ぶ。その後、セットアップの手順を示してくれるウィンドウが表示されているはずなので、`Download CLI` をクリックすると実行ファイルのダウンロードが始まる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1743460/c18835be-fe48-31e7-5723-4dc86697c8ff.png)

どこか適当なディレクトリに実行ファイルを保存する (ここでは、$HOME に保存したとする)。
まずは、ファイル名を `pluralith` に変更する。
```
$ mv pluralith_cli_amd64_v0.2.2.exe pluralith
```

その後、`/usr/local/bin` へコピーする。
```
$ sudo cp pluralith /usr/local/bin
```

実行するための権限を付与する。
```
$ chmod +x /usr/local/bin/pluralith
```

ここまで行うと、コマンドを実行できる状態になるので試しに `version` コマンドを実行してみる。初回実行時には、`Graph Module` のインストールが行われる。
```
$ pluralith version
```

以下のような出力が表示される。
```
 _
|_)|    _ _ |._|_|_
|  ||_|| (_||| | | |

→ CLI Version: 0.2.2
→ Graph Module Version: 0.2.1
```

以上で、インストールは完了！

参考
* https://docs.pluralith.com/docs/get-started/run-locally/

## セットアップ
ローカルで実行できるように設定していく。

まずは、pluralith にログインする。API KEY は実行ファイルをダウンロードしたページの中央に表示されているので、その値を使用する。
```
$ pluralith login --api-key {YOUR_PLURALITH_API_KEY}
```

ログインに成功すると以下のような出力が表示される。
```
 _
|_)|    _ _ |._|_|_
|  ||_|| (_||| | | |

Welcome to Pluralith!

  ✔ API key is valid, you are authenticated!
```

## 実行
適当な Terraform のコードを書く。今回は Azure のリソースグループを作成して、そこにストレージアカウントとコンテナを作成してみる。
``` main.tf
terraform {
  required_providers {
    azurerm = {
      source  = "hashicorp/azurerm"
      version = "~> 3.50.0"
    }
  }
}

provider "azurerm" {
  features {}
}

resource "azurerm_resource_group" "sample" {
  name     = "rg-pluralith-trial"
  location = "Japan East"
}

resource "azurerm_storage_account" "sample" {
  name                     = "stpluralithtrial"
  resource_group_name      = azurerm_resource_group.sample.name
  location                 = azurerm_resource_group.sample.location
  account_tier             = "Standard"
  account_replication_type = "LRS"
}

resource "azurerm_storage_container" "sample" {
  name                  = "pluralith"
  storage_account_name  = azurerm_storage_account.sample.name
  container_access_type = "container"
}
```

コードを書いたら以下を実行して準備は完了。
```
$ terraform init
```

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
  - Cost Calculation Skipped

→ Graph
  ✔ Local Diagram Generated
  ✔ Diagram Posted To Pluralith Dashboard

  → Diagram Pushed To: https://app.pluralith.com/#/orgs/********/projects/pluralith-local-project/runs/********/
```

実行が完了するとブラウザが自動的に起動して、実行結果内のリンクが開かれる。以下のような感じ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1743460/e66d0439-1606-6ce6-6a84-36dd7235e66c.png)

ストレージアカウントのコンテナがリソースグループ外に表示されているのはちょっと変な感じだが、割といい感じに構成図が作成されている！
凡例も画面左下に書かれており、今回は全部新規作成になるので `Created` で表示されている。構成がもっと複雑になった時など、どれが新規作成かや更新されたかが見てわかるのはとても良さそう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1743460/b5bc163e-5035-b1cf-20de-41cd9ba7e1aa.png)

# ということで
Pluralith を使って、Terraform のコードから構成図を作成してみました。
当初は、Windows11 + WSL2 (Ubuntu 22.04) で実行してみようとしていましたが、Pluralith から Terraform のコマンドで実行できないエラーが表示され、解決策が分からなかったので Mac でやってみました。

エラーは以下のような内容です。同じようなエラーに直面した・解決できたという方はコメントいただけると嬉しいです。PATH は問題なさそうなんだけどな…
```
⠿ Initiating Graph ⇢ Posting Diagram To Pluralith Dashboard

→ Authentication
  ✔ API key is valid, you are authenticated!

→ Plan
  ✘ Couldn't Generate Local Execution Plan

running terraform plan failed -> GenerateGraph: RunPlan: exec: "terraform": executable file not found in %PATH%
```

```
$ which terraform
/usr/bin/terraform

$ which pluralith
/usr/local/bin/pluralith

$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/lib/wsl/lib:/mnt/c/Program Files (x86)/Microsoft SDKs/Azure/CLI2/wbin
```


以上です。