关于 mastering-aws-cli
mastering-aws-cli 是面向有经验开发者的参考技能,用于通过 AWS CLI v2 管理 AWS 服务。内容涵盖命令示例、服务导航、配置指引,以及脚本编写和故障排查模式。
主要功能
- 01AWS CLI v2 命令参考
- 02服务决策树与指南
- 03配置文件、SSO 和凭证
- 04JMESPath 筛选与输出选项
- 05等待器、别名和命令框架
- 06安全实践与故障排查
适用场景
- 01在终端管理 AWS 服务
- 02在脚本中筛选资源输出
- 03配置配置文件和 SSO 访问
- 04诊断常见 CLI 错误
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ spillwavesolutions/ mastering-aws-cli --skill mastering-aws-cli安装后在 Claude Code 中输入/mastering-aws-cli确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
.gitignoreREADME.mdreferences/advanced-patterns.mdeks.mdbastion-tunneling.mdecr.mddynamodb.mdgithub-cicd.mdaurora.mdecs.mdlambda.mdkinesis.mdmsk.mdglue.mds3.mdiam-security.mdprivate-parameters.mdvpc-networking.mdsetup.md详细介绍
AWS CLI v2 快速参考
一个用于从终端管理 AWS 服务的统一工具。本指南重点介绍 CLI v2 功能、实用示例,以及面向经验丰富开发者的高级模式。
快速入门
# Verify installation and version
aws --version
# Interactive configuration
aws configure # Access keys + region + output format
aws configure sso # IAM Identity Center (SSO) - recommended
# Verify identity
aws sts get-caller-identity # Shows Account, UserId, ARN
# Enable auto-prompt for command discovery
aws dynamodb --cli-auto-prompt
高级用户技巧
# See all waiter commands for a service
aws ec2 wait help
# Generate command skeleton (fill in the blanks)
aws lambda create-function --generate-cli-skeleton > create-fn.json
# Create CLI alias for common commands
aws configure set cli_alias.whoami "sts get-caller-identity"
aws whoami # Now works!
# Disable pager for scripting
export AWS_PAGER=""
有关 JMESPath 精通技巧和自动化窍门,请参阅高级模式。
全局选项
| 标志 | 说明 |
|---|---|
--profile NAME | 使用 ~/.aws/credentials 中的命名配置文件 |
--region REGION | 覆盖默认区域(例如 us-east-1) |
--output FORMAT | 输出格式:json(默认)、text、table、yaml、yaml-stream |
--query EXPR | 使用 JMESPath 表达式筛选输出 |
--no-paginate | 禁用自动分页(仅显示第一页) |
--dry-run | 检查权限,但不执行操作(EC2 等) |
--debug | 详细的 HTTP/API 调试日志 |
--cli-auto-prompt | 交互式参数补全 |
--no-cli-pager | 禁用输出分页 |
决策树
计算与容器
Need compute?
├── Serverless functions ────────────► Lambda (references/lambda.md)
├── Docker containers
│ ├── Managed orchestration ───────► ECS (references/ecs.md)
│ ├── Kubernetes ──────────────────► EKS (references/eks.md)
│ └── Container registry ──────────► ECR (references/ecr.md)
└── Virtual machines ────────────────► EC2 (use aws ec2 commands)
数据与存储
Need data storage?
├── Object/blob storage ─────────────► S3 (references/s3.md)
├── NoSQL (key-value/document) ──────► DynamoDB (references/dynamodb.md)
├── Relational SQL ──────────────────► Aurora/RDS (references/aurora.md)
├── Data catalog & ETL ──────────────► Glue (references/glue.md)
└── Data warehouse ──────────────────► Redshift (aws redshift commands)
流式处理与消息传递
Need streaming/messaging?
├── Kafka-compatible ────────────────► MSK (references/msk.md)
├── Real-time streams ───────────────► Kinesis (references/kinesis.md)
├── Message queues ──────────────────► SQS (aws sqs commands)
└── Pub/Sub notifications ───────────► SNS (aws sns commands)
安全与访问
Need security/access management?
├── Users, roles, policies ──────────► IAM (references/iam-security.md)
├── Secrets & credentials ───────────► Secrets Manager/SSM (references/private-parameters.md)
├── Private network access ──────────► VPC (references/vpc-networking.md)
└── Secure tunneling ────────────────► SSM/Bastion (references/bastion-tunneling.md)
参考文件导航
| 参考资料 | 说明 | 关键触发词 |
|---|---|---|
| 设置 | 安装、配置、配置文件、SSO | install、configure、sso、profile |
| IAM 与安全 | 角色、策略、STS、MFA、跨账户 | iam、role、policy、sts、assume-role |
| Lambda | 函数、层、别名、URL、事件 | lambda、serverless、function |
| ECS | 集群、任务、服务、Fargate | ecs、fargate、task、container |
| EKS | 集群、节点组、kubeconfig、IRSA | eks、kubernetes、kubectl、k8s |
| ECR | 存储库、身份验证、扫描、生命周期 | ecr、docker、registry、image |
| S3 | 存储桶、对象、同步、预签名、生命周期 | s3、bucket、upload、sync |
| DynamoDB | 表、项目、查询、流、备份 | dynamodb、ddb、nosql |
| Aurora/RDS | 集群、serverless v2、克隆、蓝绿部署 | rds、aurora、mysql、postgresql |
| Glue | 目录、爬虫、ETL 作业、工作流 | glue、etl、catalog、crawler |
| MSK | Kafka 集群、无服务器、配置 | msk、kafka、streaming |
| Kinesis | 数据流、Firehose、使用者 | kinesis、stream、firehose |
| 密钥与参数 | Parameter Store、Secrets Manager、轮换 | ssm、secrets、parameter、rotation |
| VPC 与网络 | VPC、子网、安全组、端点 | vpc、subnet、security-group、endpoint |
| 堡垒机与隧道 | SSM Session Manager、端口转发 | bastion、tunnel、ssm、ssh |
| GitHub CI/CD | OIDC、GitHub Actions、CodeBuild | github、actions、oidc、cicd |
| 高级模式 | JMESPath、等待器、骨架、别名 | jmespath、query、waiter、alias |
环境变量
| 变量 | 用途 | 示例 |
|---|---|---|
AWS_ACCESS_KEY_ID | 用于身份验证的访问密钥 | AKIAIOSFODNN7EXAMPLE |
AWS_SECRET_ACCESS_KEY | 用于身份验证的秘密密钥 | wJalrXUtnFEMI/... |
AWS_SESSION_TOKEN | 会话令牌(临时凭证) | 用于 STS assume-role |
AWS_PROFILE | 要使用的命名配置文件 | production |
AWS_REGION | 请求使用的 AWS 区域 | us-west-2 |
AWS_DEFAULT_OUTPUT | 默认输出格式 | json、text、table |
AWS_PAGER | 分页器程序(设为空以禁用) | "" |
AWS_CONFIG_FILE | 自定义配置文件路径 | ~/.aws/config |
AWS_SHARED_CREDENTIALS_FILE | 自定义凭证文件路径 | ~/.aws/credentials |
AWS_CA_BUNDLE | 自定义 CA 证书包 | /path/to/cert.pem |
AWS_RETRY_MODE | 重试模式 | standard、adaptive |
凭证优先级
CLI 按以下顺序解析凭证(匹配到的第一个来源优先):
- 命令行选项(
--profile、显式凭证) - 环境变量(
AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY) - Web 身份令牌(EKS IRSA、OIDC)
- SSO 凭证(IAM Identity Center)
- 凭证文件(
~/.aws/credentials) - 配置文件(含有
credential_process的~/.aws/config) - 容器凭证(ECS 任务角色)
- 实例元数据(EC2 实例配置文件、IMDSv2)
常见模式
切换配置文件
# Use specific profile for one command
aws s3 ls --profile production
# Set default profile for session
export AWS_PROFILE=production
# List configured profiles
aws configure list-profiles
使用 JMESPath 筛选输出
# Get specific fields
aws ec2 describe-instances \
--query 'Reservations[*].Instances[*].[InstanceId,State.Name]' \
--output table
# Filter running instances
aws ec2 describe-instances \
--query 'Reservations[*].Instances[?State.Name==`running`].InstanceId' \
--output text
等待资源状态
# Wait for instance to be running
aws ec2 wait instance-running --instance-ids i-1234567890abcdef0
# Wait for Lambda function update
aws lambda wait function-updated --function-name my-function
最佳实践
| 类别 | 建议 |
|---|---|
| 安全性 | 使用 aws configure sso,而不是长期有效的访问密钥 |
| 安全性 | 计算资源(EC2/Lambda/ECS)使用 IAM 角色,而不是嵌入密钥 |
| 安全性 | 为敏感操作启用 MFA |
| 脚本编写 | 使用 --output json 或 --output text 进行解析 |
| 脚本编写 | 使用 --query 筛选数据并减少输出 |
| 安全性 | 在执行破坏性操作前使用 --dry-run |
| 性能 | 使用 --page-size 控制大型列表的内存占用 |
| 区域 | 在脚本中显式设置区域,避免意外情况 |
| 成本 | 使用生命周期策略(S3/ECR)自动清理 |
| 调试 | 使用 --debug 查看原始 HTTP 请求/响应 |
常见错误速查
| 错误 | 原因 | 修复方法 |
|---|---|---|
ExpiredToken | 会话凭证已过期 | 运行 aws sso login 或 aws sts get-session-token |
AccessDenied | 缺少 IAM 权限 | 检查 IAM 策略;使用 --debug 查看所需操作 |
InvalidClientTokenId | 访问密钥无效 | 验证 AWS_ACCESS_KEY_ID 或运行 aws configure |
UnauthorizedAccess | 区域或账户错误 | 检查 --region 标志和 aws sts get-caller-identity |
ThrottlingException | API 速率限制已超出 | 添加带指数退避的重试逻辑 |
NoCredentialProviders | 未找到凭证 | 检查凭证链;运行 aws configure list |
如需详细的故障排除信息,请参阅 设置。
不适用场景
- AWS SDK 代码 — 对于 boto3、AWS SDK for JavaScript 等,请使用编程文档
- CloudFormation/Terraform — 此技能介绍 CLI 命令,不涵盖 IaC 模板
- 控制台 UI 操作步骤 — 本文侧重 CLI;控制台操作指南请参阅 AWS 文档
- 定价/账单 — 请使用 AWS 定价计算器或 Cost Explorer 文档
快速命令参考
# Identity & Access
aws sts get-caller-identity
# → {"Account": "123456789012", "UserId": "AIDAEXAMPLE", "Arn": "arn:aws:iam::123456789012:user/dev"}
aws sts assume-role --role-arn arn:aws:iam::123456789012:role/Admin --role-session-name mysession
# → {"Credentials": {"AccessKeyId": "ASIA...", "SecretAccessKey": "...", "SessionToken": "..."}}
# S3
aws s3 ls
# → 2024-01-15 bucket-name-1
# → 2024-02-20 bucket-name-2
aws s3 sync ./local s3://bucket/prefix --delete
# Lambda
aws lambda invoke --function-name fn response.json
# → {"StatusCode": 200, "ExecutedVersion": "$LATEST"}
aws lambda update-function-code --function-name fn --zip-file fileb://code.zip
# → {"FunctionName": "fn", "LastModified": "2024-12-28T...", "State": "Active"}
# ECS
aws ecs list-clusters
# → {"clusterArns": ["arn:aws:ecs:us-east-1:123456789012:cluster/prod"]}
aws ecs update-service --cluster prod --service api --force-new-deployment
# EKS
aws eks update-kubeconfig --name my-cluster
# → Added new context arn:aws:eks:us-east-1:123456789012:cluster/my-cluster
aws eks list-clusters
# → {"clusters": ["my-cluster", "dev-cluster"]}
# Secrets
aws secretsmanager get-secret-value --secret-id prod/api/key --query SecretString --output text
# → sk_live_xxxxxxxxxxxxx
aws ssm get-parameter --name /app/prod/db/host --with-decryption --query Parameter.Value --output text
# → db.example.com
# Debugging
aws ssm start-session --target i-0123456789abcdef0
# → Starting session with SessionId: user-0a1b2c3d4e5f67890
评论
支持 Markdown