aws configure交互式问答,把 AK SK、默认 region、输出格式写到 ~/.aws/credentials 和 ~/.aws/config。
⚠ 常见坑: 默认写到 [default] profile。多账号公司必须 aws configure --profile <name>,否则会把已有的覆盖掉。
aws configure
aws configure --profile prod
aws configure list
AWS CLI 命令速查,80+ 条覆盖 EC2/S3/IAM/Lambda/RDS/EKS/CloudFormation,带真实例子。
aws configure交互式问答,把 AK SK、默认 region、输出格式写到 ~/.aws/credentials 和 ~/.aws/config。
⚠ 常见坑: 默认写到 [default] profile。多账号公司必须 aws configure --profile <name>,否则会把已有的覆盖掉。
aws configure
aws configure --profile prod
aws configure list
aws configure sso配 IAM Identity Center(SSO)profile —— 浏览器跳出来登录,本地缓存短效 token。
⚠ 常见坑: token 默认 8 小时过期,过期后所有命令都 401,重新 aws sso login --profile <name> 就行,不用再 configure。
aws configure sso
aws sso login --profile prod-admin
aws sso logout
aws sts get-caller-identity打印当前凭证对应的账号 ID、用户/角色 ARN、user ID。AWS 的 whoami。
⚠ 常见坑: 任何写/删操作前先跑一遍。两秒的确认救过无数程序员,免得在错的账号里删错栈。
aws sts get-caller-identity
aws sts get-caller-identity --profile prod
aws sts get-caller-identity --output text --query Arn
aws sts assume-role扮演(assume)一个 IAM 角色,返回该角色的临时凭证(AK SK + session token)。
⚠ 常见坑: 返回凭证默认 1 小时过期。要 export 三个变量,大部分人忘了 AWS_SESSION_TOKEN。更优雅:~/.aws/config 里设 source_profile + role_arn,CLI 自动 assume。
aws sts assume-role --role-arn arn:aws:iam::123456789012:role/Admin --role-session-name lilei
aws sts assume-role-with-web-identity --role-arn ... --web-identity-token $TOKEN --role-session-name ci
aws configure list-profiles列出 ~/.aws/credentials 和 ~/.aws/config 里所有 profile 名字。
aws configure list-profiles
AWS_PROFILE=prod aws sts get-caller-identity
aws --version打印 CLI 版本。v1 和 v2 的 pager、output、二进制 payload 编码默认值都不一样,出问题先看版本。
⚠ 常见坑: v1 已经停止维护。多数运维问题是 v1 跑着 v2 文档。pip install --upgrade awscli 升 v1,或者用 v2 installer 装 v2。
aws --version
which aws
aws ec2 describe-instances列出当前 region 所有 EC2 实例的完整信息:ID、机型、IP、安全组、tag、启动时间。
⚠ 常见坑: 默认 table 输出会按终端宽度截断列。脚本里用 --output text --query 抽具体字段。不加 --filters 会把所有实例都列出来。
aws ec2 describe-instances
aws ec2 describe-instances --filters "Name=instance-state-name,Values=running"
aws ec2 describe-instances --query "Reservations[].Instances[].[InstanceId,State.Name,Tags[?Key=='Name'].Value|[0]]" --output table
aws ec2 start-instances按实例 ID 启动一个或多个已停止的 EC2 实例。
⚠ 常见坑: 每次 stop/start 公网 IP 都会变,除非挂了 Elastic IP。书签和 DNS 记录会失效。
aws ec2 start-instances --instance-ids i-0abc1234def567890
aws ec2 start-instances --instance-ids i-aaa i-bbb i-ccc
aws ec2 stop-instances停止运行中的 EC2。EBS 卷和 Elastic IP 都还在,只是不再付计算钱。
⚠ 常见坑: 停了仍然要为 EBS 付费。彻底停账单要 terminate,但 terminate 默认会一起删卷。
aws ec2 stop-instances --instance-ids i-0abc1234def567890
aws ec2 stop-instances --instance-ids i-aaa --hibernate
aws ec2 terminate-instances永久销毁 EC2 实例。实例 ID 不可恢复,根卷默认一起删。
⚠ 常见坑: 不可逆。生产机一定加终止保护(modify-instance-attribute --disable-api-termination),免得手抖删掉。
aws ec2 terminate-instances --instance-ids i-0abc1234def567890
aws ec2 modify-instance-attribute --instance-id i-aaa --disable-api-termination
aws ec2 run-instances从 AMI 启动一个新 EC2 实例。要指定镜像、机型、key pair、子网、安全组。
⚠ 常见坑: 忘传 --security-group-ids 会用默认 SG,通常全部入站拒绝。忘传 --key-name 没 SSH key,登不上。
aws ec2 run-instances --image-id ami-0abcdef --instance-type t3.micro --key-name lilei --security-group-ids sg-aaa --subnet-id subnet-bbb
aws ec2 run-instances --image-id ami-0abcdef --instance-type t3.micro --count 3 --tag-specifications "ResourceType=instance,Tags=[{Key=Env,Value=dev}]"aws ec2 describe-security-groups列出所有安全组及其入站/出站规则。
aws ec2 describe-security-groups
aws ec2 describe-security-groups --group-ids sg-0abc1234
aws ec2 describe-security-groups --filters "Name=group-name,Values=web"
aws ec2 authorize-security-group-ingress给安全组加一条入站规则 —— 对 CIDR 或另一个 SG 开端口。
⚠ 常见坑: 把 22/3389 开 0.0.0.0/0 几小时内安全扫描就会告警。要么收口到办公室 CIDR,要么用 SSM Session Manager 彻底不开 SSH。
aws ec2 authorize-security-group-ingress --group-id sg-aaa --protocol tcp --port 443 --cidr 0.0.0.0/0
aws ec2 authorize-security-group-ingress --group-id sg-aaa --protocol tcp --port 22 --cidr 203.0.113.42/32
aws ec2 authorize-security-group-ingress --group-id sg-aaa --source-group sg-bbb --protocol tcp --port 5432
aws ec2 revoke-security-group-ingress从安全组里删一条入站规则。
aws ec2 revoke-security-group-ingress --group-id sg-aaa --protocol tcp --port 22 --cidr 0.0.0.0/0
aws ec2 describe-key-pairs列出当前 region 的所有 EC2 key pair(只有名字和指纹,没有私钥)。
aws ec2 describe-key-pairs
aws ec2 create-key-pair --key-name lilei-dev --query KeyMaterial --output text > lilei-dev.pem
aws ec2 describe-images按 owner、名字、架构找 AMI。"找 AMI ID" 的常用命令。
⚠ 常见坑: 不加 --owners 会扫整个 AMI marketplace,巨慢。加 --owners amazon 或 --owners 099720109477(Canonical)缩范围。
aws ec2 describe-images --owners amazon --filters "Name=name,Values=al2023-ami-*" --query "Images|sort_by(@,&CreationDate)[-1].ImageId" --output text
aws ec2 describe-images --owners 099720109477 --filters "Name=name,Values=ubuntu/images/hvm-ssd/ubuntu-jammy-22.04-amd64-server-*"
aws ec2 allocate-address申请一个新的 Elastic IP。配合 associate-address 挂到实例或 ENI 上。
⚠ 常见坑: 没挂出去的 EIP 每小时 $0.005。不用的及时 release-address,不然账单慢慢涨。
aws ec2 allocate-address
aws ec2 associate-address --instance-id i-aaa --allocation-id eipalloc-bbb
aws s3 ls列 S3 桶,或某个桶/前缀下的对象。S3 版的 ls。
⚠ 常见坑: 默认翻页只显示前 1000 个 key,翻页静默不提示。要看子前缀加 --recursive,翻页用 --page-size / --max-items 控制。
aws s3 ls
aws s3 ls s3://my-bucket/
aws s3 ls s3://my-bucket/logs/ --recursive --human-readable --summarize
aws s3 cp从/到/在 S3 之间复制文件。最基础的上传下载命令。
⚠ 常见坑: 默认单文件。整目录加 --recursive,或者直接用 aws s3 sync,后者是增量再传更快。
aws s3 cp ./build.tar.gz s3://my-bucket/releases/build.tar.gz
aws s3 cp s3://my-bucket/logs/access.log ./
aws s3 cp ./dist s3://my-bucket/site/ --recursive --acl public-read
aws s3 syncrsync 风格同步:只传体积或修改时间不同的文件。加 --delete 把目标里多余文件也删掉。
⚠ 常见坑: 源忘了写子目录(aws s3 sync . s3://b/ --delete)第一次跑会把整个桶清光。第一次跑加 --dryrun 看一遍。
aws s3 sync ./dist s3://my-bucket/ --delete
aws s3 sync s3://prod-bucket/ s3://backup-bucket/
aws s3 sync ./photos s3://my-bucket/photos --exclude "*.tmp" --include "*.jpg"
aws s3 mv移动对象 —— 等价于 cp 之后再 rm 源对象。
⚠ 常见坑: 传一半网络断了源已经没了目标却空。重要数据先 cp 再校验再 rm,别一步到位。
aws s3 mv s3://my-bucket/tmp/file s3://my-bucket/archive/file
aws s3 mv ./local.csv s3://my-bucket/incoming/
aws s3 rm删除 S3 对象(整前缀加 --recursive)。
⚠ 常见坑: 开了版本的桶,rm 只是加一个删除标记,数据还在还要付存储费。要真删用 aws s3api delete-object 加 --version-id。
aws s3 rm s3://my-bucket/old.log
aws s3 rm s3://my-bucket/logs/ --recursive --exclude "*" --include "2024-*"
aws s3 mb建桶 —— 创建新 S3 桶。名字全 AWS 唯一。
⚠ 常见坑: 桶名是全球唯一的。挑 `lilei-2026-logs` 这种带前缀的,别用 `logs` 早被占了。非 us-east-1 必须传 --region。
aws s3 mb s3://lilei-2026-logs
aws s3 mb s3://lilei-2026-logs --region ap-northeast-1
aws s3 rb删桶。默认只能删空桶,加 --force 会先清光内容再删。
⚠ 常见坑: --force 处理不了开了版本的桶。要先 aws s3api delete-objects 把所有版本删掉,再 rb。容易卡在这一步。
aws s3 rb s3://my-bucket
aws s3 rb s3://my-bucket --force
aws s3 presign生成一个限时 HTTPS 链接,任何人都能下载私有对象 —— 不用给对方 AWS 账号。
⚠ 常见坑: 默认 1 小时过期,最长 7 天。拿到 URL 就能下,所以 URL 本身就是密文,别外漏。
aws s3 presign s3://my-bucket/report.pdf
aws s3 presign s3://my-bucket/report.pdf --expires-in 86400
aws s3 website把桶配成静态网站托管(指定 index 和 error 文档)。
⚠ 常见坑: website endpoint 只支持 HTTP 而且是 path-style URL。要 HTTPS + 自定义域名必须前面挂 CloudFront,或者走新的 S3 + OAC 模式。
aws s3 website s3://my-bucket/ --index-document index.html --error-document error.html
aws s3api list-objects-v2S3 底层 API —— 带分页 token、前缀、分隔符地列对象。aws s3 ls 满足不了时的兜底。
aws s3api list-objects-v2 --bucket my-bucket --prefix logs/ --max-keys 50
aws s3api list-object-versions --bucket my-bucket --prefix old.log
aws s3api put-public-access-block给桶设 Block Public Access。防止误开全网读权限的双保险。
⚠ 常见坑: 账号级设置覆盖桶级。两个都要设:s3control put-public-access-block --account-id <id> 和按桶设的这个。
aws s3api put-public-access-block --bucket my-bucket --public-access-block-configuration "BlockPublicAcls=true,IgnorePublicAcls=true,BlockPublicPolicy=true,RestrictPublicBuckets=true"
aws s3api put-bucket-policy给桶绑定 JSON 桶策略,控制谁能读写。
⚠ 常见坑: Principal:"*" 加 s3:GetObject 等于桶对全网开放。一定配合 Block Public Access 开关,不然每次安全审查都会被点名。
aws s3api put-bucket-policy --bucket my-bucket --policy file://policy.json
aws iam list-users列出账号下所有 IAM 用户。
aws iam list-users
aws iam list-users --query "Users[].UserName" --output text
aws iam create-user建一个新 IAM 用户。默认没登录和编程访问权限,要单独加。
⚠ 常见坑: 现代做法是完全不建 IAM 用户,改用 Identity Center(SSO)联邦登录。长效 AK SK 的 IAM 用户是泄漏事故重灾区。
aws iam create-user --user-name lilei
aws iam create-login-profile --user-name lilei --password Temp-2026! --password-reset-required
aws iam attach-user-policy给 IAM 用户挂一个托管策略(AWS 自带的或自建的)。
⚠ 常见坑: 直接挂 AdministratorAccess 最省事但最危险。用具体的(PowerUserAccess、ReadOnlyAccess)按最小权限原则。
aws iam attach-user-policy --user-name lilei --policy-arn arn:aws:iam::aws:policy/ReadOnlyAccess
aws iam list-attached-user-policies --user-name lilei
aws iam create-access-key给 IAM 用户生成新 AK SK。secret 只会返回一次,当下不存以后再也拿不到。
⚠ 常见坑: AK SK 永远不要 commit 到 git,哪怕是私库。每 90 天轮换一次,旧的立刻删。一旦泄漏第一时间 aws iam delete-access-key,再追查影响。
aws iam create-access-key --user-name lilei
aws iam delete-access-key --user-name lilei --access-key-id AKIA...
aws iam list-roles列出账号下所有 IAM 角色。
aws iam list-roles --query "Roles[].RoleName" --output text
aws iam list-roles --path-prefix /aws-service-role/
aws iam create-role建 IAM 角色,要附 trust policy(谁能 assume 这个角色)。
⚠ 常见坑: trust policy 必填,而且是 AccessDenied 最常见根因 —— principal ARN 错了、condition 漏了。JSON 一定要对。
aws iam create-role --role-name MyAppRole --assume-role-policy-document file://trust.json
aws iam attach-role-policy --role-name MyAppRole --policy-arn arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess
aws iam simulate-principal-policy模拟某个 user/role 能否对某资源执行某操作 —— 不真跑。IAM 调试神器。
aws iam simulate-principal-policy --policy-source-arn arn:aws:iam::123456789012:user/lilei --action-names s3:GetObject --resource-arns arn:aws:s3:::my-bucket/key
aws iam get-account-summary账号高层级汇总 —— 用户数、角色数、MFA 设备数、密码策略状态。
aws iam get-account-summary
aws lambda list-functions列当前 region 所有 Lambda 函数,含 runtime、内存、最后修改时间。
aws lambda list-functions
aws lambda list-functions --query "Functions[?Runtime=='nodejs20.x'].FunctionName" --output text
aws lambda invoke同步调用 Lambda,传 JSON payload,把响应写到本地文件。
⚠ 常见坑: CLI v2 必须加 --cli-binary-format raw-in-base64-out,否则 --payload 会被静默 base64 编码,函数拿到一堆乱码。
aws lambda invoke --function-name my-fn --payload '{"key":"value"}' --cli-binary-format raw-in-base64-out response.jsonaws lambda invoke --function-name my-fn --invocation-type Event --payload '{}' /dev/nullaws lambda update-function-code把新代码推到已有 Lambda —— 本地 zip、S3 对象、或容器镜像 URI 都行。
⚠ 常见坑: 新代码几秒内生效。安全发布要 publish-version + alias 流量切换,或走 CodeDeploy。
aws lambda update-function-code --function-name my-fn --zip-file fileb://function.zip
aws lambda update-function-code --function-name my-fn --s3-bucket my-deploys --s3-key fn-v2.zip
aws lambda update-function-code --function-name my-fn --image-uri 123.dkr.ecr.us-east-1.amazonaws.com/my-fn:v2
aws lambda get-function-configuration打印函数配置:handler、runtime、内存、timeout、环境变量、layer、VPC 配置。
aws lambda get-function-configuration --function-name my-fn
aws lambda get-function-configuration --function-name my-fn --query "Environment.Variables"
aws lambda update-function-configuration原地改 Lambda 配置 —— 内存、timeout、环境变量、handler、layer 都行。
⚠ 常见坑: --environment "Variables={...}" 是替换全部环境变量,不是合并。一定先 get-function-configuration 拿到现有的再追加。
aws lambda update-function-configuration --function-name my-fn --memory-size 1024 --timeout 30
aws lambda update-function-configuration --function-name my-fn --environment "Variables={STAGE=prod,LOG_LEVEL=info}"aws lambda publish-version把当前 $LATEST 快照成一个不可变的编号版本。配合 alias 做蓝绿发布。
aws lambda publish-version --function-name my-fn --description "v1.2.3"
aws lambda create-alias建一个指向特定版本的命名 alias,可选流量权重做金丝雀发布。
aws lambda create-alias --function-name my-fn --name prod --function-version 7
aws lambda update-alias --function-name my-fn --name prod --function-version 8 --routing-config "AdditionalVersionWeights={\"7\"=0.9}"aws cloudwatch get-metric-statistics按 namespace/指标/维度,在时间窗口内拉原始数据点,指定聚合方式。
⚠ 常见坑: --start-time 和 --end-time 必须 UTC ISO-8601。传 Unix 时间戳会报错。Period 必须是 60 的倍数。
aws cloudwatch get-metric-statistics --namespace AWS/EC2 --metric-name CPUUtilization --dimensions Name=InstanceId,Value=i-aaa --start-time 2026-05-26T00:00:00Z --end-time 2026-05-26T01:00:00Z --period 300 --statistics Average
aws cloudwatch put-metric-alarm建/改一个指标告警 —— 阈值、连续周期数、告警动作(通常一个 SNS topic ARN)。
⚠ 常见坑: --alarm-actions 要的是 ARN,不是 topic 名字。没设动作告警只是悄悄变状态,没人会被叫起来。
aws cloudwatch put-metric-alarm --alarm-name high-cpu --metric-name CPUUtilization --namespace AWS/EC2 --statistic Average --period 300 --threshold 80 --comparison-operator GreaterThanThreshold --evaluation-periods 2 --alarm-actions arn:aws:sns:us-east-1:123:alerts --dimensions Name=InstanceId,Value=i-aaa
aws cloudwatch describe-alarms列指标告警 —— 按状态过滤能看出当下哪些在 ALARM。
aws cloudwatch describe-alarms
aws cloudwatch describe-alarms --state-value ALARM
aws cloudwatch describe-alarms --alarm-name-prefix high-
aws logs tail像 tail -f 一样跟 CloudWatch Logs group,可选正则过滤,--follow 持续流。
⚠ 常见坑: 同时只能跟 ~10 个 log stream。太活跃的 group 加 --log-stream-name-prefix 或者改用 Logs Insights。
aws logs tail /aws/lambda/my-fn --follow
aws logs tail /aws/lambda/my-fn --since 10m --filter-pattern ERROR
aws logs tail /aws/lambda/my-fn --format short --since 1h
aws logs filter-log-events在时间范围内用 CloudWatch Logs filter pattern 搜 log group。
aws logs filter-log-events --log-group-name /aws/lambda/my-fn --filter-pattern "ERROR" --start-time $(date -u -d "1 hour ago" +%s)000
aws logs describe-log-groups列出 region 里所有 CloudWatch log group。
aws logs describe-log-groups --log-group-name-prefix /aws/lambda/
aws rds describe-db-instances列出 RDS DB 实例,含引擎、版本、endpoint、状态、存储。
aws rds describe-db-instances
aws rds describe-db-instances --query "DBInstances[].[DBInstanceIdentifier,Engine,DBInstanceStatus,Endpoint.Address]" --output table
aws rds create-db-snapshot给 RDS 实例做手动快照。手动快照不删就一直在。
⚠ 常见坑: 快照默认不跨账号,要先 share-db-snapshot 共享。存储费一直收,过期的快照记得删。
aws rds create-db-snapshot --db-instance-identifier mydb --db-snapshot-identifier mydb-2026-05-26
aws rds restore-db-instance-from-db-snapshot从快照恢复出一个新 RDS 实例。原实例不受影响。
⚠ 常见坑: 恢复出的新实例 endpoint 是新的。应用要改连接串 —— 没有原地恢复这种操作。
aws rds restore-db-instance-from-db-snapshot --db-instance-identifier mydb-restored --db-snapshot-identifier mydb-2026-05-26
aws rds modify-db-instance改 RDS 实例 —— 机型、存储、主密码、参数组、备份保留天数。
⚠ 常见坑: 不加 --apply-immediately 改动要等维护窗口才生效。"我改了密码怎么没效"通常就这个坑。
aws rds modify-db-instance --db-instance-identifier mydb --db-instance-class db.t3.medium --apply-immediately
aws rds describe-db-snapshots列 RDS 快照 —— 手动和自动的都列。
aws rds describe-db-snapshots --db-instance-identifier mydb --snapshot-type manual
aws rds reboot-db-instance重启 RDS 实例。加 --force-failover 会触发 Multi-AZ 主备切换。
aws rds reboot-db-instance --db-instance-identifier mydb
aws rds reboot-db-instance --db-instance-identifier mydb --force-failover
aws eks update-kubeconfig为 EKS 集群生成(或更新)一条 kubeconfig,kubectl 就能连了。
⚠ 常见坑: 用当前 AWS profile 签 token。后面换了 profile kubectl 就连不上,重跑加 --profile <name>。
aws eks update-kubeconfig --name my-cluster --region us-east-1
aws eks update-kubeconfig --name my-cluster --profile prod --alias prod-cluster
aws eks describe-cluster打印 EKS 集群完整信息:endpoint、版本、IAM role、VPC 配置、addon。
aws eks describe-cluster --name my-cluster
aws eks describe-cluster --name my-cluster --query "cluster.version" --output text
aws eks list-clusters列当前 region 的 EKS 集群。
aws eks list-clusters
aws eks list-clusters --query "clusters[]" --output text
aws eks list-nodegroups列出 EKS 集群的所有托管 nodegroup。
aws eks list-nodegroups --cluster-name my-cluster
aws eks describe-nodegroup查托管 nodegroup 完整配置:机型、扩缩容、AMI 版本、taint。
aws eks describe-nodegroup --cluster-name my-cluster --nodegroup-name workers
aws eks update-addon升 EKS addon 版本(VPC CNI、CoreDNS、kube-proxy、EBS CSI)。--resolve-conflicts 控制字段所有权冲突怎么处理。
⚠ 常见坑: 不加 --resolve-conflicts OVERWRITE(或 PRESERVE)如果之前 kubectl 手改过这个 addon,升级会中止。要明确选一个。
aws eks update-addon --cluster-name my-cluster --addon-name vpc-cni --addon-version v1.18.0-eksbuild.1 --resolve-conflicts OVERWRITE
aws eks list-addons列出 EKS 集群上安装的 addon(VPC CNI、CoreDNS、kube-proxy、EBS CSI 等)。
aws eks list-addons --cluster-name my-cluster
aws cloudformation deploy高层 deploy —— 栈不存在就创建,存在就更新。changeset 自动算。
⚠ 常见坑: 不加 --capabilities CAPABILITY_NAMED_IAM,模板里有 IAM 资源就报 "Requires capabilities"。大部分栈都要加。
aws cloudformation deploy --template-file template.yaml --stack-name my-stack --capabilities CAPABILITY_NAMED_IAM
aws cloudformation deploy --template-file template.yaml --stack-name my-stack --parameter-overrides Env=prod Region=us-east-1
aws cloudformation describe-stacks列/查 CloudFormation 栈 —— 状态、参数、output、漂移状态。
aws cloudformation describe-stacks
aws cloudformation describe-stacks --stack-name my-stack --query "Stacks[0].Outputs"
aws cloudformation describe-stack-events查栈的事件流。"我的 deploy 为啥失败"必看。
⚠ 常见坑: 事件是倒序的。最早的那个失败才是根因,被压在最底下,要拉到底或者 pipe 给 tac。
aws cloudformation describe-stack-events --stack-name my-stack --max-items 50
aws cloudformation delete-stack删 CloudFormation 栈,连同它建的所有资源。
⚠ 常见坑: 有对象的桶、保留=Never 的 log group、没 skip-snapshot 的 RDS 都会卡删除。看 describe-stack-events 找哪个资源卡住了。
aws cloudformation delete-stack --stack-name my-stack
aws cloudformation wait stack-delete-complete --stack-name my-stack
aws cloudformation package把模板里引用的本地产物上传 S3,产出一份可以 deploy 的模板。
aws cloudformation package --template-file template.yaml --s3-bucket my-deploys --output-template-file packaged.yaml
aws cloudformation validate-template部署前先 lint 一下 CloudFormation 模板,看语法和必填参数有没有问题。
aws cloudformation validate-template --template-body file://template.yaml
aws route53 list-hosted-zones列账号下所有 Route 53 hosted zone。
aws route53 list-hosted-zones
aws route53 list-hosted-zones --query "HostedZones[].[Name,Id]" --output text
aws route53 list-resource-record-sets列 hosted zone 里的所有 DNS 记录(A、AAAA、CNAME、MX、TXT、ALIAS)。
aws route53 list-resource-record-sets --hosted-zone-id Z1234567890ABC
aws route53 list-resource-record-sets --hosted-zone-id Z1234567890ABC --query "ResourceRecordSets[?Type=='A']"
aws route53 change-resource-record-sets通过 JSON change batch 创建/修改/删除 DNS 记录。脚本化改 DNS 唯一方法。
⚠ 常见坑: DELETE 必须和现有记录完全一致 —— 值、TTL 都对得上。错一个字符就 InvalidChangeBatch。先 list-resource-record-sets 拿现有的 JSON 复制出来改。
aws route53 change-resource-record-sets --hosted-zone-id Z1234567890ABC --change-batch file://change.json
aws route53 get-change查 Route 53 改动是否传播完成(PENDING vs INSYNC)。
aws route53 get-change --id /change/C1234567890ABC
aws route53 create-hosted-zone为某个域名建一个新的 Route 53 hosted zone。
⚠ 常见坑: 建完后要在域名注册商那里把 NS 记录改成返回的四个,否则 zone 建了但解析不出去。
aws route53 create-hosted-zone --name example.com --caller-reference $(date +%s)
--profile vs default profile不传 --profile <name>(或 AWS_PROFILE 环境变量)就走 [default] profile。多账号公司这几乎一定是错的。shell 里 export AWS_PROFILE,或按项目起 alias。
⚠ 常见坑: --profile=prod(带 =)在不同 CLI 版本里行为不一致。统一写 --profile prod(用空格)最稳。
export AWS_PROFILE=prod
aws s3 ls --profile dev
alias awsp="aws --profile prod"
--region default empty--region、AWS_REGION、AWS_DEFAULT_REGION、profile 里都没设 region,会报 "You must specify a region" 或更迷惑的 "Could not connect"。
⚠ 常见坑: 不同服务在不同 region。在 ~/.aws/config 每个 profile 设默认 region 最好维护。
aws configure set region us-east-1 --profile prod
export AWS_REGION=ap-northeast-1
aws s3 ls --region eu-west-1
pagination truncates outputAWS API 全部翻页。CLI 默认自动翻,但如果 AWS_PAGER=""或 --no-paginate 就只看到第一页。aws s3 ls 默认 1000 个 key 一页。
aws ec2 describe-instances --max-items 10 --starting-token <token>
aws s3 ls s3://bucket/ --recursive | wc -l
--output table vs json vs textjson 给 jq 用。text 是 tab 分隔,shell 循环最方便(for i in $(aws ... --output text))。table 是给人看的,会按终端宽度截断。在 ~/.aws/config 设默认。
aws ec2 describe-instances --output text --query "Reservations[].Instances[].InstanceId"
aws s3api list-buckets --output json | jq -r ".Buckets[].Name"
aws configure set output json --profile prod
--query is JMESPath not jq--query 用 JMESPath,跟 jq 有微妙差别:.[0] 写 [0],表达式里没 pipe,字符串字面量用单引号。形状变化复杂时还是 --output json | jq 更顺手。
aws ec2 describe-instances --query "Reservations[*].Instances[*].[InstanceId,State.Name]" --output table
aws s3api list-buckets --query "Buckets[?starts_with(Name, 'logs-')].Name" --output text
--dry-run is EC2-only很多人以为所有 AWS 服务都支持 --dry-run。其实只有 EC2 的大部分写操作支持,成功会返回 DryRunOperation。其他服务用 iam simulate-principal-policy 或 cloudformation deploy --no-execute-changeset 模拟。
aws ec2 terminate-instances --instance-ids i-aaa --dry-run
aws cloudformation deploy --template-file t.yaml --stack-name s --no-execute-changeset
S3 eventual consistency从 2020 起 S3 写后读全球强一致。老的"PUT 之后 LIST 看不到"那个坑已经没了。但跨 region 复制、CloudFront 缓存、版本控制仍然是最终一致的。
aws s3 cp file s3://b/key && aws s3 ls s3://b/key
aws s3api put-object --bucket b --key k --body file
AKID leaked to gitAK SK 一旦进 git 历史,GitHub 上的扫描机器人几分钟内就用它在所有 region 起比特币挖矿。立刻 iam delete-access-key,查近 24h 的 CloudTrail,把这个账号所有 secret 都轮换一遍。
⚠ 常见坑: 重写 git 历史救不了 —— key 早被抓走缓存了。先删 key 才是关键,历史清理只是面子。
aws iam delete-access-key --user-name lilei --access-key-id AKIA...
aws cloudtrail lookup-events --lookup-attributes AttributeKey=AccessKeyId,AttributeValue=AKIA...
可搜索的 AWS CLI 速查,覆盖云工程师、SRE、运维真正在 AWS 账号上 敲的 80+ 条命令,不是官网首页那种凑数列表。十一个服务分类:配置 (aws configure / sso login / sts get-caller-identity / sts assume-role)、EC2(describe-instances、run-instances、start / stop / terminate、describe-security-groups、 authorize-security-group-ingress、key-pair 管理)、S3(ls、cp、 sync、mv、rm、mb、rb、presign、website,以及底层 s3api 兜底)、 IAM(list-users、create-user、attach-policy、list-roles、 create-role、simulate-principal-policy)、Lambda(list-functions、 invoke、update-function-code、get-function-configuration、 publish-version、create-alias)、CloudWatch(get-metric-statistics、 put-metric-alarm、describe-alarms、logs tail、logs filter-log-events)、 RDS(describe-db-instances、create-db-snapshot、 restore-db-instance-from-db-snapshot、modify-db-instance)、EKS (update-kubeconfig、describe-cluster、list-nodegroups、 describe-nodegroup)、CloudFormation(deploy、describe-stacks、 describe-stack-events、delete-stack、package)、Route53 (list-hosted-zones、change-resource-record-sets、list-resource- record-sets)、还有专门一类"常见坑",讲清楚 8 个真正浪费下午 的问题(--profile 默认 default 多账号必坑、--region 默认空、 pagination 默认截到 1000、--output json/table/text 各自给谁用、 --query 是 JMESPath 不是 jq、--dry-run 只有 EC2 支持、S3 最终 一致性、AK SK 一旦上 git 就要立刻 rotate)。每条都有完整语法、 中英说明、对应的"坑",以及 1-3 条带真 ARN/桶名/实例 ID 的可 直接复制的例子。搜索框跨命令 / 说明 / 坑 / 例子四个字段一起过 滤,输 "AKID" 能命中凭证泄漏那条。服务胶囊缩范围,每条命令一键 复制。完全在浏览器里跑,不连任何 AWS 账号,不上传凭证。配合 kubectl / Docker / nginx / curl 速查一起用,运维工具盒就齐了。
把内容粘贴或拖入工具面板。
点击按钮,在浏览器内本地处理,文件不上传。
一键复制结果或下载到本地。
适合穿插在写代码、查问题、做 Review、上线前的小任务里。
这些入口会把当前任务接到更完整的工具链里。
做你这行的人, 还会一起用这些。