【ITニュース解説】Terraforming With AI
2025年09月25日に「Dev.to」が公開したITニュース「Terraforming With AI」について初心者にもわかりやすく解説しています。
ITニュース概要
AIエージェントとDockerのcagentを使い、Terraformerで自動生成された読みにくいTerraformコードを自動で整理・修正する技術を紹介。不要な記述を削除し、依存関係を最適化することで、手作業なしで高品質なインフラ設定コードを効率的に作成する。
ITニュース解説
このニュース記事は、AIエージェントという新しい技術を活用して、自動生成された「Terraform(テラフォーム)」の設定ファイルを効率的に整理・修正する方法について解説している。システムエンジニアを目指す人にとって、クラウドなどのインフラをコードで管理する「Infrastructure as Code(IaC)」は非常に重要な概念であり、Terraformはその中心的なツールの一つだ。
企業がクラウド上にシステムを構築する際、多くの場合、手動でサーバーやネットワークなどのインフラ設定を行う。しかし、手作業はミスを誘発しやすく、インフラの変更履歴を管理することも難しい。この問題を解決するのがIaCであり、インフラの構築や設定をコードとして記述することで、自動化、再現性の向上、変更履歴の追跡を可能にする。Terraformは、AWSやGCP、Azureといった主要なクラウドサービスのインフラをコードで記述し、望み通りの状態を維持するための強力なツールである。
しかし、既存の手動で構築されたインフラをIaCに移行しようとすると、しばしば課題に直面する。Googleが開発した「Terraformer(テラフォーマー)」というツールは、既存のクラウドインフラからTerraformの設定ファイルを自動的に生成できるため、IaC化の初期段階で非常に役立つ。しかし、この自動生成されたTerraformファイルは、そのままでは実用性に乏しいことが多い。例えば、リソース名が読みにくかったり、不要な属性(自動で設定されるデフォルト値など)が明示的に記述されていたり、他のリソースのIDがコードの中に直接書き込まれていたりする。このようなコードは、後の変更や再利用が非常に困難であり、手作業で修正しようとすると膨大な時間と手間がかかる。
そこで、この記事の筆者は「AIエージェント」というアプローチでこの問題の解決を試みた。AIエージェントとは、人間の指示を理解し、様々なツールを使いこなしながら、一連のタスクを自律的に実行するAIプログラムのことだ。特に、大規模言語モデル(LLM)と呼ばれる、人間が話すような言葉を理解し、自然な文章を生成できるAIがその中核を担う。筆者は、手動で時間のかかるコード修正作業を、AIエージェントに任せることで自動化・効率化することを考えたのだ。
このソリューションで中心的に使われたツールは、Docker社が提供する「cagent(シーエージェント)」だ。cagentは、YAMLという記述が簡単な設定ファイルを使って、複数のAIエージェントの役割や、それぞれのエージェントが使用できるツールを定義できる。このツールを使うことで、ほとんどコードを書かずに、AIエージェントの複雑なワークフローを構築できたという。cagentは、Terraformの高度な操作をプログラムから行うための「Terraform MCPサーバー」というツールや、シェルスクリプトといった様々な種類のツールをエージェントに「道具」として使わせることができるため、コードの解析、修正、変換といった複雑なタスクの実行を可能にする。
このソリューションは、複数のAIエージェントが連携して動作するワークフローとして構成されている。 まず、「rootエージェント」が全体の司令塔となり、ワークフロー全体の流れを管理し、適切なタイミングで各専門のサブエージェントにタスクを割り振る。 次に、「Cleaner(クリーナー)エージェント」が、自動生成されたTerraformコードの初期段階のクリーンアップを担当する。このエージェントは、例えば「tags_all」や「region」のように記述しなくてもTerraformが自動で設定するような不要な属性を削除したり、読みにくいリソース名(二重のハイフンを含むものなど)を修正したりする。また、一時的に生成される状態ファイルやキャッシュファイルなども削除し、コードベースを整理する役割も果たす。この処理の一部には、常に同じ結果を出す「決定論的」なシェルスクリプトが使われた。 続いて、「Connecter(コネクター)エージェント」が登場し、Terraformコード内のリソース間の「暗黙の依存関係」を明確にする。自動生成されたコードでは、例えばVPC(仮想プライベートクラウド)のエンドポイントが、そのVPCのIDを直接参照する形で書かれていることが多い。Connecterエージェントは、これを「VPCリソースのID」という形式に書き換え、リソース同士が適切に連携し、依存関係が明示されるようにする。これにより、基盤となるVPCが変更された場合でも、それに依存するリソースも自動的に適切に更新されるようになり、コードの柔軟性と保守性が向上する。 さらに、「Importer(インポーター)エージェント」は、Terraformが既存のインフラを管理するための「インポートブロック」という設定を作成する。これは、既に稼働しているクラウドインフラをTerraformの管理下に置く際に不可欠な設定だ。このエージェントは、インポートできないリソースがあればコードベースから削除し、適切にインポートブロックを生成する。 最後に、「Finalizer(ファイナライザー)エージェント」が、これまでの作業結果を最終的にレビューし、必要に応じて微調整や修正を行う。このエージェントは、コードが実際の生産環境で利用できる品質になっているかを確認し、Terraformの推奨するスタイルガイドラインに沿った最終調整を行う。さらに、自動生成されたJSON形式のコードを、Terraformで一般的に使われる「HCL(HashiCorp Configuration Language)」形式に変換する作業も担う。
このAIエージェントによるワークフローを、大規模なAWSネットワーク環境で実際に試したところ、約95%の精度でコードのクリーンアップと修正が達成されたという。わずかながら修正漏れが見られたものの、これはAIによる「非決定論的」(入力が同じでも毎回同じ結果が出るとは限らない)な処理の特性を示すものであり、最終的な出力は必ず人間が確認し、検証する必要があるという重要な教訓が示されている。
この経験からいくつかの重要な学びが得られた。一つは、使用するLLMの性能が結果に大きく影響するということだ。安価なローカルモデルでは不安定な結果しか得られなかったが、高性能な「フロンティアモデル」と呼ばれるLLMを利用することで、格段に安定した結果が得られた。また、新しいオープンソースツールのドキュメントは不完全なことがあり、時には自分でコードを深く理解する必要があることも明らかになった。 最も重要な学びは、「決定論的」(常に同じ結果を出す)なシェルスクリプトのようなツールと、「非決定論的」(結果が毎回変わる可能性のある)なAIエージェントを組み合わせることの有効性だ。AIエージェントに全てを任せるのではなく、機械的に処理できる明確なタスクはスクリプトに任せることで、AIの負担を軽減し、全体的な処理の品質を向上させることができた。筆者は、この「混合ソリューション」のアプローチが、実際の開発や運用業務において非常に強力であると結論付けている。
興味深いことに、最終段階のFinalizerエージェントは、期待以上の成果も生み出した。一部のリソース名をより分かりやすく変更したり、環境におけるリソースの目的を推測して記述を修正したりするなど、単なるコード変換以上の改善を行ったという。これは、AIがTerraform MCPサーバーを使ってスタイルガイドラインを調べ、「生産環境で使えるコード」を作成するという指示を深く理解した結果だと思われる。
結論として、AIエージェントを使ったTerraformer出力のクリーンアップとリファクタリングは、非常に実用的かつ効率的な方法であることが証明された。DockerのcagentやTerraform MCPサーバーのようなツールを組み合わせることで、複雑で手動では時間のかかるインフラコードの整理作業を、最小限の人間の介入で、生産環境に耐えうる高品質なコードへと変換できる。AIによる自動化は、インフラのデプロイメント速度を向上させ、運用チームの負担を大幅に軽減する可能性を秘めているが、AIが生成した最終的な成果物を常に検証することが、安全かつ信頼性の高いシステム運用には不可欠である。今後のツールの進化とともに、インフラ自動化のワークフローはさらに効率的で信頼性の高いものになるだろう。