[Pluralith]Terraformコードから構成図/アーキテクチャを作成する

# はじめに
Terrafomのコードから構成図を作成してくれる`Pluralith`というもおがあったので使用感などを検証してみる

## 公式ページ
https://www.pluralith.com
## 公式ドキュメント
https://docs.pluralith.com/docs/category/get-started

# 料金
- `Local Setup`であれば無料
- `CI Setup`は実行した回数によって課金
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124991/b51b881b-913e-e30d-225c-60afbc475d0d.png)

公式ページの料金

https://www.pluralith.com

# 操作方法
## ユーザー登録
Pluralithの画面にてユーザー登録を行う
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124991/e369b7de-d94d-a59d-ed57-fab61187cfef.png)

今回はLocalで実施したい為、`Local Setup`を選択する
`CI Setup`を選択すると、Github ActionsやTerraform Cloudで実行することができる

:::note warn
冒頭に記載したが、`CI Setup`は料金がかかるらしいので今回は`Local Setup`でテストした。
:::
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124991/72f034fa-e5ba-cdb9-a0f4-e2c29def22e2.png)

# セットアップ
公式ページ

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


`Download CLI`を選択して、モジュールをダウンロードする

:::note info
`Login`に記載のあるKeyは後でログイン時にし使用するので控えておく
:::
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124991/3057e22a-d47e-ec86-207f-dbc63a0051c6.png)

以下コマンドでモジュールの名前を変更してからパスを通し、実行権限を付与
```
mv pluralith_cli_darwin_amd64_v0.2.2 pluralith
mv pluralith /usr/local/bin/
chmod 755 /usr/local/bin/pluralith
```

これでコマンド`pluralith`が実行できるようになったので、上記に表示されていたKeyをセットしてログイン
```
pluralith login --api-key 7b2f928475b3bdxxxxxxxxx
```
以下のように表示されればOK
```bash:実行結果
✔ No graph module installed, found latest release
⠿ None → 0.2.1

Installing Latest Graph Module 100% [██████████████████████████████] (22.656 MB/s)

✔ Graph Module updated!

 _
|_)|    _ _ |._|_|_
|  ||_|| (_||| | | |

Welcome to Pluralith!

  ✔ API key is valid, you are authenticated!
```
これでセットアップは完了


# Pluralithを実行し構成図作成
Terraformのディレクトリを実行し、以下コマンドを実行
```
pluralith graph
```
`terraform init`を実行していなかったので以下エラーが出力された
ちゃんと、tfstateの保管場所とかをみてくれているみたい
```
⠿ Initiating Graph ⇢ Posting Diagram To Pluralith Dashboard

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

→ Plan
  ✘ Couldn't Generate Local Execution Plan

Error: Backend initialization required, please run "terraform init"

Reason: Initial configuration of the requested backend "s3"

The "backend" is the interface that Terraform uses to store state,
perform operations, etc. If this message is showing up, it means that the
Terraform configuration you're using is using a custom configuration for
the Terraform backend.

Changes to backend configurations require reinitialization. This allows
Terraform to set up the new configuration, copy existing state, etc. Please
run
"terraform init" with either the "-reconfigure" or "-migrate-state" flags to
use the current configuration.

If the change reason above is incorrect, please verify your configuration
hasn't changed and try again. At this point, no changes to your existing
configuration or state have been made.

running terraform plan failed -> GenerateGraph: RunPlan: exit status 1
```
改めて`terraform init`を実行してから`pluralith graph`を実行
WEBページが開き、構成図が表示された
今回は作成済みのリソースだったので、`terraform plan`の差分はなしとなり、構成図上も変更差分はない状態だった。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124991/a88f768c-7874-b62f-7a35-43d11e2c793e.png)

# 変更差分確認
画面右下に`Created`や`Update`などがあったので試しにTerraformコードを変更し、実施してみる
## すべて削除する場合
Deleteとして検知されていた(赤枠)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124991/ac65bfae-e019-3652-6cb2-fb761f62a337.png)

## 変更の場合
Updateとして検知された（黄色枠）
ただし、今回はS3のBucket名変更だったので、Recreatedとして検知されていた
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124991/dd6a6b17-160e-bb20-9af9-787b9133ca31.png)

# その他機能
## 料金表示
今回は、Cloudfront＋S3という定常的に料金のかからない構成で作成してしまったが、EC2など定常的に料金が掛かってくるリソースなどを作成した場合は料金も表示してくれるみたい（画面左の`Costs`を選択すると表示される）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124991/1a986dbc-9a23-3af7-ae0f-82bae7f0a661.png)

## 実行履歴
`Local Runs`を表示するとローカルでの実行履歴が確認できる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124991/f8c322ca-a0e4-1e84-1130-0c732c1bd53c.png)

# 補足
コマンド`pluralith`を実行したあとにディレクトリを確認するとディレクトリ`.pluralith`ができているのが確認できた。
これもGithubなどに含めたら、実行履歴なども共有できそう
```
.
├── .DS_Store
├── .pluralith
│   ├── pluralith.cache.json
│   ├── pluralith.plan.bin
│   └── pluralith.state.json
├── .terraform
│   ├── modules
│   │   └── modules.json
│   ├── providers
│   │   └── registry.terraform.io
│   │       └── hashicorp
│   │           └── aws
│   │               └── 4.55.0
│   │                   └── darwin_arm64
│   │                       └── terraform-provider-aws_v4.55.0_x5
│   └── terraform.tfstate
├── .terraform.lock.hcl
├── cloudfront-s3.tf
├── datasource.tf
├── locals.tf
├── modules
│   ├── .DS_Store
│   └── public-static-web
│       ├── .DS_Store
│       ├── cloudfront.tf
│       ├── img
│       │   ├── error.html
│       │   ├── index.html
│       │   └── mock_img.jpeg
│       ├── output.tf
│       ├── s3.tf
│       └── variables.tf
├── provider.tf
├── terraform.tfvars
└── variables.tf

13 directories, 23 files
```
# あとがき
- これまで、Terraformコードから構成図を作成するものはいくつかあったが、`module`に対応していないなど、少し不便なところがあったが`Pluralith`はStateファイルから読みってくれるのでかなり良い。
- 構成図作成する際はもうこれで良いんじゃないかなと思う。

# 参考記事
https://docs.pluralith.com/docs/category/get-started

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

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