ChatGPTさんとTerraformハンズオン

はじめに

ラボメンバーの楽して億万長者を夢みる「いちろ~」です。
今回はChatGPTの最新モデル「GPT-4o」が出たので、作り物をしながら性能を体感してみたいと思います。

題材は、「Terraformのハンズオン」です。
頭の良くなったChatGPTさんにTerraformでサービスのリソースを一つ一つ作ってもらいながら、入門編としてAWS Fargateが動く環境の構築をチャレンジします。

前提
  • Terraform自体はかる~く触ったことがあり、init/plan/applyのコマンドが叩ける。
  • アプリケーションのコード開発は10年以上経験があるので、頑張ればterraformのコードもググりながらなんとか読める
  • インフラエンジニアと会話しながら、AWS構築をしていった経験があるので、インフラ構成としての知識は、ほんの少~しだけある。
ワーキングルール
  • ChatGPTさんにコードを示してもらいながら、そのコードをコピペしてコーディングしていく。
  • ハンズオンなので各種サービスのリソースを一つ定義したら、planを実行して構築できることを確認しながら進めていく。必要に応じてChatGPTさんにコードの説明をしてもらう
  • コードには必ずコメントを入れてもらう
  • Cloud9上で開発する(今回ここの詳細は割愛)
ゴール
  • 最終的にapplyを実行してエラーなくすべてのリソースが構築できている
  • ブラウザから実行しているFargateのコンテナのアプリが表示される

レッツ・ハンズオン♪

こんな感じに全体像やディレクトリ構成を示してくれます。
次はTerraformのコードを示していってもらいましょう。

VPCモジュールのコードを示してくれたので、Cloud9上でファイルを作成してコードをそのままコピペしていきます。続けて、ルートディレクトリに配置するファイルも示してくれてます。

planが実行できる一番ミニマムなリソース定義が完了したのでエラーが出ないか確認してみます。planを実行すると・・・成功です。
お、おおぉ~幸先良い感じ(๑•̀ㅂ•́)و✧

このままの勢いで続きのリソースを書いていきましょう。
コメントを入れ忘れたので、コメントを付けてもらうよう依頼します。

そもそも「コメントを付けてください」と依頼するのを忘れているのにもかかわらず、ChatGPTさんは素直に受け取ってくれてコメント付きで続きのECSリソースの定義を示してくれてます。(ごめんなさい💦GPTさん)

はい、この様な感じでリソース単位でどんどん書いていきますコピペしていきます( ̄▽ ̄)

順調のようだが?ここから色々と・・・

対話しながらモノづくりをしているので途中から要求を出すことも可能です。
例えば、name定義を作りながら指示を出して修正していくことも可能です。

次のリソース定義に進みます。

※この後、modules/ecs-service/variables.tfやmodules/ecs-service/outputs.tfの定義も続くが割愛

同じようにplanを実行してチェックします。おっと!エラーが発生しました。
エラー内容を伝えてエラー個所を特定して修正したコードを提示しなおしてもらいましょう。

言う通り直してみましょう。しかし、ここで???になります。
出力定義(output xxx)はoutput.tfへ記載するルールなのですが、main.tfにも記載されており、それが重複エラーの原因でした。しかもその修正方法として、output.tfに定義している出力定義を削除とあります。

これは間違った修正方法ですね。
ここでChatGPTを使う上でのポイントです。
「ChatGPTから提示されるコードが必ずしも正しいとは限らない

正しいのかどうかを見極める目が必要になり、丸投げや任せきりにすると痛い目に合います。
しかも間違っていると指摘するとサラッと直したものを返してきて「こいつめ」と思ったこと何度あったことか。正しいのに間違っていると指摘しても受け取ってしまうし・・・、このあたりがまだAIを使う上で難しいところだと感じています。

端的に間違えを伝えて気付いてもらいましょう。


はい、この様な形でエラーが出たらエラー内容を伝え直してもらったり、直し方を伝えたり、ハンズオンでありながら双方が教え合って進めるスタンスになりますw

完成に向けて

この後も
・ロードバランサー
・セキュリティグループ
・IAM

と続き、一通りのリソース定義が完成します。
では、planも成功したのでapplyをしてみましょう。

Apply complete!

すばらしい、構築完了しました。ではブラウザから叩いてみましょう。


残念、ブラウザからは反応が無くエラーになりました。コンテナの起動状況を確認するとタスクがpendingとなっていました。
その後も、エラー内容を伝えると間違っている(かもしれない)箇所を修正してくれたり、以前伝えたルールを忘れて、コメントが入っていなかったり、output.tf以外にoutput定義したり・・・しつつ。最後は、エラーの原因がわかるようにCloud Watchのログを出力してもらい、そのエラー内容を伝えたりすること、数時間・・・。

何とかECSタスクも起動したので、再度ブラウザでチェック!!

今度はちゃんと表示されました。
単なるnginxのWelcomeメッセージですが、AIと対話しながら自身が持っていないスキルセットの領域を構築できたという喜びがあり嬉しいものです。

最後に

無事ゴールが達成できましたので、振り返ってみましょう。

コスト(時間):✕
まず、このハンズオンでかかった時間は業務後に少しずつやっていたことや初回のCloud9上での環境構築も含めると「4時間」ぐらいの時間が掛かりました。普通のハンズオンあれば、どこかの入門サイトを見て1時間から2時間程度で構築できてしまいます。

柔軟性:◎
何か定型的なワークを実施しているわけではないので、必要に応じて要件を足したり/外したりできるので個別指導を受けているようなものです。当初のゴールを達成したら、そのまま続きで次のゴールを立てて進むこともできます。
実は今回長くなってしまうので割愛しましたが、続きがありアプリケーション側のコードやデプロイ環境についても構築していってもらい、作業を続けてます。

理解向上度:◎
一般的なハンズオンサイトを見ながら構築する場合は、理解しながら進めつつも間違っているかも?といった視点は持たないので後日あまり頭に残りません。しかし、このChatGPTハンズオンでは示されたものが正しいとは限らないので、常に「正しいのか?」といった視点を持ちつつ進めていくので最終的に理解度は高くなります。

AIモデルが新しくなったとはいえ、まだまだ頼りない講師さんです。
しかし、以前のGPT-4vに比べて提示されるコードがかなり早くなり、正確性も増してきています。AIと対話しながらモノづくりをしていくことはコツがいるところもあるので、今後も私はAIと対話しながらモノづくりをして億万長者の夢を見ていくのでしょう~。
ご拝読ありがとうございましたm(_ _”m)