Skip to main content
Glama
farmountain

aaws - AI-Assisted AWS CLI

aaws - AI搭載 AWS CLI

PyPI version Python 3.11+ License: Apache 2.0

自然言語を入力し、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が必要か?

classify_aws_command

AWS CLIコマンドのリスク階層分類 (0-3)

いいえ (静的テーブル)

execute_aws_command

プロファイル/リージョン注入を伴う安全なサブプロセス実行

いいえ

format_aws_output

JSON形状検出 -> プレーンテキストテーブル/カード

いいえ

list_safety_tiers

サービスごとの既知のコマンドリスク階層を閲覧

いいえ

check_aws_environment

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を推論

設定

aaws config init が必須

MCPサーバーを登録するだけ

AWSクラウドエンジニアリングライフサイクル (MCP)

ライフサイクルステージ

スタンドアロンCLI

+ MCP with Claude Code

探索

クエリベース

+ 自律的なインベントリ、サービス横断

プロビジョニング

シングルコマンド

+ 依存関係順序を伴うマルチステップ

監視

スナップショットクエリ

+ 会話形式のドリルダウン

トラブルシューティング

ハードコード + LLMエラー

+ 自律的なログ/メトリクス調査

メンテナンス

手動削除/サイズ変更

+ エージェントが無駄を発見し最適化を提案

セキュリティ

CLIパススルー

+ 権限監査

災害復旧

シングルコマンドバックアップ

+ 調整されたDRワークフロー


バリューストリーム:ユーザー主導 vs エージェント主導のアクション

開発および使用ライフサイクルにおけるすべてのアクティビティを、誰が所有するか(ユーザー:手動、意図的、またはエージェント:自律的、タッチレス)にマッピングします。

セットアップフェーズ

#

アクティビティ

所有者

説明

1

aaws のインストール

ユーザー

pip install aaws

2

設定ウィザードの実行

ユーザー

aaws config init — プロバイダー、モデル、プロファイル、リージョンを選択

3

設定欠落の検出

エージェント

設定が存在しない場合、アクション可能なメッセージを表示して終了

4

設定スキーマの検証

エージェント

Pydanticが全フィールドを検証し、不正な値を拒否

5

設定内の ${ENV_VAR} 解決

エージェント

YAML値内の環境変数参照を置換

6

AAWS_* 環境オーバーライドの適用

エージェント

環境変数がファイルベースの設定を上書き (CI/CD向け)

7

AWS CLI存在の検出

エージェント

起動時にPATH内の aws を確認。インストールリンク付きで即座に失敗

ワンショットコマンドフロー

#

アクティビティ

所有者

説明

8

自然言語リクエストの記述

ユーザー

aaws "show my running EC2 instances"

9

AWSプロファイル + リージョンの解決

エージェント

--profile/--region フラグ > 設定 > boto3セッション > フォールバックの順でマージ

10

コンテキスト付きLLMプロンプトの構築

エージェント

システムプロンプト + プロファイル/リージョンコンテキスト + ユーザーリクエストを注入

11

ツール/関数呼び出し経由のLLM呼び出し

エージェント

構造化ツールスキーマを送信し、ツール使用を強制 (フリーテキスト不可)

12

コマンドが aws で始まるかの検証

エージェント

AWS以外のハルシネーション出力を拒否

13

不正コマンド時の自動再試行

エージェント

修正指示を送信し、一度再試行。その後明確なエラーで失敗

14

曖昧な場合の明確化

エージェント

リクエストが曖昧な場合、推測せずに1つの明確化質問を行う

15

リスク階層の分類 (静的テーブル)

エージェント

100以上の既知のコマンドパターンに対する最長一致

16

LLM割り当て階層へのフォールバック

エージェント

未知のコマンドはLLMのリスク評価を使用

17

保護されたプロファイルの確認

エージェント

prod-* またはユーザー定義のグロブパターンに対するすべての書き込みをブロック

18

コマンド + 説明の表示

エージェント

生成されたコマンドを平易な英語の説明と共に表示

19

