AWS国际版 AWS亚马逊云命令行工具使用

亚马逊aws / 2026-04-17 17:05:35

下载.png

你有没有过这种时刻:点开AWS控制台,鼠标划拉十分钟才找到那个叫“启动实例”的按钮,结果手一抖选错可用区,又得重来;或者深夜改配置,发现控制台刷新慢得像在煮挂面;再或者——最扎心的——你刚写完一段Python脚本调API,隔壁工位小王敲了三行aws ec2 run-instances就搞定了?

别慌,这不是你的问题,是时候和AWS CLI(Amazon Web Services Command Line Interface)正式握个手了。它不是什么黑科技,就是AWS官方出品的命令行工具,长得像Linux终端里的老朋友,干的却是云上所有脏活累活——而且比点鼠标快十倍,比写SDK代码省八成力气。

第一步:装它,但别急着sudo

官方推荐用pip安装:pip3 install awscli --upgrade --user。注意!加--user——这是血泪教训。我曾因全局安装导致公司环境Python包集体罢工,运维大哥盯着我看了三秒,说:“你删了吧,我给你重装。”后来才知道,AWS CLI本质是Python程序,跟你的项目虚拟环境不打架,但跟系统级pip容易起冲突。装完运行aws --version,如果吐出aws-cli/2.15.3 Python/3.11.8...,恭喜,你已解锁云上键盘侠第一重境界。

第二步:配置身份——不是输密码,是交“临时身份证”

别急着填Access Key!先想清楚:你是个人开发者?还是公司账号?如果是后者,请立刻放下键盘,去找你们的IAM管理员要一个最小权限策略的用户凭证——不是root密钥,不是admin密钥,是“只允许启动两台t3.micro且只能在us-east-1”的那种密钥。安全不是口号,是每次aws configure时你按下回车前的0.5秒停顿。

运行aws configure,它会温柔地问你四件事:
• AWS Access Key ID(别复制错了,末尾常带斜杠,那是你眼花了)
• AWS Secret Access Key(粘贴后终端不会显示,别慌,它记住了)
• Default region name(比如cn-north-1——北京区,别写成cn-beijing,AWS不认识这个昵称)
• Default output format(新手选json,结构清晰;老鸟可能偏爱table,看着像Excel)

配置文件默认存在~/.aws/credentials~/.aws/config。建议用cat ~/.aws/credentials瞄一眼——确认Access Key没多出空格,Secret Key没被自动换行截断。我曾因此卡住两小时,最后发现是Mac自带文本编辑器偷偷把回车转成了 ……对,就这玩意儿,AWS CLI表示:不认。

第三步:真刀真枪——五个高频场景,附赠避坑指南

AWS国际版 ① 启动一台EC2,比泡面还快
aws ec2 run-instances --image-id ami-0c02fb55956476719 --instance-type t2.micro --key-name MyKeyPair --security-group-ids sg-0a1b2c3d4e5f67890 --subnet-id subnet-12345678 --tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=CLI-Lab}]'
注意:AMI ID必须是你所在区域有效的镜像;--key-name得提前在控制台创建好;安全组ID和子网ID不能靠猜,用aws ec2 describe-security-groups查。启动后立刻跟一句:aws ec2 describe-instances --filters "Name=tag:Name,Values=CLI-Lab" --query 'Reservations[*].Instances[*].[InstanceId,State.Name,PublicIpAddress]' --output table——看状态是否running,IP是否分配成功。别信“启动中”,等30秒再查。

② S3传文件:告别浏览器拖拽的玄学失败
aws s3 cp ./report.pdf s3://my-company-bucket/reports/2024/q3/
简单?但注意三点:
• 桶名必须全小写(MyBucket?不行,mybucket才行)
• 路径结尾斜杠不能少,否则PDF会被当成文件名2024/q3存进去
• 大文件加--recursive--sse AES256(服务端加密),不然审计同事半夜打电话问你“数据裸奔谁负责?”

③ Lambda调函数:连函数名都拼错?试试自动补全
先装补全:complete -C '/usr/local/bin/aws_completer' aws(路径按你实际装的位置改)。然后:aws lambda invoke --function-name hello-world --payload '{"name":"CLI"}' response.json。返回码200不代表成功——打开response.json,里面"StatusCode":200是调用成功,但真正的输出藏在LogResult字段里(base64编码),解码用:echo "$(cat response.json | jq -r '.LogResult')" | base64 -d。没错,Lambda日志默认不打印到终端,它选择在暗处默默观察你。

④ 清理资源:别让账单成为惊喜盲盒
查所有运行中EC2:aws ec2 describe-instances --filters "Name=instance-state-name,Values=running" --query 'Reservations[*].Instances[*].[InstanceId,Tags[?Key==`Name`].Value|[0],InstanceType,LaunchTime]' --output table
删掉测试实例:aws ec2 terminate-instances --instance-ids i-1234567890abcdef0
重点来了:S3桶删不掉?因为非空!先清空:aws s3 rm s3://my-test-bucket --recursive。再删桶:aws s3api delete-bucket --bucket my-test-bucket。记住:S3 api命令和s3命令不是一回事,前者更底层,后者更人话——但删桶必须用api。

⑤ 别只会查,要学会“问”
AWS CLI支持--query(JMESPath语法)和--filter。比如查所有未打标签的EBS卷:aws ec2 describe-volumes --filters "Name=status,Values=available" --query 'Volumes[?length(Tags)==`0`].[VolumeId,Size,CreateTime]' --output table。看不懂JMESPath?没关系,先抄,再改,最后自己写。就像学骑车,摔几次,突然就会了。

最后送你三条“CLI生存法则”:
永远加--dry-run(如果命令支持):比如aws ec2 terminate-instances --instance-ids i-xxx --dry-run,它会告诉你“权限够不够”“实例存不存在”,而不是直接删掉生产库。
命令太长?用反斜杠换行:把一行拆成四行,可读性翻倍,也方便注释哪段是region哪段是tag。
忘记参数?aws [service] [command] help比百度快十倍。比如aws s3 cp help,官方文档直接弹出来,连示例都有。

写到这儿,你可能已经打开了终端,手指悬在键盘上方。别怕按错——AWS CLI不会炸服务器,它只会冷静地告诉你:An error occurred (UnauthorizedOperation) when calling the RunInstances operation: You are not authorized to perform this operation.
翻译成人话就是:“兄弟,权限不够,去求IAM管理员吧。”
这不算失败,这是云时代的第一课:控制权在你手上,责任也在你手上。而命令行,不过是把这份重量,变成了一行清晰、可复现、可脚本化的文字。

下次当你在会议里听到“我们得自动化部署”,别只点头。回家打开终端,敲下aws --version,然后对自己说:
“来,这次,我亲手配。”

Telegram售前客服
客服ID
@cloudcup
联系
Telegram售后客服
客服ID
@yanhuacloud
联系