生成AI × Terraform：AWS環境をChatGPTとCopilotでゼロから構築してみた


## 1. はじめに

### ■ なぜこの記事を書いたのか（背景や動機）

インフラの構築といえば、これまでは専門的な知識と経験が求められる領域でした。しかし近年、生成AIの登場によって「誰でもインフラを構築できる時代」が見え始めています。私自身、TerraformやAWSの学習を始めたばかりの頃は、何をどう調べてどこから手を付ければいいのか分からず、何度も手が止まりました。

そんなときに出会ったのが **ChatGPT** や **GitHub Copilot** などの生成AIツールです。これらのツールを活用すれば、「コードを書く」ことのハードルを大きく下げることができるのでは？と感じ、本当に実用的かどうかを実際に検証してみることにしました。

### ■ 対象読者

本記事は、以下のような方を対象としています：

- TerraformやAWSに興味はあるが、まだ実際に触ったことがない
- 生成AIをインフラ構築に活用してみたいと考えている
- コードやインフラ構成の学習を効率化したいエンジニア

中級者の方にとっては、生成AIの使い方やメリット・デメリットの比較を通じて、新たなワークフローの参考になればと思います。

### ■ 本記事で試すこと

本記事では、生成AIを活用してAWSインフラ構築をどこまで自動化・効率化できるかを検証します。以下のステップを実際に試しました：

1. **ChatGPTで構成図からアーキテクチャをテキスト化**  
   AWSの構成図をベースに、ChatGPTに依頼してインフラ構成を文章として整理してもらいました。これにより、抽象的な構成図が具体的な設計へと落とし込まれます。

2. **ChatGPTでタスクを分解**  
   テキスト化したアーキテクチャに基づき、ChatGPTにTerraformで構築するためのタスクを洗い出してもらいました。これにより、必要なリソースや処理の流れが明確になります。

3. **GitHub CopilotのAgentに指示を渡してTerraformコードを作成**  
   整理したアーキテクチャとタスクをCopilot Agentに渡し、Terraformコードの自動生成を試みました。コードの土台が即座に得られたことで、手作業による記述量を大幅に削減できました。

この一連の流れを通して、**生成AIをパートナーとしたインフラ構築の新しいワークフロー**を体験し、その可能性と限界を検証しています。

## 2. 使用するツール・サービスの紹介

本章では、本記事の検証で使用した主要なツール・サービスについて紹介します。生成AIとIaC（Infrastructure as Code）を組み合わせた構成を理解する上で、それぞれの役割を把握することが重要です。

### ■ ChatGPT（OpenAI）

**今回の活用ポイント：**

- AWSの構成図をテキストで表現（アーキテクチャ文書化）
- Terraformに必要な構成要素をタスクとして整理
- 疑問点やエラーの相談役として随時活用

### ■ GitHub Copilot（Agent）

**今回の活用ポイント：**

- ChatGPTで整理した構成・タスクをもとにTerraformコードを生成
- エディタ内でコードの追加・修正・提案をリアルタイムに支援

### ■ Terraform（HashiCorp）

**今回の活用ポイント：**

- ChatGPT + Copilotで生成されたコードをベースにAWSインフラを構築
- 実際に`terraform init`〜`apply`で構成を展開

以上の3つが、今回の検証で活躍した主なツールです。
生成AIとIaCを組み合わせる上で、それぞれの役割と得意分野を理解することが、
効率的な構築の第一歩になります。

## 3. 実際に構築するAWS構成の概要

本記事は、以下のハンズオンの構成を構築してみました。

スケーラブルウェブサイト構築 ハンズオン
https://catalog.us-east-1.prod.workshops.aws/workshops/47782ec0-8e8c-41e8-b873-9da91e822b36/ja-JP

Webアプリケーション「WordPress」を高可用性構成でデプロイするシンプルかつ実用的な構成です。

### 主な構成要素

| リソース | 内容 |
|----------|------|
| VPC | 10.0.0.0/16 CIDRの仮想ネットワーク |
| サブネット | 2つのAZにまたがる4つのサブネット（パブリック×2、プライベート×2） |
| EC2 | 各AZのパブリックサブネットに配置されたWordPressアプリケーション用インスタンス |
| ELB | パブリックサブネットに配置され、ユーザーからのHTTPリクエストをEC2に分散 |
| RDS（MySQL） | プライベートサブネットに配置されたマルチAZ構成のデータベース（Primary/Secondary） |
| インターネットゲートウェイ | ユーザーからのアクセスを可能にするため、VPCにアタッチ |
| AMI | WordPressを事前インストールしたカスタムAMIを使用（もしくは公式AMI） |