実行の確認またはキャンセル

ユーザー

階層0: 自動実行。階層1: y/n。階層2: "yes"と入力。階層3: 拒否。--yes は1-2を自動確認

20

EC2向け --dry-run の提案

エージェント

破壊的なEC2コマンドに対し、先に --dry-run での検証を提案

21

サブプロセス経由の実行

エージェント

shlex.split() + subprocess.run(shell=False) — インジェクション不可能

22

出力形状の検出

エージェント

JSONを検査: リスト -> テーブル、辞書 -> カード、空 -> "No results."

23

フォーマット済み出力のレンダリング

エージェント

リソースタイプごとの列ヒント付きリッチテーブル、または構文ハイライト付きJSON

24

失敗時のエラー分類

エージェント

認証、権限、リソースエラーに対する正規表現マッチング

25

認証用ハードコード修正の提供

エージェント

トークン期限切れ -> aws sso login。認証情報なし -> aws configure

26

リソースエラーのLLM解釈

エージェント

失敗したコマンド + stderrをLLMに送信し、平易な英語の復旧手順を取得

インタラクティブセッションフロー

#

アクティビティ

所有者

説明

27

セッション開始

ユーザー

aaws session [--profile X] [--region Y]

28

セッションヘッダーの表示

エージェント

アクティブなプロファイル、リージョン、終了手順を表示

29

フォローアップリクエストの入力

ユーザー

前のコンテキストを参照する会話形式の入力

30

会話履歴の維持

エージェント

各やり取りを追加。LLMコンテキスト用に直近10件に制限

31

履歴コンテキストを用いた翻訳

エージェント

LLMはマルチターンの洗練のために以前の会話を参照

32

ターンごとの完全な安全パイプライン

エージェント

すべてのコマンドが 分類 -> ゲート -> 実行 -> フォーマット を通過

33

セッション終了

ユーザー

exit/quit と入力、または Ctrl+C

34

Ctrl+Cの適切な処理

エージェント

KeyboardInterruptをキャッチし "Goodbye." と表示。スタックトレースなし

ユーティリティフロー

#

アクティビティ

所有者

説明

35

既存コマンドの説明

ユーザー

aaws explain "aws ec2 describe-instances --filters ..."

36

LLMによる説明生成

エージェント

コマンドの動作、各フラグ、安全上の注意点を説明

37

解決済み設定の表示

ユーザー

aaws config show — シークレットがマスクされた有効な設定

38

スクリプト用 --raw の使用

ユーザー

`aaws --raw "list my buckets"

jq '.Buckets[].Name'`

39

プレビュー用 --dry-run の使用

ユーザー

実行せずに生成されたコマンドを表示

40

階層3拒否のオーバーライド

ユーザー

aaws --i-accept-responsibility "delete all IAM users"

CI/CDと自動化

#

アクティビティ

所有者

説明

41

環境変数のみによる設定

ユーザー

AAWS_LLM_PROVIDER, AAWS_AWS_REGION 等を設定 — 設定ファイル不要

42

ツールへの生の出力パイプ

ユーザー

`aaws --raw "..."

jq ...` でスクリプト処理

43

プッシュ時のテスト (GitHub Actions)

エージェント

Lint (ruff) + 型チェック (mypy) + Python 3.11-3.13でのpytest

44

タグ付け時のPyPI公開

エージェント

hatch build + v* タグでの信頼された公開


インストール

ステップ1: AWS CLI v2のインストール

aaws はAWS CLIがインストールされ、PATHに含まれている必要があります。すべてのAWS操作を aws コマンドに委譲します。

macOS:

brew install awscli

Windows:

https://awscli.amazonaws.com/AWSCLIV2.msi からインストーラーをダウンロードして実行してください。

または winget 経由:

winget install Amazon.AWSCLI

Linux (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 aaws

Claude 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

~/.config/aaws/config.yaml

Windows

%APPDATA%\aaws\config.yaml

完全な設定リファレンス

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_LLM_PROVIDER

llm.provider

`AAWS

Related MCP Connectors