AI エージェントで Infrastructure as Code の変更を自動化する
フルスタック デベロッパー兼テクニカル ライター
インフラストラクチャ管理は、根本的な変革の時期を迎えています。Infrastructure as Code は、インフラストラクチャをソフトウェアとして扱うことで、クラウドリソースのプロビジョニングと管理の方法をすでに大きく変えました。次の進化のステップは、こうした設定を自律的に理解し、適応させ、最適化できるインテリジェントな自動化です。
エージェント型 AI は、従来のアプローチから新しい世界への転換を意味します。IaC の文脈では、エージェントは大規模言語モデルの推論能力と、クラウドプラットフォームや監視ツールへのインターフェースを組み合わせることができます。これにより、エージェントはインフラストラクチャのコードを生成するだけでなく、その仕組みを理解することもできます。
このチュートリアルでは、AI エージェントをセットアップして、Infrastructure as Code の変更を自動化する方法を学びます。
前提条件
このチュートリアルを進めるには、次のものが必要です。
- OpenAI API キー
- 任意のクラウドプロバイダー上のサーバー。このチュートリアルでは AWS のサーバーを使用しますが、どのプロバイダーを使ってもかまいません。AWS の場合は、アクセスキー ID とシークレットが必要です。作成方法はこちらをご覧ください。
- 次のスコープを持つクラシックの Personal Access Token(PAT)を発行済みの GitHub アカウント
reporead:orgread:usercopilot
- Infrastructure as Code(IaC)に関する知識
- 最新版の kind、Helm、kubectl、Docker のインストール
Kubernetes クラスターのセットアップ
このチュートリアルでは Kagent を使用します。Kagent は、ツールサーバーや AI エージェントをセットアップするためのエージェント型 AI フレームワークです。Kagent を使うには、稼働中の Kubernetes クラスターが必要です。すでにクラスターがある場合は、このセクションをスキップしてかまいません。
Docker が起動していることを確認してください。次のコマンドを実行して、新しいクラスターを作成します。
kind create cluster --name kagent-demo
次のコマンドで、作成したクラスターを使用します。
kubectl cluster-info --context kind-kagent-demo
Kagent のセットアップ
Kagent のセットアップには Helm を使用します。CRD(カスタムリソース定義)を含む kagent の Helm チャートをインストールするには、次のコマンドを実行します。
helm install kagent-crds oci://ghcr.io/kagent-dev/kagent/helm/kagent-crds \
--namespace kagent-demo \
--create-namespace \
--wait
次のような出力が表示されます。
NAME: kagent-crds
LAST DEPLOYED: Sat Aug 30 21:20:31 2025
NAMESPACE: kagent-demo
STATUS: deployed
REVISION: 1
TEST SUITE: None
次に、OpenAI の API キーを環境変数に設定します。次のコマンドを実行します。
export OPENAI_API_KEY="your-api-key-here"
次のコマンドで Kagent をインストールします。
helm install kagent oci://ghcr.io/kagent-dev/kagent/helm/kagent \
--namespace kagent-demo \
--set app.enabled=true \
--set providers.openAI.apiKey=$OPENAI_API_KEY
インストールが完了すると、次のようなレスポンスが表示されます。
NAME: kagent
LAST DEPLOYED: Sun Sep 14 16:12:45 2025
NAMESPACE: kagent-demo
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
################################################################################
# KAGENT DEPLOYED #
################################################################################
Kagent has been successfully deployed to namespace: kagent-demo
ACCESSING THE UI:
1. Forward the UI service port:
kubectl -n kagent-demo port-forward service/kagent-ui 8080:80
2. Open your browser and visit:
http://localhost:8080
ACCESSING THE CONTROLLER API:
kubectl -n kagent-demo port-forward service/kagent-controller 8083:8083
API endpoint: http://localhost:8083/api
DEPLOYED COMPONENTS:
- Controller: kagent-controller (manages Kubernetes resources)
- Engine: kagent-engine (AI agent runtime)
- UI: kagent-ui (web interface)
Kagent のインストールが完了したら、次は AI のツールサーバーをセットアップします。
ツールサーバーのセットアップ
このチュートリアルでは、GitHub 用と AWS Terraform 用の 2 つのツールサーバーが必要です。これらのツールサーバーにより、AI エージェントは正確な Terraform 設定を生成し、GitHub リポジトリに PR を作成できるようになります。
ツールサーバーのセットアップ方法は 2 つあり、このチュートリアルでは両方を取り上げます。1 つ目は RemoteMCPServer リソースを定義する方法、2 つ目は Kagent の UI を使う方法です。GitHub の MCP サーバーは 1 つ目の方法で、AWS Terraform の MCP サーバーは 2 つ目の方法で追加します。
GitHub MCP サーバーの追加
RemoteMCPServer リソースを定義して、GitHub MCP サーバーをクラスターに追加します。この定義は YAML ファイルに記述します。
iac-agent という名前のフォルダーを作成します。新しいフォルダーの中に、github-mcp.yaml というファイルを作成します。
mkdir iac-agent
cd iac-agent
touch github-mcp.yaml
次のコードを追加します。
apiVersion: kagent.dev/v1alpha2
kind: RemoteMCPServer
metadata:
name: github-mcp
namespace: kagent-demo
spec:
description: My github tool-server
url: https://api.githubcopilot.com/mcp/
protocol: STREAMABLE_HTTP
timeout: 30s
sseReadTimeout: 300s
terminateOnClose: true
headersFrom:
- name: Authorization
valueFrom:
type: Secret
name: github-mcp-secret
key: token
注: GitHub MCP サーバーへの接続リクエストは、Personal Access Token を使って認証する必要があります。トークンは別の YAML ファイル(github-mcp-secret)に保存します。
github-mcp-secret.yaml という名前の新しいファイルを作成し、次のコードを追加します。
apiVersion: v1
kind: Secret
metadata:
name: github-mcp-secret
type: Opaque
stringData:
token: "Bearer YOUR_GITHUB_PAT"
注: YOUR_GITHUB_PAT は、実際の GitHub Personal Access Token に置き換えてください。
GitHub のシークレットをクラスターに適用します。YAML ファイルがあるディレクトリで、次のコマンドを実行します。
kubectl apply -f github-mcp-secret.yaml --namespace kagent-demo
次のレスポンスが表示されます。
secret/github-mcp-secret created
次に、GitHub MCP サーバーの設定を適用します。
kubectl apply -f github-mcp.yaml --namespace kagent-demo
次のようなレスポンスが表示されます。
remotemcpserver.kagent.dev/github-mcp created
MCP サーバーが正しく追加されたことを確認するには、次のコマンドを実行します。
kubectl get remotemcpservers --namespace kagent-demo
kubectl describe remotemcpservers github-mcp --namespace kagent-demo
GitHub MCP サーバーの準備ができたら、Kagent の UI を起動します。次のコマンドを実行します。
kubectl -n kagent-demo port-forward service/kagent-ui 8001:80
これで、Kagent の UI がポート 8001(http://localhost:8001/)で公開されます。ブラウザーで開いてみましょう。
Skip wizard をクリックして、kagent のダッシュボードに移動します。
AWS Terraform ツールサーバーのセットアップ
Kagent の UI で Create をクリックし、New Tool Server を選択します。Add Server ボタンをクリックします。
次の内容でフォームに入力します。
基本情報:
- Server Name:
aws-terraform-server - Server Namespace:
kagent-demo -
Command Preview:
uvx awslabs.terraform-mcp-server@latest -
Package Name:
awslabs.terraform-mcp-server@latest - Image:
public.ecr.aws/sam/build-provided.al2-x86_64:latest-x86_64 - Command:
npx - Arguments:
@aws-iac/mcp-server-terraform
環境変数:
- FASTMCP_LOG_LEVEL:
ERROR(または任意のログレベル)
Add Server をクリックして完了します。
完了すると、エージェントがベストプラクティス、ドキュメント、モジュール分析の機能にアクセスできるようになったことを知らせる確認メッセージが表示されます。これにより、エージェントは自然言語のリクエストを、実行可能な AWS の Terraform 設定に変換できるようになります。
各ツールサーバーを展開すると、提供されている機能を確認できます。
注: No tools available のようなメッセージが表示される場合は、Pod がまだ起動していない可能性があります。
必要に応じて、クラスター内の Pod のステータスを確認できます。次のコマンドを実行します。
kubectl get pods -n kagent-demo
NAME READY STATUS RESTARTS AGE
argo-rollouts-conversion-agent-7745d45586-8hfq7 1/1 Running 0 48m
aws-terraform-server-68c7d6f847-jqt4b 1/1 Running 0 11m
cilium-debug-agent-6cf5c7f5d8-k49mv 1/1 Running 0 48m
cilium-manager-agent-6d4bd5bc75-mwxlv 1/1 Running 0 48m
cilium-policy-agent-594ff8d454-nxs8b 1/1 Running 0 48m
helm-agent-7784cb8496-tvh2z 1/1 Running 0 48m
istio-agent-75bf8fcb79-t2hjf 1/1 Running 0 48m
k8s-agent-84c75c9b5c-bvzlw 1/1 Running 0 48m
kagent-controller-7df585ff79-qgdj2 1/1 Running 0 52m
kagent-grafana-mcp-646748498b-22vch 1/1 Running 0 52m
kagent-querydoc-7697fddb9c-dsdwn 1/1 Running 0 52m
kagent-tools-7dbf78b678-pzltr 1/1 Running 0 52m
kagent-ui-784fdfb687-r2nmg 1/1 Running 0 52m
kgateway-agent-7cc679d68-npdj7 1/1 Running 0 48m
observability-agent-54794f5484-t7rsm 1/1 Running 0 46m
promql-agent-68bf6bc9d6-g5dhk 1/1 Running 0 48m
すべての Pod のステータスが RUNNING になるまで待ってから、ページを更新してサーバーの最新の状態を確認します。
GitHub リポジトリの作成
次に、AI エージェントが Terraform 設定を自動的に生成し、プルリクエストとして送信する先の GitHub リポジトリを作成します。このリポジトリは、エージェントが管理するインフラストラクチャのコード変更をすべて受け取る場所になります。
このチュートリアルでは、README ファイルだけを含む最小限のリポジトリから始めます。実際の運用では、Terraform 設定がすでにある既存のリポジトリを、エージェントが変更・拡張することになるでしょう。
GitHub で新しいリポジトリを作成する
- GitHub にアクセスして、アカウントにログインします。
- New ボタンをクリックするか、github.com/new にアクセスします。
- リポジトリ名を
terraform-iac-agentに設定します。 - Public に設定されていることを確認します(このチュートリアルでは必須です)。
- README、.gitignore、ライセンスで初期化しないでください。これらはローカルで追加します。
- Create repository をクリックします。
ローカルのプロジェクトフォルダーを作成する
iac-agent フォルダーの外に、リポジトリ用の別のプロジェクトフォルダーを作成します。フォルダー名は terraform-iac-agent とします。
mkdir terraform-iac-agent
cd terraform-iac-agent
README.md ファイルを追加し、次の内容を記述します。
# Terraform IAC Agent
This repository contains Terraform configuration files generated by an AI agent to automate infrastructure as code changes on AWS.
ファイルをコミットして、GitHub リポジトリにプッシュします。
git init
git add .
git commit -m "Initial commit"
git remote add origin https://github.com/your-username/terraform-iac-agent.git
git push -u origin main
注: your-username は、実際の GitHub ユーザー名に置き換えてください。このリポジトリの URL は、エージェントの設定で参照します。
AI エージェントの作成
ツールサーバーの設定と対象リポジトリの準備ができたら、ワークフロー全体をオーケストレーションする AI エージェントを作成します。このエージェントは GitHub と AWS Terraform のツールサーバーを組み合わせて、インフラストラクチャの要件を理解し、必要なコードとプルリクエストを自動的に生成します。
エージェントの設定フォルダー(iac-agent)に戻り、aws-terraform-agent.yaml という名前の新しいファイルを作成します。次のコードを追加します。
apiVersion: kagent.dev/v1alpha2
kind: Agent
metadata:
name: aws-terraform-agent
namespace: kagent-demo
spec:
description: IAC agent for generating Terraform configuration
type: Declarative
declarative:
modelConfig: default-model-config
stream: true
systemMessage: |
- You're a helpful AI Agent that helps users automate Infrastructure As Code (IAC) changes
- You know how to generate valid, efficient and secure Terraform configuration in the form of .tf files.
- You also know how to work with git to clone repositories, create and update files, commit files to branches, and create pull requests.
# Instructions
- You will be provided a list of changes the user wants you to make to the repo. This will include creating new files and/or updating existing files. You will follow these steps:
- Clone the repository
- Create a new branch with an appropriate name
- Create and/or update files as specified in the list of changes
- Commit the changes to the branch
- Push the branch to the repo
- Create a PR to merge the pushed branch into the main branch
# Rules
- You can only provide Terraform configuration for AWS cloud provider
- You only know how to create t3.micro instances (unless user asks for something different) using Amazon Linux 2 AMI
- Automatically attach an external IP address to the instance
- Create a security group that allows SSH access (port 22) from anywhere
- Any resource you create must have the following tags:
- Creator: terraform-agent
- Only respond with the Terraform configuration and NOTHING else
- If anything is unclear please ask the user to clarify and/or provide information.
- You only have access to one repository with the URL <<INSERT_GITHUB_REPO_URL>>
tools:
- type: McpServer
mcpServer:
apiGroup: kagent.dev
kind: RemoteMCPServer
name: github-mcp
toolNames:
- create_branch
- create_pull_request
- get_file_contents
- push_files
- create_or_update_file
- type: McpServer
mcpServer:
apiGroup: kagent.dev
kind: MCPServer
name: aws-terraform-server
toolNames:
- SearchAwsccProviderDocs
注: «INSERT_GITHUB_REPO_URL» は、このプロジェクト用に作成した GitHub リポジトリの URL に置き換えてください。
次のコマンドを実行して、エージェントを追加します。
kubectl apply -f aws-terraform-agent.yaml
次のようなレスポンスが表示されます。
agent.kagent.dev/aws-terraform-agent created
エージェントの作成が完了したので、インフラストラクチャのコードを生成して、リポジトリに PR をプッシュできるようになりました。
Kagent の UI(http://localhost:8001/)に移動し、作成したエージェントを選択します。
注: エージェントが見つからない場合は、port-forward コマンドを再実行してページを更新してみてください。
エージェントとのチャットセッションが開きます。次のプロンプトから始めましょう。
Create a new Terraform configuration file for a t3.micro EC2 instance in us-east-2 region with SSH access
エージェントは、提供されたツールを使って、リクエストされた Terraform 設定を生成し、GitHub リポジトリにプルリクエストを作成します。GitHub リポジトリには、承認待ちの新しいプルリクエストが届いています。
PR をマージする前に、自動化プロセスに最後のステップを追加する必要があります。
CircleCI との連携
Terraform 設定の生成とプッシュを自動化できたのと同じように、CircleCI を使って Terraform 設定のデプロイも自動化できます。
そのためには、terraform-iac-agent リポジトリ(先ほど作成した GitHub リポジトリ)のルートに .circleci フォルダーを作成し、その中に config.yml ファイルを作成します。config.yml ファイルを開き、次の内容を追加します。
version: 2.1
orbs:
aws-cli: circleci/aws-cli@5.4.1
terraform: circleci/terraform@3.7.0
workflows:
validate_and_deploy:
jobs:
- validate_and_format_terraform
- deploy_terraform:
context: dev-iac
requires:
- validate_and_format_terraform
jobs:
validate_and_format_terraform:
executor: terraform/default
steps:
- checkout
- terraform/init
- run:
name: Format Terraform
command: terraform fmt -recursive
- terraform/validate
deploy_terraform:
executor: terraform/default
steps:
- checkout
- aws-cli/setup
- terraform/init
- terraform/plan
- terraform/apply
この設定ファイルでは、AWS-CLI と Terraform の Orb を使ってステップを実行します。validate_and_deploy ワークフローは、Terraform の Orb を使って Terraform 設定を検証し、変更を AWS のサーバーに適用します。AWS への接続には AWS CLI を使用します。
また、Terraform の変更を正しくデプロイするには、Amazon の認証情報を提供する必要があります。そのために、CircleCI のコンテキストを使用します。
AWS の認証情報用のコンテキストを追加する
CircleCI のダッシュボードで、サイドバーのリンクをクリックして Organization Settings ページに移動します。
Contexts をクリックし、Create Context ボタンをクリックします。コンテキストに一意の名前を付けます。作成したコンテキストは、セキュリティが All members に設定された状態で一覧に表示されます。これは、組織内の誰もが実行時にこのコンテキストにアクセスできることを意味します。このチュートリアルの .circleci/config.yml で指定しているとおり、コンテキスト名は dev-iac にする必要があります。
次に、dev-iac コンテキストを選択し、Add Environment Variable をクリックして、次の変数を入力します。
AWS_ACCESS_KEY_ID- 先ほど作成した IAM ロールの AWS アクセスキー IDAWS_SECRET_ACCESS_KEY- 先ほど作成した IAM ロールの AWS シークレットキー
アプリケーションと CircleCI の連携
プロジェクトのダッシュボードに移動します。terraform-iac-agent リポジトリを探して、Set Up Project をクリックします。
コードが保存されている GitHub のブランチ名を入力し、Set Up Project をクリックします。
最初のワークフローが実行され、正常に完了します。
インスタンスが作成されたことを確認するには、AWS ECS インスタンスコンソールにアクセスします。
まとめ
このチュートリアルでは、Infrastructure as Code の変更を自動化する AI エージェントを構築しました。日常のコミュニケーションで使うような自然言語のリクエストを使って、インフラストラクチャを変更できます。このシステムでは、3 つの専門エージェントが連携して動作します。AWS のベストプラクティスを理解する Terraform エージェント、バージョン管理を担う GitHub エージェント、そしてワークフロー全体をオーケストレーションする AWS IaC エージェントです。
このチュートリアルの完全なコードは、こちらのリポジトリにあります。
このアプローチは、ほかのクラウドプロバイダーにも応用でき、さらに機能を追加して拡張することもできます。これにより、必要なガバナンスとレビューのプロセスを維持しながら、自律的なインフラストラクチャ管理の基盤をチームにもたらすことができます。