CLI
官网,开源(GitHub,17.3K Star,4.7K Fork)、纯Python实现、用于管理AWS产品的统一工具,使用命令行控制多个AWS产品并利用脚本来自动执行这些服务。
技巧:
- 命令补全:AWS CLI v2支持Tab键补全命令和参数
- 自动提示:输入
aws时可获得命令和参数建议 - 历史记录:使用
aws history list和aws history show查看执行记录 - S3文件夹概念:S3并无真实文件夹,路径结构由对象前缀模拟
实战
支持超多种安装方式。
因为是纯Python实现,当然支持通过pip安装:
bash
pip install awscli
Unix类系统,也可通过包管理器安装:
bash
apt-get install awscli
对于macOS而言,通过cURL命令curl "https://awscli.amazonaws.com/AWSCLIV2.pkg" -o "AWSCLIV2.pkg"下载得到.pkg文件,双击安装,验证安装是否成功:
bash
aws --version
# 输出:aws-cli/2.36.49 Python/3.14.6 Darwin/24.4.0 exe/x86_64
命令行安装成功后,如何使用才是关键。
执行任何AWS命令行,都需要有(终端下的)登录态信息,默认从~/.aws/credentials文件读取。执行aws login命令会打开浏览器,手动输入用户名密码,登录成功后,会将登录态信息写入到该文件。这是一个纯文本文件,内容示例:
bash
[default]
aws_access_key_id = ASIA111111ILTF72
aws_secret_access_key = ltrIXg2222222mgs333gIKKWB
aws_session_token = IQoJb3JpZ2luX2VjEGYaDmNuLW5vcnRod2VzdC0xIkcwRQIgM8F4s2JtuLS7Sr++j+k7seFKxrN2XpHR+xReQfXaUeoCIQDHrxqzibRDf3TQPmZPD+x/6wVtlmdbuhBaqfh7s8ZWzsP+u68pUmKJzWWndi0vxJv7RM0odgg3/n9a2OOgAQ1gVCQBWmj4vhU6+SS+158wmKhlUjhlOG49N4vWz0KbVzXf4=
既然如此,也支持手动编辑此文件。如何获取这3个数据呢?
打开浏览器开发者调试工具(如Chrome浏览器,快捷键F12),登录AWS控制台,找到接口browserCreds,如https://cn-northwest-1.console.amazonaws.cn/api/prod/browserCreds,查看该接口的响应:
java
{
"accessKeyId": "ASIA111111ILTF72",
"secretAccessKey": "ltrIXg2222222mgs333gIKKWB",
"sessionToken": "IQoJb3JpZ2luX2VjEGYaDmNuLW5vcnRod2VzdC0xIkcwRQIgM8F4s2JtuLS7Sr++j+k7seFKxrN2XpHR+xReQfXaUeoCIQDHrxqzibRDf3TQPmZPD+x/6wVtlmdbuhBaqfh7s8ZWzsP+u68pUmKJzWWndi0vxJv7RM0odgg3/n9a2OOgAQ1gVCQBWmj4vhU6+SS+158wmKhlUjhlOG49N4vWz0KbVzXf4=",
"expiration": "2026-09-23T09:27:07.000Z"
}
accessKeyId和secretAccessKey应该是固定不变,变更的数据是sessionToken。sessionToken默认有效期是24小时:24h内,可反复执行aws命令行;24h后,执行绝大多数命令会报错提示aws: [ERROR]: An error occurred (ExpiredToken) when calling the ListBuckets operation: The provided token has expired.需重新执行aws login命令登录,更新~/.aws/credentials文件。
当然,不是所有的命令行都依赖于~/.aws/credentials文件,如执行aws configure list命令是读取配置列表。执行aws configure set region cn-northwest-1命令会往~/.aws/config文件写入配置项信息(即KV对),aws configure list命令实际上就是从~/.aws/config和~/.aws/credentials文件读取KV对:
~/.aws/config纯文本文件示例:
[sso-session d-1111]
sso_start_url=https://d-1111.awsapps.com/start
sso_region=eu-west-2
sso_registration_scopes=codewhisperer:conversations,codewhisperer:transformations,codewhisperer:taskassist,codewhisperer:completions,codewhisperer:analysis
[default]
region = cn-northwest-1

