Pluralithで作成したEC2環境の構成図でコストを表示したい

## はじめに
業務でAWSの構成の一部をTerragruntを使用して管理しているのですが、構成が複雑になってゆくにつれてコードを読んで構成を理解するのが難しい、意図した構成になっているか視覚的になっていないので分かりづらいという問題がありました。
その問題をPlulalithで解消するためにTerraformの勉強と一緒にPlulalithも使ってみようという記事の第四弾です。

TerraformでEC2とEC2周辺のVPCやサブネット、インターネットゲートウェイなどのネットワーク周りの環境を作成するtfファイルを作成し、
作成した環境をもとにPluralithを使用して構成図を作成してみたのですが、Costsが表示できるようになったので備忘メモとして残しておきたいと思います。

また、前回同様以下書籍内の「TerraformではじめるAWS構成管理」の手順を参考にして実施しました。
Terraform初心者の方におすすめです。
 - [ソフトウェアデザイン 2022年1月号](https://www.amazon.co.jp/o/ASIN/B09M552FPJ/gihyojp-22)

## これまでに行ったこと
 * 第一弾は準備編ということでインストールを実施しました。
https://qiita.com/yuuun/items/33f2217072818516ee56

 * 第二弾は実際にTerraformでEC2のみの作成と構成図を作成するというところまで行いました。
https://qiita.com/yuuun/items/b4f57aa17833dcd7e990

 * 第三弾は基本的なEC2環境をTerraformで作成し、Pluralithで構成図を作成し、「Changes」のグレースケールをカラーで表示する方法を発見しました。
 https://qiita.com/yuuun/items/ef9366112ce438b9d822

## やりたいこと
Pluralithで作成した構成図の「Costs」を表示したい!

## 環境
OS：Windows11 Pro
Terraform：v1.5.2
pluralith CLI Version： 0.2.2
pluralith Graph Module Version： 0.2.1
AWS CLI：2.4.23

## 今回作成した環境のコード
実際に記述したコードは前回同様のコードです。
リンクは以下になります。
記述したコードについて詳細は省きます。

https://github.com/yuuka51/learn_terraform/tree/main/terraform-chapter2

また、リポジトリ内に「pluralith_graph」というディレクトリを作成したのですがその直下にPluralithで作成した構成図も置いてあります。

### Plulalithで作成した構成図に「Costs」を表示できるようにするために必要なポイント
* ポイント1.infracostの導入
* ポイント2.Terraformへの設定

### infracost導入までの手順
#### 手順1.infracostの[公式ドキュメント](https://www.infracost.io/docs/)からzipファイルをダウンロードし、解凍、pluralithやterraformと同様Windows/System32に配置して環境変数を設定します。

※ちなみに、infracost.exeをインストールしただけだと以下のようにエラーが出ます（pluralith graphの実行は成功する）
```
PS C:\Users\ユーザー名\workspace\learn_terraform\terraform-chapter2> 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
  ⠏ Calculating Infrastructure CostsError: No INFRACOST_API_KEY environment variable is set.
We run a free Cloud Pricing API, to get an API key run infracost auth login

running infracost breakdown failed -> CalculateCost: exit status 1
  ✘ Couldn't Calculate Costs
  ✔ Costs Calculated

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

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

#### 手順2.無料のAPI キーを取得する
無料のAPI キーを取得するためにはinfracostのアカウント登録が必要です。
公式ドキュメントだとサラッと書いてますがAPIキーが使えるようになるまで(Get Started!の内容を完了するまで)が大変でした。。。
![スクリーンショット 2023-08-24 131401.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/423172/73464367-9d40-2515-3e0c-ef02a9226fe9.png)

まず、GitHubの方でinfracostを使用できるようにするためにGitHubにアプリケーションとして設定する必要があります。
また、実際にinfracostを使用してみるためにGitにプルリクを出して試しに動かす必要があるのでお試し用のリポジトリが必要でした（ちょうど構成図を作成してGitHubにアップしていてよかった。。。）。
ということで、用意していたお試し用の[リポジトリ](https://github.com/yuuka51/learn_terraform/tree/main/terraform-chapter2)で実際にプルリクを出すと自動でinfracostが動きだし、プルリクを出した差分からコストの差分を出してくれました。
そこまで確認が取れたら無料のAPIキー取得の準備は完了です。

その後以下コマンドを実行することでAPIキーが取得できました。
```
infracost configure get api_key
```
### Terraformへの設定
#### 取得したAPIキーをTerraformに登録する
続いて、TerraformへのAPIキーの登録です。

```
# cdでterraformリポジトリのディレクトリに移動
cd my-terraform-project
# Terraform variables can be set using --terraform-var-file or --terraform-var
infracost breakdown --path .
```
##### 詰まりどころ
```--path```の「path」が何なのか分からず詰まりました。
結論としてはinfracost configure get api_keyコマンドで取得したAPIキーです。

ちゃんとAPIキーを指定して実行したら無事動かせました。
```
PS C:\Users\ユーザー名\workspace\learn_terraform\terraform-chapter2> infracost breakdown --path=（APIキー）
```
やっとinfracostが利用できるようになったのでpluralith graphを実行してみます。
```
PS C:\Users\ユーザー名\workspace\learn_terraform\terraform-chapter2> 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/.../pluralith-local-project/runs/.../      
```

無事構成図の作成ができたようです。
気になる「Costs」の表示はというと。。。

![スクリーンショット 2023-09-09 163906.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/423172/5b42cc41-8598-5cc6-cbe8-57eeea4b8082.png)

表示できていました！
以下月ごとのコストと時間ごとのコストを画像出力させた結果です！

![project_pluralith-local-project%2Frun_2397461%2Frun_2397461_1692858396573.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/423172/9ea1fb2f-3804-24c6-08a0-17ef69bc002d.png)

![project_pluralith-local-project%2Frun_2397461%2Frun_2397461_1692858417887.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/423172/b3b06a89-29f6-5b35-7ea4-727731291cdf.png)

その後試しにEC2インスタンスのタイプをt2.microからt2.largeに変えてみたところ、以下のようにちゃんと金額が変わっていました！
![スクリーンショット 2023-09-15 190144.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/423172/34a06265-50d5-0da7-39f8-fe56cf76c53c.jpeg)



## 所感
無事Costsを表示できるようになり、これでローカル実行した際の表示モードChanges、Costs、Viewが一通り表示できるようになりました。
今回はEC2のみ（ほかのサービスはリクエストに応じて課金されるため）だったのですが、他にも複数のCostがかかる構成も作成して構成図を表示してみたくなりました。

## 参考
[ソフトウェアデザイン 2022年1月号](https://www.amazon.co.jp/o/ASIN/B09M552FPJ/gihyojp-22)

https://nekopunch.hatenablog.com/entry/2021/12/20/115731

https://github.com/cm-cxlabs/softwaredesign202201

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

https://www.infracost.io/docs/