AWS CLI 速查:配置/S3/EC2/IAM/Lambda 常用命令与多账号切换
一份面向运维和云工程师的 AWS 命令速查,按服务整理配置、S3、EC2、IAM、Lambda 高频命令,讲清 profile 多账号切换、常用参数和真实例子。
AWS CLI 速查:配置、S3、EC2、IAM、Lambda 常用命令一次理清
aws help 平铺一万四千个子命令,真到线上排查问题时,你要的从来不是全集,而是那 80 条天天敲的命令,加上每条命令背后那个会浪费你一个下午的坑。这篇按服务把高频命令理一遍,顺手把多账号切换和几个最常踩的参数说清楚。想边看边搜,可以直接打开 AWS CLI 命令速查,搜索框跨命令、说明、坑、例子四个字段一起过滤。
先把配置和凭证理顺
装好 CLI 第一件事是确认凭证。默认凭证链顺序是:环境变量(AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY),然后 ~/.aws/credentials,然后 EC2/ECS 的 instance profile,最后 SSO 缓存。四个全空就报 Unable to locate credentials。
aws configure # 写入 ~/.aws/credentials
aws configure sso # IAM Identity Center 走导向
aws sso login --profile prod # 刷新 SSO token
aws sts get-caller-identity # 确认当前是哪个账号
跑任何写操作之前,先 aws sts get-caller-identity 看一眼返回的 Account 和 Arn,30 秒能挡住一次打错账号的删库。
S3:cp 和 sync 别用混
cp 复制单个文件,加 --recursive 复制前缀;sync 是 rsync 风格的 diff,只传体积或修改时间变了的文件,加 --delete 还能删掉远端多余文件。
aws s3 cp report.pdf s3://acme-www/docs/ # 上传单文件
aws s3 sync ./out s3://acme-www --delete # 发布静态站
aws s3 presign s3://acme-www/private/x.zip # 生成临时下载链接
这里有个最经典的坑:aws s3 sync ./out s3://acme-www --delete 是网站发布对的写法,但 aws s3 sync . s3://acme-www --delete(忘了写子目录)会在第一次同步时把整个桶清空。源永远钉到具体子目录,第一次跑加 --dryrun 看一遍再确认。
EC2、IAM、Lambda 各取所需
EC2 查实例最常用 describe-instances 配 --filters,删除前记得 EC2 是少数支持 --dry-run 的服务:
aws ec2 describe-instances --filters "Name=tag:env,Values=prod"
aws ec2 terminate-instances --instance-ids i-0abc --profile prod
IAM 查权限和角色:
aws iam list-roles
aws iam attach-role-policy --role-name app --policy-arn arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess
Lambda 排查偶发报错时,实时 tail 日志加上固定事件触发,比点 UI 碰运气快得多:
aws logs tail /aws/lambda/checkout-fn --follow --since 5m
aws lambda invoke --function-name checkout-fn --payload file://event.json out.json
多账号怎么干净地切
公司只要超过一个账号,--profile 就是必须钉死的参数,否则命令静默打到 default profile,可能在错的账号里建了一个安全组或删了一台机器。两种切法:每条命令加 --profile <name>,或者 shell 里 export AWS_PROFILE=<name> 让整个会话生效。
跨账号 role 用 aws sts assume-role --role-arn ... --role-session-name ...,把返回的三个凭证 export 出来;更省事的是在 ~/.aws/config 里设 source_profile 加 role_arn,让 CLI 自动 assume,你只管照常 --profile <name>。
我自己维护过一个九账号的组织,血的教训是:终端提示符根本看不出当前是哪个 profile。后来给所有写操作脚本统一加了一条前置 aws sts get-caller-identity --profile $TARGET 并断言 Account 字段,从那之后再没出过打错账号的事故。这条习惯比任何告警都管用。
几个最容易混的参数
--output:table给人看但会按终端宽度截断列,json给 jq,text给 shell 循环(tab 分隔,稳定),别拿 cut/awk 去切 JSON。--query:它是 JMESPath 不是 jq,所以.Reservations[0]要写成Reservations[0]。先在读命令上试通再写进脚本。- 翻页:
aws s3 ls和各种describe-*默认翻页,CLI 会自动续页,但你一旦手动--no-paginate或设了AWS_PAGER="",就只看到第一页。
把这几条记牢,大半莫名其妙的"输出怎么少了""为什么报错"都能当场判断出来。AWS CLI 是云上运维的入口,把它和容器侧的工具配一起用,工具盒才算齐。容器编排可以看 kubectl 命令速查,两份搭着用,从云资源到集群内部都能一口气查到底。
Made by Toolora · Updated 2026-06-13