CSVアップロードだけでAWS CLIコマンドを生成・実行するAIシステムの構築
はじめに
こんにちは!ファンリードDXP事業部AWSグループのMartimです!
今回は、Amazon Bedrock Agentを活用して、テスト仕様書をアップロードするだけでインフラストラクチャのテストを完全自動化するシステムを構築したので、その設計と実装について共有します。
このシステムの特徴:
- CSVファイルをS3にアップロードするだけでテスト開始
- AIが自然言語のテスト内容を理解してAWS CLIコマンドを自動生成
- サーバーレスでスケーラブルな処理
- 結果とエビデンスをCSV形式で自動出力
- セキュリティを重視した安全なコマンド実行
背景・課題
インフラテスト仕様書作成の現実
皆さん、インフラのテスト仕様書を書いているときにこんな経験はありませんか?
「これ、もう疑似テストじゃん...」と
例えばEC2のテストの手順を書いているとき:
手順1: AWSマネジメントコンソールにログイン
手順2: EC2サービスを開く
手順3: インスタンス一覧を表示
手順4: 対象インスタンスをクリック
手順5: インスタンス名がweb-serverであることを確認
この手順を書いているとき、
「リソース名を検索した後どこ押せばいいんだっけ」
と思った場合に実際にマネジメントコンソールにログインしてEC2調べて設定値確認できる画面に遷移して…
「これ、もう疑似テストじゃん...」
設定箇所が100個あったら、手順書も100倍に膨らんで、見づらいしコピペだらけ。
テスト項目が多すぎて、本当に重要な部分が埋もれてしまう...
従来の課題
- 手順書が冗長: 同じような操作手順の繰り返し
- コピペ地獄: 似たような項目を量産してしまう
- 可読性の低下: 本質的なテスト内容が見えにくい
- メンテナンス困難: 手順変更時の修正箇所が膨大
- 実行ミス: 手動実行による人為的エラー
そんな時代だからこそ、AIのために資料を作る時代になったんですね!
人間が読む詳細な手順書ではなく、AIが理解できるシンプルな指示書に変える発想です。
システムアーキテクチャ
全体構成
動作の流れ
- CSVアップロード: ユーザーがテスト仕様書CSVをS3にアップロード
- イベント検知: S3イベント通知がLambda関数をトリガー
- ファイル解析: CSVファイルを読み取り、各テスト項目を抽出
- AI解析: Bedrock Agentが各テスト内容を理解しCLIコマンドを生成
- コマンド実行: 生成されたコマンドを安全に実行
- 結果判定: 実行結果を解析し、OK/NGを判定
- ファイル出力: 結果CSVとエビデンスCSVをS3に保存
技術スタック
| コンポーネント | 技術 | 役割 |
|---|---|---|
| トリガー | S3 Event Notifications | CSVアップロード検知 |
| 処理エンジン | AWS Lambda (Python) | メイン処理ロジック |
| AIエージェント | Amazon Bedrock Agent | 自然言語解析・コマンド生成 |
| ストレージ | Amazon S3 | ファイル入出力 |
入力・出力仕様
従来のテスト仕様書との比較
このような感じで、設定箇所が増えればその分項目も増え、ほとんど同じ手順などをコピペで記載することもあると思います。
それをAIにやってもらうため、CSVに落とし込んで以下の3列のみの仕様書にしました
今回のAI向けテスト仕様書(CSV)
No,テスト内容,結果
1,EC2の名前がEC2-nameであること,
2,S3バケットlogs-bucketが存在すること,
3,RDSインスタンスのステータスがavailableであること,
圧倒的な簡潔さ!
従来の冗長な手順書から、本質的なテスト内容だけを抽出した形になります。
結果ファイル(出力CSV)
Result.csv
No,テスト内容,結果
1,EC2の名前がEC2-nameであること,OK
2,S3バケットlogs-bucketが存在すること,NG
3,RDSインスタンスのステータスがavailableであること,OK
エビデンス.csv
No,テスト内容,実行コマンド,コマンド出力,実行時刻
1,EC2の名前がweb-serverであること,aws ec2 describe-instances --filters Name=tag:Name Values=EC2-name,"{""Reservations"": [...]}",2024-01-01 12:00:00
2,S3バケットlogs-bucketが存在すること,aws s3api head-bucket --bucket logs-bucket,NoSuchBucket: The specified bucket does not exist,2024-01-01 12:00:05
実装のポイント
1. Bedrock Agentによる自然言語理解
AIエージェントが
「EC2の名前がEC2-nameであること」
という自然言語を理解し、適切なAWS CLIコマンド(aws ec2 describe-instances --filters Name=tag:Name,Values=EC2-name)を自動生成します。
また、名前に限定せず一覧取得を指示することで、アカウント内の一覧を取得できるため、設定値が多くても一度のテストで完了することが可能です。
プロンプト設計では、テスト内容を解析して以下の情報を構造化して返すよう指示しています:
- 実行すべきAWS CLIコマンド
- 結果検証のためのロジック
- 対象リソースタイプ(EC2、S3、RDS等)
- コマンドの安全性判定
2. セキュリティを重視した実行制御
実行可能コマンドの制限機能により、読み取り専用のコマンド(describe、list、head等)のみ実行を許可し、危険なコマンド(delete、terminate等)は自動的に拒否します。
IAM権限も最小権限の原則に従い、必要最小限の読み取り権限のみを付与しています。
そのため、実際にCLIの生成と実行をしても構築したリソースを変更しない設計となっています。
3. エラーハンドリングとフォールバック機能
Bedrock Agentが利用できない場合や、CLIを生成できない場合、エラーCLIを生成した場合に、基本的なパターンマッチングによる処理が継続されます。
パターンにはこのようなものを前提としています
「(AWSリソース名)の(項目)が(設定値)であること」
また、個々のテストでエラーが発生しても、全体の処理は停止せず、エラー内容を記録して次のテストに進みます。
4. 包括的なエビデンス収集
各テストの実行コマンド、出力結果、実行時刻を自動的に記録し、監査やトラブルシューティングに必要な情報を提供します。
対応リソースと拡張性
現在対応しているAWSリソース
- EC2
- S3
- RDS
- Lambda
- CloudWatch
- IAM
今後の拡張
現在対応していないAWSサービスへの対応拡張を検討中です。
構築時には『とりあえず動いてテストできれば』という考えでいたのでリソースも少なめにしていますが、読み取り権限とフォールバック機能を充実させれば簡単に拡張が可能となっています。
まとめ
Amazon Bedrock Agentを活用することで、冗長な手順書から本質的なテスト内容への転換を実現できました。
得られた効果
- 仕様書作成時間: 80%削減(項目、条件、手順記載などが不要)
- テストミス: ほぼゼロ(自動実行)
- 可読性: 大幅向上(本質的な内容のみ)
- メンテナンス性: 大幅改善(項目レベルでの管理)
学んだこと
- AIとの協働:人間が詳細手順を書く時代から、AIが理解できる指示を書く時代へ
- 本質の抽出:複雑な手順の中から、本当に重要な要件を見極める重要性
- 自動化の価値:単純な作業時間短縮だけでなく、品質向上効果も大きい
このシステムにより、テストエンジニアは冗長な手順書作成から解放され、より本質的なテスト設計に集中できるようになりました。
AIのために資料を作る時代、皆さんも始めてみませんか?
それでは、よきAWSライフを!
