aaws - AI-Assisted AWS CLI
aaws - AI搭載 AWS CLI
自然言語を入力し、AWSコマンドを出力。
pip install aaws -- pypi.org/project/aaws/
AWSドキュメントへのコンテキスト切り替えはもう不要です。やりたいことを平易な英語で記述すれば、aawsが正しいAWS CLIコマンドを生成、説明し、安全に実行します。
$ aaws "list my S3 buckets"
Command: aws s3api list-buckets --output json
Lists all S3 buckets in your account.
Name CreationDate
my-app-assets 2024-03-15T10:22:00+00:00
my-logs-bucket 2024-06-01T08:00:00+00:00
staging-uploads 2025-01-10T14:30:00+00:00
3 result(s)目次
仕組み
すべての aaws の呼び出しは、6段階のパイプラインに従います。一部のステージはユーザー主導(ユーザーがトリガーする)であり、その他はエージェント主導(システムが自律的に処理する)です。この分離が設計の核心原則です。
YOU aaws (AGENT)
─── ────────────
Type natural language ──────────> LLM translates to AWS CLI command
Agent classifies risk tier (0-3)
Agent selects safety gate
Review command + confirm ───────> Agent executes via subprocess
Agent detects output shape
Agent formats as table/card/JSON
Read formatted results <────────
(on error) Agent classifies error
(on error) Agent generates recovery advice
Read error + suggestion <───────Claude Code (MCP) での使用
Claude Codeのサブスクリプションで aaws を使用しましょう。APIキーやLLM設定は不要で、追加コストもゼロです。
aaws が直接LLMを呼び出す代わりに、Claude CodeがLLMとなります。aaws MCPサーバーは、安全性の分類、コマンド実行、出力フォーマットを、Claude Codeが呼び出すツールとして提供します。
Standalone CLI: MCP Mode:
User -> aaws -> LLM (you pay) User -> Claude Code (subscription) -> aaws MCP tools
-> AWS CLI -> AWS CLIセットアップ
前提条件:AWS CLI v2がインストールされ、設定されている必要があります(上記のインストールを参照)。
# Install with MCP support
pip install aaws[mcp]
# Register with Claude Code (one-time)
claude mcp add --scope user aaws -- python -m aaws.mcp_serverまたは、プロジェクトスコープの .mcp.json を追加します(バージョン管理され、チームで共有可能):
{
"mcpServers": {
"aaws": {
"command": "python",
"args": ["-m", "aaws.mcp_server"]
}
}
}Claude Code内で /mcp を実行し、ツールがリストされていることを確認してください。
利用可能なMCPツール
ツール | 目的 | LLMが必要か? |
| AWS CLIコマンドのリスク階層分類 (0-3) | いいえ (静的テーブル) |
| プロファイル/リージョン注入を伴う安全なサブプロセス実行 | いいえ |
| JSON形状検出 -> プレーンテキストテーブル/カード | いいえ |
| サービスごとの既知のコマンドリスク階層を閲覧 | いいえ |
| AWS CLI、アクティブなプロファイル、リージョンの確認 | いいえ |
Claude Codeでの会話例
You: List my S3 buckets in us-west-2
Claude Code:
1. Calls check_aws_environment() -> {aws_cli_available: true, active_profile: "default"}
2. Calls classify_aws_command("aws s3api list-buckets --output json")
-> {tier: 0, tier_label: "Read-only", should_confirm: false}
3. Calls execute_aws_command("aws s3api list-buckets --output json", region="us-west-2")
-> {stdout: '{"Buckets": [...]}', success: true}
4. Calls format_aws_output(stdout)
-> Formatted table with bucket names and dates
You: Now delete the one named old-logs
Claude Code:
1. Calls classify_aws_command("aws s3 rb s3://old-logs --force")
-> {tier: 2, tier_label: "Destructive", should_confirm: true}
2. Asks: "This is a destructive operation (tier 2). Delete bucket old-logs?"
3. You confirm
4. Calls execute_aws_command(...)スタンドアロンCLIとの違い
側面 | スタンドアロンCLI | MCPモード |
LLMプロバイダー | ユーザーが設定 (Bedrock/OpenAI) | Claude Codeサブスクリプション (無料) |
自然言語翻訳 | aaws translator.py | Claude Code LLM |
セッションメモリ | プロセス内、10ターン制限 | Claude Code組み込み (フルコンテキスト) |
マルチステップワークフロー | 一度に1コマンド | Claude Codeが複数ステップを調整 |
エラー解釈 | エラーごとにLLM呼び出し | Claude Codeがstderrを推論 |
設定 |
| MCPサーバーを登録するだけ |
AWSクラウドエンジニアリングライフサイクル (MCP)
ライフサイクルステージ | スタンドアロンCLI | + MCP with Claude Code |
探索 | クエリベース | + 自律的なインベントリ、サービス横断 |
プロビジョニング | シングルコマンド | + 依存関係順序を伴うマルチステップ |
監視 | スナップショットクエリ | + 会話形式のドリルダウン |
トラブルシューティング | ハードコード + LLMエラー | + 自律的なログ/メトリクス調査 |
メンテナンス | 手動削除/サイズ変更 | + エージェントが無駄を発見し最適化を提案 |
セキュリティ | CLIパススルー | + 権限監査 |
災害復旧 | シングルコマンドバックアップ | + 調整されたDRワークフロー |
バリューストリーム:ユーザー主導 vs エージェント主導のアクション
開発および使用ライフサイクルにおけるすべてのアクティビティを、誰が所有するか(ユーザー:手動、意図的、またはエージェント:自律的、タッチレス)にマッピングします。
セットアップフェーズ
# | アクティビティ | 所有者 | 説明 |
1 |
| ユーザー |
|
2 | 設定ウィザードの実行 | ユーザー |
|
3 | 設定欠落の検出 | エージェント | 設定が存在しない場合、アクション可能なメッセージを表示して終了 |
4 | 設定スキーマの検証 | エージェント | Pydanticが全フィールドを検証し、不正な値を拒否 |
5 | 設定内の | エージェント | YAML値内の環境変数参照を置換 |
6 |
| エージェント | 環境変数がファイルベースの設定を上書き (CI/CD向け) |
7 | AWS CLI存在の検出 | エージェント | 起動時にPATH内の |
ワンショットコマンドフロー
# | アクティビティ | 所有者 | 説明 |
8 | 自然言語リクエストの記述 | ユーザー |
|
9 | AWSプロファイル + リージョンの解決 | エージェント |
|
10 | コンテキスト付きLLMプロンプトの構築 | エージェント | システムプロンプト + プロファイル/リージョンコンテキスト + ユーザーリクエストを注入 |
11 | ツール/関数呼び出し経由のLLM呼び出し | エージェント | 構造化ツールスキーマを送信し、ツール使用を強制 (フリーテキスト不可) |
12 | コマンドが | エージェント | AWS以外のハルシネーション出力を拒否 |
13 | 不正コマンド時の自動再試行 | エージェント | 修正指示を送信し、一度再試行。その後明確なエラーで失敗 |
14 | 曖昧な場合の明確化 | エージェント | リクエストが曖昧な場合、推測せずに1つの明確化質問を行う |
15 | リスク階層の分類 (静的テーブル) | エージェント | 100以上の既知のコマンドパターンに対する最長一致 |
16 | LLM割り当て階層へのフォールバック | エージェント | 未知のコマンドはLLMのリスク評価を使用 |
17 | 保護されたプロファイルの確認 | エージェント |
|
18 | コマンド + 説明の表示 | エージェント | 生成されたコマンドを平易な英語の説明と共に表示 |
19 | 実行の確認またはキャンセル | ユーザー | 階層0: 自動実行。階層1: y/n。階層2: "yes"と入力。階層3: 拒否。 |
20 | EC2向け | エージェント | 破壊的なEC2コマンドに対し、先に |
21 | サブプロセス経由の実行 | エージェント |
|
22 | 出力形状の検出 | エージェント | JSONを検査: リスト -> テーブル、辞書 -> カード、空 -> "No results." |
23 | フォーマット済み出力のレンダリング | エージェント | リソースタイプごとの列ヒント付きリッチテーブル、または構文ハイライト付きJSON |
24 | 失敗時のエラー分類 | エージェント | 認証、権限、リソースエラーに対する正規表現マッチング |
25 | 認証用ハードコード修正の提供 | エージェント | トークン期限切れ -> |
26 | リソースエラーのLLM解釈 | エージェント | 失敗したコマンド + stderrをLLMに送信し、平易な英語の復旧手順を取得 |
インタラクティブセッションフロー
# | アクティビティ | 所有者 | 説明 |
27 | セッション開始 | ユーザー |
|
28 | セッションヘッダーの表示 | エージェント | アクティブなプロファイル、リージョン、終了手順を表示 |
29 | フォローアップリクエストの入力 | ユーザー | 前のコンテキストを参照する会話形式の入力 |
30 | 会話履歴の維持 | エージェント | 各やり取りを追加。LLMコンテキスト用に直近10件に制限 |
31 | 履歴コンテキストを用いた翻訳 | エージェント | LLMはマルチターンの洗練のために以前の会話を参照 |
32 | ターンごとの完全な安全パイプライン | エージェント | すべてのコマンドが 分類 -> ゲート -> 実行 -> フォーマット を通過 |
33 | セッション終了 | ユーザー |
|
34 | Ctrl+Cの適切な処理 | エージェント | KeyboardInterruptをキャッチし "Goodbye." と表示。スタックトレースなし |
ユーティリティフロー
# | アクティビティ | 所有者 | 説明 | |
35 | 既存コマンドの説明 | ユーザー |
| |
36 | LLMによる説明生成 | エージェント | コマンドの動作、各フラグ、安全上の注意点を説明 | |
37 | 解決済み設定の表示 | ユーザー |
| |
38 | スクリプト用 | ユーザー | `aaws --raw "list my buckets" | jq '.Buckets[].Name'` |
39 | プレビュー用 | ユーザー | 実行せずに生成されたコマンドを表示 | |
40 | 階層3拒否のオーバーライド | ユーザー |
|
CI/CDと自動化
# | アクティビティ | 所有者 | 説明 | |
41 | 環境変数のみによる設定 | ユーザー |
| |
42 | ツールへの生の出力パイプ | ユーザー | `aaws --raw "..." | jq ...` でスクリプト処理 |
43 | プッシュ時のテスト (GitHub Actions) | エージェント | Lint (ruff) + 型チェック (mypy) + Python 3.11-3.13でのpytest | |
44 | タグ付け時のPyPI公開 | エージェント |
|
インストール
ステップ1: AWS CLI v2のインストール
aaws はAWS CLIがインストールされ、PATHに含まれている必要があります。すべてのAWS操作を aws コマンドに委譲します。
macOS:
brew install awscliWindows:
https://awscli.amazonaws.com/AWSCLIV2.msi からインストーラーをダウンロードして実行してください。
または winget 経由:
winget install Amazon.AWSCLILinux (x86_64):
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install確認:
aws --version
# aws-cli/2.x.x Python/3.x.x ...ステップ2: AWS認証情報の設定
有効な認証情報で設定されたAWSプロファイルが少なくとも1つ必要です。
オプションA: IAMアクセスキー (最も簡単)
aws configure以下が求められます:
AWS Access Key ID [None]: AKIAIOSFODNN7EXAMPLE
AWS Secret Access Key [None]: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
Default region name [None]: us-east-1
Default output format [None]: jsonオプションB: AWS SSO (組織に推奨)
aws configure ssoブラウザのログインフローに従ってください。その後、セッションをアクティブ化します:
aws sso login --profile your-profile-nameオプションC: 環境変数 (CI/CD)
export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
export AWS_DEFAULT_REGION=us-east-1認証情報が機能することを確認:
aws sts get-caller-identity
# Should return your account ID, ARN, and user IDステップ3: aawsのインストール
要件: Python 3.11+、AWS CLI v2 (上記で設定済み)
パッケージは pypi.org/project/aaws/ で公開されています。
スタンドアロンCLI (LLMプロバイダーが必要 — BedrockまたはOpenAI):
pip install aawsClaude Code MCPサポート付き (Anthropicサブスクリプションを使用、APIキー不要):
pip install aaws[mcp]
claude mcp add --scope user aaws -- python -m aaws.mcp_serverインストールを確認:
aaws --help
aws sts get-caller-identity # confirm AWS creds work最新バージョンへのアップグレード
pip install --upgrade aawsソースからインストール (開発用)
git clone https://github.com/farmountain/ai_aws_cli.git
cd ai_aws_cli
pip install -e ".[dev,mcp]"クイックスタート
1. 設定
aaws config initウィザードが以下を案内します:
aaws configuration wizard
LLM provider [bedrock/openai] (bedrock):
Bedrock model ID (anthropic.claude-3-5-haiku-20241022-v1:0):
Default AWS profile (default):
Default AWS region (us-east-1):
Configuration saved to ~/.config/aaws/config.yaml
Run aaws "list my S3 buckets" to test.2. 最初のコマンドを実行
aaws "list my S3 buckets"3. 他のコマンドを試す
# Read-only (auto-executes, no confirmation)
aaws "show my running EC2 instances in us-west-2"
aaws "how many Lambda functions do I have"
aaws "get the details of my RDS database named prod-db"
# Write operations (asks y/n)
aaws "create an S3 bucket named my-new-bucket in us-east-1"
aaws "tag instance i-abc123 with Environment=staging"
# Preview without executing
aaws --dry-run "terminate instance i-abc123"
# Explain an existing command
aaws explain "aws iam attach-role-policy --role-name MyRole --policy-arn arn:aws:iam::aws:policy/ReadOnlyAccess"
# Raw output for scripting
aaws --raw "list my S3 buckets" | jq '.Buckets[].Name'設定
設定ファイルの場所
OS | パス |
Linux/macOS |
|
Windows |
|
完全な設定リファレンス
llm:
provider: bedrock # "bedrock" or "openai"
model: anthropic.claude-3-5-haiku-20241022-v1:0
api_key: ${OPENAI_API_KEY} # Only for OpenAI; supports ${ENV_VAR} syntax
temperature: 0.1 # Low for deterministic output
timeout: 30 # Seconds
aws:
default_profile: default
default_region: us-east-1
safety:
auto_execute_tier: 0 # Auto-run commands at or below this tier (0=read-only)
protected_profiles: # Glob patterns — all writes blocked on these profiles
- "prod-*"
- "production"
output:
format: auto # "auto" detects tables/cards/JSON
raw: false # true = always output raw JSON
color: true環境変数によるオーバーライド
すべての設定フィールドは AAWS_ で始まる環境変数でオーバーライドできます。ファイル設定が不可能なCI/CDで便利です。
環境変数 | 設定フィールド |
|
|
`AAWS |
Related MCP Connectors
Hosted MCP server connecting claude.ai, ChatGPT and other AI apps to your own computer
- UnifAPIOAuthcom.unifapi
Hosted MCP server for live public-data APIs and Skills for AI agents.
Remote MCP server for supportsheep: run AI interviews and manage support content for your blog.
An MCP server that gives your AI access to the source code and docs of all public github repos