AWS系列之官方CLI、AWS Local:简介、实战

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:4566
  • USE_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
相关推荐
翼龙云_cloud16 天前
亚马逊云代理商:GPT-6 Astra 上线 Amazon Bedrock API 调用与企业集成实操
云计算·aws·gpt-6 astra
上海英方软件股份有限公司16 天前
什么是 VMware Cloud on AWS 灾难恢复
云计算·vmware·虚拟化·aws·容灾·灾难恢复·云灾备
yunlaodacom18 天前
AWS亚马逊云服务代理商:EC2和S3为什么建议放在同一Region?跨Region流量费和网络成本怎么规划
网络·云计算·aws
科技每日热闻18 天前
AWS Activate云积分可以用于哪些云服务和AI开发场景?
人工智能·ai·云计算·aws
2501_9304724419 天前
深度复盘|数据库迁移实战(上):腾讯云助手解析慢查询日志,定位索引缺失与语法不兼容
数据库·阿里云·ffmpeg·云计算·腾讯云·aws
万象新讯19 天前
申请 AWS Activate 的初创企业要满足什么条件,需准备哪些资料?
大数据·人工智能·aws
商业看点解说19 天前
AWS Activate除了提供云积分,还能为初创企业提供哪些技术和生态资源?
aws
johnny23320 天前
云计算AWS:服务简介与实战
aws
zhojiew21 天前
让 Agent 安全地“借用别人的钥匙“:AgentCore 上用 Authentik 打通 OAuth 出站的一次实战
安全·ai·aws·agentcore