命令行使用示例:
bash
aws login
aws configure list
aws configure set region cn-northwest-1
# s3
aws s3 ls
aws s3 ls s3://
aws s3 ls s3://bucket1/
# 上传文件
aws s3 cp ./file.txt s3://my-bucket/
# 同步本地与 S3
aws s3 sync /home/ s3://ceshi/ecs-backup/$(date +%Y-%m-%d)/ --delete
# 删除文件或目录
aws s3 rm s3://my-bucket/file.txt
aws s3 rm s3://my-bucket/folder/ --recursive
# 删除空存储桶
aws s3 rb s3://my-bucket/
# ecr
aws ecr get-login-password --region eu-west-2 > .token
# iam
# 列出账户中的 OIDC Provider
aws iam list-open-id-connect-providers
# 检查特定 OIDC Provider 的 thumbprint
aws iam get-open-id-connect-provider \
--open-id-connect-provider-arn "arn:aws-cn:iam::069034308707:oidc-provider/oidc.eks.cn-northwest-1.amazonaws.com.cn/id/9EE8912AEA5717C75FBA19D701D24C46"
# 查看IAM Role的策略
aws iam list-attached-role-policies \
--role-name jlr-gdd-fta-vehicle-service-bridge-role \
--region cn-northwest-1
# secretsmanager
aws secretsmanager get-secret-value --secret-id 'arn:aws-cn:secretsmanager:cn-northwest-1:069034308707:secret:rds!cluster-41693547-4809-466d-84ff-42a7907909d2-3aCjbD' --query SecretString --output text | jq -r '.password'
# ec2
# 检查是否有VPC Endpoint for STS
aws ec2 describe-vpc-endpoints \
--region cn-northwest-1 \
--filters "Name=service-name,Values=com.amazonaws.vpce.cn-northwest-1.sts"
# 检查VPC Endpoint的安全组
aws ec2 describe-security-groups \
--region cn-northwest-1 \
--group-ids <security-group-id-from-vpc-endpoint>
# sts
aws sts get-caller-identity
# eks
aws eks describe-cluster --name <cluster-name> --region cn-northwest-1 | grep -A5 -B5 identity
aws eks describe-cluster --name cn-dev --region cn-northwest-1 | grep -A5 -B5 identity
# 查看集群OIDC提供商信息
aws eks describe-cluster \
--name cn-dev \
--region cn-northwest-1 \
--query 'cluster.identity.oidc.issuer'
注:命令行示例后面会持续更新。
awslocal
LocalStack官方开源(GitHub,1.3K Star,94 Fork)、Python+Shell实现、围绕aws命令行设计的轻量级包装器,专为与LocalStack集成而生,专门用来连接本地的LocalStack模拟环境。
区别:awslocal会自动把请求发送到本地,而不用每次都手动指定地址。
aws:AWS官方命令行工具。默认情况下,会去连接真正的AWS云。如果想让它去连接本地LocalStack,需手动在每条命令后面加上--endpoint-url=http://localhost:4566参数,或配置专门profile。awslocal:轻量级的包装脚本(thin wrapper)。底层调用aws,会自动把--endpoint-url指向本地LocalStack(默认localhost:4566)。
| 特性 | aws(原生) |
awslocal(包装) |
|---|---|---|
| 默认目标 | 真正的AWS云 | 本地的LocalStack |
| 连接方式 | 需要加--endpoint-url或配置profile |
自动指向localhost:4566 |
| 命令语法 | aws s3 ls |
awslocal s3 ls(完全相同) |
| 安装方式 | 官方安装包 | 可通过pip install awscli-local安装 |
例子
- 用原生
aws连接LocalStack:aws --endpoint-url=http://localhost:4566 s3 ls - 用
awslocal连接LocalStack:awslocal s3 ls
LocalStack推出新工具lstk,整合awslocal、tflocal等功能。
本身并不直接管理复杂的配置文件,配置主要通过环境变量实现:
AWS_ENDPOINT_URL:服务端点URL,优先级高于下述两个选项LOCALSTACK_HOST:已弃用,定义LocalStack位置,默认localhost:4566USE_SSL:已弃用,控制是否对连接到LocalStack使用SSL,默认否
对于更细致的配置(如特定于某个服务的行为),通常建议调整LocalStack本身的设置或利用AWS CLI的配置机制。可通过上述环境变量间接控制awslocal的行为,确保它指向正确的LocalStack实例或其他自定义设置。
源码目录结构概览:
awscli-local/
├── github/workflows # GitHub Actions工作流相关配置文件
├── bin # 可执行脚本所在目录
├── output # 空目录
├── tests/bin # 测试
├── Makefile # 构建和自动化任务文件
├── README.md # 主要的项目说明文件
├── requirements.txt # 依赖包列表
├── setup.py # 安装脚本
解读:
bin:包含awslocal入口脚本或相关辅助脚本requirements.txt:列出项目运行所需的Python库setup.py:用于通过pip安装此包裹的元数据和安装逻辑
实战
基于pip安装:pip install awscli-local
安装成功后,可能会出现命令行无法使用的问题:
bash
awslocal
zsh: /Users/tssh/Library/Python/3.9/bin/awslocal: bad interpreter: /Library/Developer/CommandLineTools/usr/bin/python3: no such file or directory
原因在于macOS下Python环境混乱问题(之前安装过3.9,后来安装3.13),解决方法:
bash
# 重新基于3.13安装
python3 -m pip install --upgrade --force-reinstall awscli-local
# 删除3.9
rm -fr ~/Library/Python/3.9
# 验证
which awslocal
# 输出:/Library/Frameworks/Python.framework/Versions/3.13/bin/awslocal
执行awslocal命令输出:
bash
aws: [ERROR]: An error occurred (ParamValidation): the following arguments are required: command
usage: aws [options] <command> <subcommand> [<subcommand> ...] [parameters]
To see help text, you can run:
aws help
aws <command> help
aws <command> <subcommand> help
示例:
bash
awslocal sqs create-queue --queue-name sample-queue
awslocal s3api create-bucket --bucket rishi --region cn-northwest-1
awslocal s3api list-buckets