AWS構成図を自動生成！Terraform × AI で実現するプロンプトジェネレータ

## はじめに

AWSインフラの構築とその可視化に悩んでいませんか？EC2 AWS Visual Sandboxを使えば、Terraformで作成したAWSリソースを瞬時に図式化できます。さらに、最新のAI技術を活用することで、構成図の自動生成までも可能になりました。本記事では、このパワフルなツールの使い方と、核心となるスクリプトの詳細を解説します。

<blockquote class="twitter-tweet" data-media-max-width="800"><p lang="ja" dir="ltr">この要件定義書を使うジェネレーターを作って可視化をやってみた！！！<br>まだ調整は必要だけど細かい個所は追々詰めていきます！ <a href="https://t.co/LFqPepF3OP">https://t.co/LFqPepF3OP</a> <a href="https://t.co/BCzSUkLiLv">pic.twitter.com/BCzSUkLiLv</a></p>&mdash; Maki@Sunwood AI Labs. (@hAru_mAki_ch) <a href="https://twitter.com/hAru_mAki_ch/status/1822232377873125382?ref_src=twsrc%5Etfw">August 10, 2024</a></blockquote> 

## 主な特徴

- 🚀 Terraformを使用したAWSリソースの自動デプロイ
- 📊 AWSインフラの視覚的表現
- 🐳 Docker環境でのスムーズな運用
- 🤖 AI（大規模言語モデル）を活用した構成図の自動生成
- 🧠 構成図生成のためのAIプロンプト自動作成機能

## 作成されるAWSリソース

本ツールは以下のAWSリソースを自動的に作成・管理します：

- EC2インスタンス
- VPC
- パブリックサブネット
- インターネットゲートウェイ
- ルートテーブル
- セキュリティグループ
- Elastic IP

これらのリソースを組み合わせることで、堅牢で拡張性の高いAWS環境を構築できます。

## セットアップ手順

1. プロジェクトディレクトリに移動：
   ```bash
   cd s03_ec2_aws_visual
   ```

2. Terraformでリソースをデプロイ：
   ```bash
   terraform init
   terraform apply
   ```

3. Dockerコンテナの起動：
   ```bash
   docker-compose up -d
   docker-compose exec terraform-visualizer /bin/bash
   ```

4. AIを使った構成図生成プロセスの開始：
   ```bash
   python terraform_vis_prompt_generator.py
   ```

5. 生成されたプロンプトをAIモデル（例：Claude 3.5 Sonnet）に入力し、出力されたPythonスクリプトを`aws_terraform_visualizer3.py`として保存。

6. 構成図の生成：
   ```bash
   python aws_terraform_visualizer3.py
   ```

7. 生成された`aws_ec2_infrastructure3.png`を確認。

8. 使用後のリソース削除：
   ```bash
   terraform destroy
   ```

## terraform_vis_prompt_generator.pyの詳細解説

このスクリプトは、AI用のプロンプトを自動生成する心臓部です。主要な機能を詳しく見ていきましょう。

### 1. 必要なライブラリのインポート

```python
import requests
from bs4 import BeautifulSoup
import markdown
from jinja2 import Template
from rich.console import Console
from rich.panel import Panel
from rich.progress import Progress, SpinnerColumn, TextColumn, BarColumn
from rich.syntax import Syntax
from art import *
```

これらのライブラリを使用することで、ウェブスクレイピング、テキスト処理、美しいコンソール出力が可能になります。

### 2. ファイル読み込み機能

```python
def read_file(file_path: str) -> str:
    with console.status(f"[bold green]ファイル読み込み中: {file_path}"):
        with open(file_path, 'r', encoding='utf-8') as file:
            return file.read()
```

この関数は、指定されたパスのファイルを読み込み、その内容を文字列として返します。

### 3. ドキュメントスクレイピング機能

```python
def scrape_diagrams_docs(url: str) -> str:
    # ... (省略) ...
    try:
        response = requests.get(url)
        soup = BeautifulSoup(response.text, 'html.parser')
        content = soup.find('div', class_='container')
        markdown_content = markdown.markdown(content.get_text())
        return markdown_content
    except Exception as e:
        console.print(f"[bold red]予期せぬエラー: {e}")
    # ... (省略) ...
```

この関数は、指定されたURLからAWS Diagramsのドキュメントを取得し、必要な情報を抽出してMarkdown形式に変換します。

### 4. メイン処理

```python
def main():
    tprint('terraform vis prompt generator')
    console.print(Panel("[bold blue]Terraform可視化プロセスを開始します", expand=True))

    files_to_read = [
        ('docs/TERRAFORM_VIS_REQ_SPEC.md', '要件仕様書'),
        ('sandbox/s02_streamlit_aws_deployer/main.tf', 'Terraform メインファイル'),
        ('sandbox/s02_streamlit_aws_deployer/terraform.tfstate', 'Terraform 状態ファイル')
    ]

    # ... (ファイル読み込みと処理) ...

    template = Template(file_contents['要件仕様書'])
    updated_content = template.render(
        main_tf_content=file_contents['Terraform メインファイル'],
        terraform_tfstate_content=file_contents['Terraform 状態ファイル'],
        diagrams_docs=diagrams_docs_content
    )

    # ... (結果の保存と表示) ...
```

メイン処理では、必要なファイルを読み込み、テンプレートを使用してプロンプトを生成し、結果を保存・表示します。

このスクリプトにより、Terraformの設定とAWS Diagramsの情報を基に、最適なAIプロンプトが自動生成されます。

## 注意事項

- 💡 本環境は学習・実験用です。本番環境での使用は推奨されません。
- 💰 AWSリソースの使用には料金が発生する可能性があります。使用後は必ずリソースを削除しましょう。
- 🔒 セキュリティグループの設定は慎重に行い、必要に応じて調整してください。
- 🤖 AI生成されたコードは、必ず人間がレビューし、必要に応じて修正を加えてください。

## まとめ

EC2 AWS Visual Sandboxは、Terraformで作成したAWSリソースの可視化を革新的に簡単にします。AIを活用した自動構成図生成機能により、インフラ構築とドキュメンテーションのプロセスが大幅に効率化されます。ぜひ試してみてください！

最後に、本プロジェクトへの貢献も歓迎します。バグ報告や機能提案は、GitHubのIssueからお願いします。皆様のフィードバックをお待ちしています！


## リポジトリ

https://github.com/Sunwood-ai-labs/aws-terraform-sandbox/tree/main/sandbox/s03_ec2_aws_visual


<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>