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 내장 (전체 문맥) |
다단계 워크플로우 | 한 번에 하나의 명령어 | Claude Code가 여러 단계 조정 |
오류 해석 | 오류당 LLM 호출 | Claude Code가 stderr를 추론 |
구성 |
| MCP 서버 등록만 하면 됨 |
AWS 클라우드 엔지니어링 수명 주기 (MCP)
수명 주기 단계 | 독립형 CLI | + Claude Code와 함께 MCP 사용 |
탐색 | 쿼리 기반 | + 자율 인벤토리, 서비스 간 탐색 |
프로비저닝 | 단일 명령어 | + 의존성 순서가 있는 다단계 작업 |
모니터링 | 스냅샷 쿼리 | + 대화형 드릴다운 |
문제 해결 | 하드코딩 + 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 | 잘못된 명령어 자동 재시도 | 에이전트 | 수정 지침 전송, 1회 재시도 후 명확한 오류와 함께 실패 |
14 | 모호할 경우 명확화 요청 | 에이전트 | 요청이 모호하면 추측하는 대신 하나의 명확화 질문을 함 |
15 | 위험 등급 분류 (정적 테이블) | 에이전트 | 100개 이상의 알려진 명령어 패턴과 최장 접두사 일치 |
16 | LLM 할당 등급으로 폴백 | 에이전트 | 알 수 없는 명령어는 LLM의 위험 평가 사용 |
17 | 보호된 프로필 확인 | 에이전트 |
|
18 | 명령어 + 설명 표시 | 에이전트 | 생성된 명령어와 평이한 영어 설명을 표시 |
19 | 실행 확인 또는 취소 | 사용자 | 등급 0: 자동 실행. 등급 1: y/n. 등급 2: "yes" 입력. 등급 3: 거부. |
20 | EC2용 | 에이전트 | 파괴적인 EC2 명령어의 경우 |
21 | 하위 프로세스를 통해 실행 | 에이전트 |
|
22 | 출력 형태 감지 | 에이전트 | JSON 검사: 리스트 -> 테이블, 딕셔너리 -> 카드, 비어있음 -> "결과 없음." |
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 프로필이 하나 이상 필요합니다.
옵션 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 ID3단계: 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에 유용
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