はじめに
最近では、ChatGPTをはじめとする生成AIだけでなく、自ら判断してツールを実行するAIエージェントが注目されています。
私自身もAIエージェントに興味を持ち、「まずは何か作ってみよう」と思い、自己学習としてDynamoDBの設定を自動で診断するAIエージェントを作成してみました。
本記事では、
- OpenAI APIとは何か
- OpenAI APIキーの取得方法
- boto3でDynamoDBの設定情報を取得する方法
- OpenAI APIへ情報を渡して診断してもらう方法
について紹介します。
AIエージェントをこれから学び始める方の参考になれば幸いです。
※本記事はAIエージェント学習の一環として作成したサンプルです。実運用向けではなく、仕組みを理解することを目的としています。
この記事はこんな方におすすめ
- AIエージェントを作ってみたい方
- OpenAI APIを触ってみたい方
- PythonでAIを使ってみたい方
- AWSを学習中の方
- DynamoDBのベストプラクティスを学びたい方
今回作るAIエージェント
例えば、次のような設定のDynamoDBテーブルがあるとします。
| 項目 | 設定 |
|---|---|
| PITR | 無効 |
| TTL | 無効 |
| Billing Mode | PROVISIONED |
| Auto Scaling | 無効 |
AIエージェントへ
sample-tableを診断して
と依頼すると、
診断結果
❌ PITRが無効です
→ 誤削除時に復元できません
❌ TTLが無効です
→ 一時データが自動削除されません
❌ Auto Scalingが無効です
→ スロットリングが発生する可能性があります
おすすめ
・PITRを有効化
・TTLを設定
・Auto Scalingまたはオンデマンドへ変更
のように診断してくれます。
システム構成
ユーザー
│
▼
Pythonプログラム
│
├──────────────┐
▼ ▼
OpenAI API boto3
│ │
│ ▼
│ DynamoDB
└──────┬───────┘
▼
診断結果
流れは非常にシンプルです。
- boto3でDynamoDBの設定を取得
- OpenAI APIへ設定情報を渡す
- AIがベストプラクティスと比較
- 診断結果を返す
使用する技術
| 技術 | 用途 |
|---|---|
| Python | バックエンド |
| OpenAI API | AI |
| boto3 | AWS SDK |
| DynamoDB | 診断対象 |
OpenAI APIとは?
OpenAI APIとは、
ChatGPTなどのAIモデルを自分のプログラムから利用するためのAPIです。
ChatGPTのようにブラウザから利用するのではなく、
Pythonなどのプログラムから
- 質問する
- 要約する
- コードを書く
- データを分析する
といったことができます。
今回作成するAIエージェントも、このOpenAI APIを利用します。
OpenAI APIキーを取得する
まずはOpenAI APIを利用するためにAPIキーを取得します。
① OpenAI Platformへアクセス
以下へアクセスします。
ChatGPTと同じアカウントでログインできます。
② API Keysを開く
左メニューの
API Keys
をクリックします。
または
からアクセスできます。
③ Create new secret keyをクリック
右上の
Create new secret key
をクリックします。
④ 名前を入力
例えば
dynamodb-agent
など任意の名前を入力します。
⑤ APIキーをコピー
次のようなキーが発行されます。
sk-proj-xxxxxxxxxxxxxxxxxxxxxxxx
このキーは一度しか表示されません。必ずコピーして保管してください。
⑥ 環境変数へ設定
Windows
setx OPENAI_API_KEY "sk-proj-xxxxxxxxxxxxxxxx"
PowerShellを再起動すると反映されます。
確認する場合は
echo $env:OPENAI_API_KEY
macOS / Linux
export OPENAI_API_KEY="sk-proj-xxxxxxxxxxxxxxxx"
確認する場合は
echo $OPENAI_API_KEY
ライブラリをインストール
pip install openai boto3
OpenAI APIを使ってみる
まずはAIへ簡単な質問をしてみます。
from openai import OpenAI
client = OpenAI()
response = client.responses.create(
model="gpt-5.5",
input="こんにちは!"
)
print(response.output_text)
これだけでOpenAI APIを利用できます。
■つまづきポイント
自分は上記を実行したところ、**"openai.RateLimitError"**が起きました。
このエラーはコードのエラーではなく、OpenAI APIの利用枠(Quota)がないことを意味しています。
なので以下対応(クレジットカード登録)を試してみてください。
◎Billing
https://platform.openai.com/settings/organization/billing/overview
を開いて、
クレジットカードを登録したか
課金が有効になっているか
を確認してください。
boto3でDynamoDBの設定を取得する
まずはDynamoDBの情報を取得します。
import boto3
dynamodb = boto3.client("dynamodb")
table = dynamodb.describe_table(
TableName="sample-table"
)
print(table)
取得できる情報には、
- テーブル名
- Billing Mode
- インデックス
などがあります。
PITRを取得する
pitr = dynamodb.describe_continuous_backups(
TableName="sample-table"
)
print(pitr)
有効であれば、
PointInTimeRecoveryStatus
ENABLED
となります。
TTLを取得する
ttl = dynamodb.describe_time_to_live(
TableName="sample-table"
)
print(ttl)
有効であれば、
TimeToLiveStatus
ENABLED
となります。
OpenAI APIへ設定情報を渡す
取得した情報をAIへ渡します。
from openai import OpenAI
client = OpenAI()
prompt = """
以下のDynamoDB設定を診断してください。
テーブル名: sample-table
PITR: Disabled
TTL: Disabled
BillingMode: PROVISIONED
AWSのベストプラクティスに沿って改善点を教えてください。
"""
response = client.responses.create(
model="gpt-5.5",
input=prompt
)
print(response.output_text)
boto3と組み合わせる
実際には取得した設定をそのままAIへ渡します。
import boto3
from openai import OpenAI
client = OpenAI()
dynamodb = boto3.client("dynamodb")
table = dynamodb.describe_table(
TableName="sample-table"
)
ttl = dynamodb.describe_time_to_live(
TableName="sample-table"
)
pitr = dynamodb.describe_continuous_backups(
TableName="sample-table"
)
billing_mode = table.get("Table", {}).get("BillingModeSummary", {}).get(
"BillingMode",
"PROVISIONED"
)
ttl_status = ttl.get(
"TimeToLiveDescription",
{}
).get(
"TimeToLiveStatus",
"DISABLED"
)
pitr_status = (
pitr.get("ContinuousBackupsDescription", {})
.get("PointInTimeRecoveryDescription", {})
.get("PointInTimeRecoveryStatus", "DISABLED")
)
prompt = f"""
以下のDynamoDB設定を診断してください。
テーブル名: {table["Table"]["TableName"]}
Billing Mode: {billing_mode}
TTL: {ttl_status}
PITR: {pitr_status}
AWSのベストプラクティスに沿って改善点を教えてください。
"""
response = client.responses.create(
model="gpt-5.5",
input=prompt
)
print(response.output_text)
これだけで実際のAWS環境をAIが診断できるようになります。
実行結果
例えば次のような診断結果が返ってきます。
診断結果
❌ PITRが無効です
→ 有効化すると35日以内であれば任意時点へ復元できます。
❌ TTLが無効です
→ セッション情報やキャッシュデータにはTTLがおすすめです。
❌ Billing ModeがPROVISIONEDです
→ アクセス数が予測できない場合はオンデマンドも検討してください。
❌ Auto Scalingの設定も確認してください。
AWS公式ドキュメントを確認しなくても、改善ポイントを分かりやすく提案してくれます。
Function Callingを利用するとさらに便利
今回はPython側で
- describe_table()
- describe_time_to_live()
- describe_continuous_backups()
を実行しました。
OpenAI APIにはFunction Callingという機能があります。
これを利用すると、
AI自身が
「PITRを確認するためにAWS APIを呼び出そう」
と判断できます。
ユーザー
「sample-tableを診断」
│
▼
OpenAI
│
describe_table()
▼
Python
▼
AWS
▼
OpenAI
▼
診断結果
よりAIエージェントらしい実装になります。
今後追加してみたい機能
今回作ってみて、次のような機能も追加できそうだと感じました。
- CloudWatchアラームの確認
- DynamoDB Streamsの確認
- GSIの確認
- SSE(暗号化)の確認
- AWS CLIの生成
- 修正方法まで提案
- 複数テーブルをまとめて診断
今後はFunction Callingも取り入れ、より実践的なAIエージェントへ発展させてみたいと思います。
まとめ
今回は自己学習として、DynamoDB設定チェックAIエージェントを作成してみました。
OpenAI APIとboto3を組み合わせることで、AWSの設定情報を取得し、AIに診断してもらうことができます。
ポイントのおさらい
- OpenAI APIを利用するにはAPIキーの取得が必要
- Pythonから簡単にChatGPT相当のAIを利用できる
- boto3でAWS情報を取得できる
- AIがベストプラクティスと比較して診断できる
- Function Callingを使うとさらにAIエージェントらしくなる
AIエージェントというと難しく感じますが、まずは「AWSから情報を取得し、それをAIへ渡す」というシンプルな構成でも十分学習になります。
今後はFunction CallingやRAGなども取り入れながら、より実践的なAIエージェントの開発にも挑戦してみたいと思います。
参考
-
OpenAI API Documentation
https://platform.openai.com/docs -
OpenAI Python SDK
https://github.com/openai/openai-python -
Boto3 Documentation
https://boto3.amazonaws.com/v1/documentation/api/latest/index.html -
Amazon DynamoDB Documentation
https://docs.aws.amazon.com/amazondynamodb/