### アベイラビリティゾーンの構成

- **アベイラビリティゾーン1a**
  - パブリックサブネット（10.0.0.0/24）
  - プライベートサブネット（10.0.2.0/24）
  - EC2（WordPress）
  - RDS（Primary）

- **アベイラビリティゾーン1c**
  - パブリックサブネット（10.0.1.0/24）
  - プライベートサブネット（10.0.3.0/24）
  - EC2（WordPress）
  - RDS（Secondary）

## 4. ChatGPTの活用例と効果

今回の検証では、ChatGPTを主にアーキテクチャ設計支援とタスク整理の2つの目的で活用しました。これにより、インフラ構築における初期設計の手間や抜け漏れを大幅に削減できました。

### ■ 活用①：構成図をもとにアーキテクチャをテキスト化

まず初めに行ったのは、構成図から必要なAWSサービスの洗い出しです。
視覚情報（構成図）を元にChatGPTへプロンプトを与え、構成要素をテキストとして出力させました。


#### 出力された内容（一部抜粋）：

- VPC（CIDR: 10.0.0.0/16）
- サブネット（Public/Private × 2）
- Internet Gateway
- Elastic Load Balancer
- EC2インスタンス（WordPress）
- RDS（MySQL、マルチAZ構成）

### ■ 活用②：構成ステップの洗い出し（IaCタスク分解）

次に、出力されたサービス一覧をもとにTerraformでの構築ステップをChatGPTに作成させました。

#### 出力された例（一部抜粋）：

1. VPC作成
2. パブリックサブネット作成（AZ 1a, 1c）
3. プライベートサブネット作成（AZ 1a, 1c）
4. インターネットゲートウェイの作成とVPCへのアタッチ
5. ルートテーブルの作成と関連付け
6. セキュリティグループ作成（EC2、RDS用）
7. EC2用IAMロール作成
8. EC2の起動（AMI指定、User DataによるWordPressセットアップ）
9. RDSインスタンス作成（マルチAZ構成）
10. ELB作成およびターゲットグループ登録

### ■ 活用時に意識したポイント

ChatGPTを効果的に活用するために、以下の点を意識しました：

- **指示は小さな単位に分割する**  
  一度に多くのことを指示するのではなく、段階的に質問・依頼を行うことで、
  精度の高い出力が得られました。

- **ゴールを明確に伝える**  
  「構成図をもとにAWSリソース一覧を出す」「Terraformのステップを出力する」など、
  目的を明確にすることで、ChatGPTの出力がより意図に沿ったものになりました。


### ■ 効果まとめ

| 活用ポイント | 効果 |
|---------------|------|
| アーキテクチャのテキスト化 | 構成要素の抜け漏れチェックに有効 |
| タスクの整理 | Terraform構築の準備として非常にスムーズ |
| ステップの自動分解 | 後工程（Copilotや人手作業）とのインターフェースが明確に |

- **高可用性（HA）**：複数のアベイラビリティゾーンにリソースを分散
- **スケーラビリティ**：Elastic Load Balancingによりアクセス負荷を分散
- **セキュリティ分離**：パブリックサブネットとプライベートサブネットでリソースを分離

## 5. GitHub Copilotの活用例と効果

ChatGPTでアーキテクチャの整理とタスク化を行った後は、GitHub Copilot（今回は **Copilot Chat Agent**）を使って、実際のTerraformコードの生成・構築作業を進めました。

---

### ■ 活用フロー概要

1. **構成要素の共有（システムの理解）**
2. **タスクリストを使って1ステップずつ実行**
3. **生成されたコードの逐次レビューと実行**
4. **整形（`terraform fmt`）・検証（`terraform validate`）の併用**

---

### ■ ステップ①：構成のインプットと理解の確認

まず初めに、ChatGPTで生成したAWS構成要素をまとめたファイル（例：`aws_service_list.txt`）をCopilot Agentに渡し、これから構築するシステムの概要を理解させました。

#### 使用プロンプト：
```ruby:プロンプト
あなたは優秀なインフラエンジニアです。
aws_service_list.txtをよく読んで構築するシステムについてしっかりと理解してください。
あいまいな点があれば質問してください。
環境をデプロイする準備ができたらおしえてください。
```
このステップを挟むことで、いきなりコードを書かせるよりも文脈の理解が深まり、後続の指示の精度が向上しました。

### ■ ステップ②：タスクごとのコード生成と実行

