terraformでの構築って、面倒じゃないですか？

# TL;DR
- 本記事は、[terraform Advent Calendar 2023](https://qiita.com/advent-calendar/2023/terraform) の22日目の記事です。
- AWS等の構築を行う際に、何でわざわざterraform(IaC)で構築するんだろう、
めんどくさ！って思う方向けに、わざわざterraformを採用するメリットを挙げて、
開発するモチベーションを高めようというアレです。

# terraformでのAWS開発の面倒さ
terraformって、面倒臭くないですか？
面倒くさいですよね。**良く分かります。** 未だに面倒くさいと思っています。
そんな人と気持ちを分かち合いたい。そして、もっと使いたい。そして伝説へ。
そんな本エントリになっています。

## terraform/AWSでの開発手順
プロterraformerな皆様なら分かりませんが、私の様なクソザコterraformerでは、
新しいリソースを新規に作成するケースに於いて、以下の様な手順を踏みます。

``` mermaid
flowchart TB
  step1[AWS Management Consoleにて実装+確認]-->step2[terraformにて仮実装]
  step2-->step3[terraformにて実装後 齟齬が無いか確認]
  step3-->step4[本番環境に適合したterraformに本実装]
```

特に新しいサービスを使う場合はこんな感じ。
**これ、面倒じゃないですか？** と思ってしまう訳です。
何なら、初学者時代は大変こういう風に思っていました。つまり、結論として、

:::note info
terraformは面倒（真実）
:::

実際に使うだけなら、本番環境にManagement Console上から設置すれば良い訳で、
**それで良くね？** って思ったりする事もある訳です。
状況次第ではあるが、そんな言う程リソース消したり作ったり、しないじゃろ？

結果としてはManagement Consoleで作成しても、terraformで作成しても、
同じものが出来るという点においては結果が同じになる訳で、
だったら時間が短い方が良い訳です。
それによって、

**無駄な作業をしているのではないか…？**

という疑念に囚われてしまったり、囚われなかったりします。
今なら3割くらいしか思いませんが、以前は9割程度思っていました。
参考までに、以下に円グラフにしておきました。

``` mermaid
pie
    title 初学時代のterraformへの印象
    "面倒くさい" : 60
    "上手く書けない" : 18
    "AWS分からん" : 12
    "もう帰りたい" : 10 
```


こんな状態からterraformやIaCを使用するという部分を受け入れるという時に、
インフラ構築者のモチベーションで解決出来るなら良いのですが、
そういう心持ちになれなかったり、はたまた上司に理解が得られなかったり等で、
**terraform(IaC)を使おうと感じられない人がいたりするかもな** 、と思いました。
まず、以下にterraformを使い続ける為の障壁を挙げます。

# terraformerの天敵
## 開発時間
ビジネスマンは忙しい。
でも24時間働けますか？いえ、そんなに働きません。

::: note
ビジネスマンは忙しいけど、そんなに働きたくない。
:::

という訳で、基本的に長い時間、働きたくないでござる。
メリットの話でもこの部分は述べますが、しかしながらIaCは初期投資が大きめ。
AWSのリソース1個作るのに、検証して作成して、って意外に時間が掛かる。

::: note warn
慣れるまでterraformの構築に時間が掛かる。
:::

なので、特に初学の時点だと支払うコストばかり大きいな！って思います。
**ある程度軌道に乗った後だとこの部分は解消されます。** 後述。

## 上司からの理解
上記項目の続きの話みたいになりますが、開発に異常に時間が掛かる場合、
上司から時間が掛かり過ぎている、と指摘が出る可能性が出て来ます。
進捗を結果レベルで見ると、なんか遅い様な感じになるんですよね。
IaCを成果物と見れば遅れてないんだけどなー。まあ、進んで無い様に見える罠。

::: note warn
IaCを使うなら、IaCの作成までがインフラ…で、ですよね！？
:::

自分はこれに該当しませんでしたが、
中途半端に詳しい人が上司であれば、初期投資のコストが高過ぎて、
上司から無駄な事をしていると思われた人もいたのではなかろうかと踏んでいます。
**大丈夫です。IaCはちゃんと意味がある。**

## 周囲からの理解
自分の回りだと、terraform/AWS周りのインフラ構築者が少ないです。
なので、基本的に話が通じません。
さらに、AWSの構築イメージが伝わらない相手に対して、terraformの構築の話はまったく伝わりません。
でもterraformやAWSを使う上で、自分だけが使う訳では必ずしも無いので、
他者に対して理解を得る必要があり、そこが一定難しい部分だったりします。

多様性というか、各人得意だったり、興味がある事は違う訳で、
プログラムを書ける／書きたい人は多いと思っていますが、
一方でインフラ構築をしたい人が全員かと言うと、むしろ **No!** と思っています。

::: note warn
ちょっぴり孤独。ある意味、テックリードではあるけど。
:::

そういう相手に対しても、作業内容だったり、意味合いだったり、
開発内容を必要なレベルまで伝えるのは案外難しかったりします。
資料作成が増えたりするのは、経費と割り切るしかないかも。


# terraformのメリット
そんなインフラエンジニアの哀愁を抱えたterraformについて。
上記に説明した、terraformの天敵となる問題はいくつもある事を述べましたが、
**転じてこれらはメリットと成り得ます。** 最初に払ったコストをここから回収しよう！

## IaCの使い回しのコスパ率が超高い
terraformを使った時の恩恵として大きい事は、
**本番環境を作った後に、テスト環境をまるっと作成する事が得意なことです。**
コードなので、コピーだったり、切り分けて複製するのがつよつよな所が魅力。

以前作ったのと近い構築であれば、元の構築からコピーして来て、切り貼りすると、
あっという間に新しい環境の構築をする事が可能です。
時間が掛かるのは最初だけ。そこからは**過去の自分が味方になります。** かっけぇ。

::: note
過去の自分が味方してくれるので、時短出来る。
ありがとう、過去の自分！サンキュー！
:::

## テスト環境作成のスクラップ＆ビルドが強い
terraform(IaC)は、性質でもありますが、スクラップ＆ビルドに強いです。
なので、必要な時だけ欲しい、テスト環境の構築／削除を一手に任せる事が出来ます。

環境作成時に初めから本番環境とテスト環境の作成用ディレクトリで分けておいて、
必要な時だけテスト環境を呼び出せる様にしておけば、
他の開発メンバにとっても有効な、**最適なテスト環境の構築がいつでも実現出来ます。**
作ったり消したり出来るので、財布にも優しい。

::: note
terraform(IaC)は長期的なプロジェクト環境にとにかく強い。
テスト環境のスクラップ＆ビルドが得意。
:::

## 構築の再現性が最高値
これもIaCの魅力ですが、再現性がMAX値で利用出来ます。
人間なんてアテにならない物で、手動で処理をしていると知らぬ間に間違えたり、
必要な作業を飛ばしてしまったり、入力値を間違ったり、とんでもないものです。

世の中にはこれを手動で行う為に、**チェックリスト** という文明の利器が存在しますが、
こんなん飾りだよ。あったとしても間違う物は間違うんだ。**過去の自分が証明した。**

IaCで書き切った構築は、誰が作成処理をしても同じになります。
つまり、作業者の手癖みたいなものが入る余地がない、と言うこと。
これは属人性を排除出来る、という事と同義です。
一旦書いてしまえば、誰が作業しても良いということです。
え、じゃあ会社辞めてもいいんですか！？やったー！！

::: note
私が死んでも、会社を辞めても、環境を維持出来る。
これ、重要なんで、偉い人に言うと良いよ。
:::

## チームの下支えになる
メンタル的な部分ですが、本番環境が実装されたり、
テスト環境であったとしてもチームの皆が自分の作成した環境を使ってくれる様になれば、
正直結構嬉しいなあと思ったりします。

テスト環境もterraformを介して、
自発的に誰かが実行して使ってくれると、嬉しいと思います。
インフラエンジニアとして、もっと便利にしておきたい、
きちんと後に繋げられる様なコーディングしたい、成長したいと思える様になりました。

::: note
自己承認欲求がプチ上げ出来ます。
**ブチ上げ**までは行かないね。**プチ**くらい。
:::

# まとめ。という所感。
- terraformは、初めは面倒だなと思う部分が実際に多いです。
- かけるコストに対して、成果が少なく感じるのも納得な部分が多いです。
- ただ、実際にコストを掛けた結果、同じ構築を作成／削除を繰り返し実行出来るのは
すげー便利だなという事に、きっと辿り着けると思います。
- 辿り着いたら、もう自分の物になっていると思います。**どうか挫けないで。**

以上になります。
全体に長文になりましたが、ここまで読んで頂き、ありがとうございました。


``` mermaid
pie
    title 現在のterraformへの印象
    "面倒くさい" : 30
    "上手く書けない" : 25
    "おもしれー" : 20
    "AWS分からん" : 15
    "もう帰りたい" : 10 
```