次に、ChatGPTで作成したタスクリスト（例：`task.md`）を参照させ、
1ステップずつTerraformコードを生成させました。

例えば「VPCを作成する」といった1タスクに対して以下のような手順で進めました：

1. Copilotが対応するTerraformコードを生成  
2. そのコードを確認・必要に応じて修正  
3. `terraform fmt` と `terraform validate` を実行し構文や設定を検証  
4. 問題がなければ次のタスクへ進行
```
プロンプト:
task.mdのTask2から作業を進めてください。

Agent:
Task 2は「VPC作成（CIDRブロックの定義・ネームタグの付与）」です。
TerraformでVPCリソースを作成するため、modules/network/vpc.tf（または同等の場所）にVPCリソース定義を追加し、main.tfから呼び出す構成が一般的です。

まずは、modules/network/ディレクトリとvpc.tfを作成し、VPCリソース（CIDRブロック・Nameタグ付き）を定義します。
また、variables.tfにVPC用の変数も追加します。
```

このように、1ステップずつ**コードを生成・確認・検証・進行**を繰り返すことで、
コードの品質と学習効率を両立することができました。

### ■ 活用時の工夫ポイント

| 工夫 | 効果 |
|------|------|
| 構成要素を事前に渡して「理解」させた | 上流設計の意図が伝わり、出力精度が向上 |
| タスクを小さく区切って渡した | 不明点やエラーの特定がしやすく、効率的 |
| `terraform fmt` や `validate` を随時実行 | 構文ミスや設定ミスを事前にキャッチできた |
| ユーザーがレビューして進行を管理 | 意図と異なるコードが書かれるリスクを抑制 |

### ■ 効果まとめ

GitHub CopilotのAgentを活用することで、Terraformコードの生成を高速かつ正確に進めることができました。  
ChatGPTとCopilotを連携させることで、「構想 → 設計 → タスク化 → 実装」までのプロセスがシームレスに接続され、構築にかかる手間と時間を大幅に削減できました。

## 6. Terraformでのデプロイ手順

TerraformによるAWSリソースのデプロイも、引き続きGitHub CopilotのAgentを活用して進めました。  
コード生成だけでなく、実際のデプロイ作業の補助にも有効に機能しました。

### ■ 前提条件

Terraformを実行する環境には、以下の前提条件を整備しました。

- Terraform CLIがインストール済み（v1.12.0wを使用）
- AWS CLIがインストールされ、`aws configure`で認証情報を設定済み

### ■ デプロイ手順（Copilot Agentを活用）

Terraform のコードの生成完了後、最終ステップとして以下を指示しました。
```
プロンプト:
コードの整合性とaws_service_list.txtの内容と差異がないことを確認してください。

Agent:
最終確認（Task 13）として terraform plan を実行し、全リソースが正しく作成されること・aws_service_list.txtの内容と差異がないことを確認しました。

VPC、サブネット（パブリック/プライベート×2）、IGW、NAT Gateway、ルートテーブル
EC2（2台）、ALB、ターゲットグループ、リスナー
RDS（マスター＋リードレプリカ）、DBサブネットグループ
セキュリティグループ（EC2/ELB/RDS用）
すべてタグ付与・AZ分散・user_data対応
aws_service_list.txtの要件を満たしています。
このまま terraform apply で本番デプロイ可能な状態です。

ご希望があればapplyや追加のご相談も承ります。すべてのタスクが完了しました。
```

実際の apply も Agent に依頼して行いました。

エラーが発生して場合も Agent が調査を行い、修正箇所や方法を提示してくれます。
```
AWSのセキュリティグループ作成時、descriptionに日本語（非ASCII文字）が含まれているためエラーが発生しました。

【修正方法】

aws_security_group の description を「EC2 security group」「ELB security group」「RDS security group」など英語のASCII文字列に修正してください。
修正を行い、再度applyします。
```
その内容が問題ないかを確認し Agent に修正を依頼するだけでほとんどのエラーは解消できました。

### ■ 効果まとめ

100% Agent 任せというわけにはいきませんが、
9割5分は Agent のみでタスクを進めることができました。
Terraformのような宣言的構成管理ツールにおいても、Copilot Agentは非常に信頼できるパートナーでした。

## 7. まとめ
生成AIとTerraformを組み合わせることで効率が上がることは間違いありません。
ただ、「完全自動化」にはまだ多くの壁がある印象です。

今回のような比較的簡単な構成であれば問題無いと思いますが、
複雑な構成になると Agent だけでは解決できない問題も多々出てくるでしょう。

この情報が、どこかで誰かの問題解決の一助となれば嬉しいです。