aws cli

AWS CLI v2

AWS 命令行界面(AWS CLI)命令快速参考:配置凭据、IAM 身份、EC2 / Lambda / S3 / DynamoDB / IAM、profiles、SSO,以及分页 / 输出格式化,并附带常用参数和实操示例。

40 条命令

帮助

aws --version

打印 awscli 版本(v2.x)。

aws --version
aws help

顶层帮助——列出服务分组与基本用法。

aws help
aws <service> help

展示某个服务的所有命令。

<service> help;aws <service> <command> help

aws s3 help
aws <service> <command> help

展示某个 API 调用的全部参数与选项。

aws ec2 run-instances help
aws <service> <command> --generate-cli-skeleton

打印一个包含所有必填 / 可选字段的 JSON 骨架——可直接粘贴回去作为输入。

--generate-cli-skeleton <input|output>;--cli-input-json <file>;--cli-input-yaml <file>

aws ec2 run-instances --generate-cli-skeleton > ec2.json

配置

aws configure

交互式向导——在 `~/.aws/credentials` 和 `~/.aws/config` 中设置 access key、secret、output 格式与 region。

aws configure
aws configure --profile <name>

与 `aws configure` 相同,但写入一个具名 profile。

--profile dev;--profile prod;--no-prompt

aws configure --profile prod
aws configure get <key>

读取活动配置中的一项值。

default.region;default.output;<key>;--profile <name>

aws configure get region --profile prod
aws configure set <key> <value>

设置单个配置值。

<key> <value>;--profile <name>

aws configure set region us-west-2
aws configure list

显示当前生效的配置(profile、region、access-key id、secret 已遮蔽)。

aws configure list

SSO / 身份

aws sso login --profile <name>

启动 SSO 设备流登录(或浏览器跳转)。为该 profile 设置短期凭据。

--profile dev;--no-browser;--use-device-code

aws sso login --profile dev
aws sso configure

交互式配置一个 SSO profile(start URL、region、account、role)。

aws sso configure
aws sts get-caller-identity

打印当前凭据对应的 IAM principal(account / arn / user-id)——配置完成后的健全性检查。

--profile <name>;--no-verify-ssl;--endpoint-url <url>

aws sts get-caller-identity
aws sts assume-role --role-arn <arn> --role-session-name <name>

切换到一个 IAM role,获取临时凭据——适合跨账号访问。

--role-arn;--role-session-name;--external-id;--mfa-serial <arn>;--serial-number <arn>;--token-code <mfa>

aws sts assume-role --role-arn arn:aws:iam::123456789012:role/Admin --role-session-name admin

输出

aws <service> <command> --output <format>

选择输出格式:`json`(默认)、`text`、`table`。搭配 `--query` 可作 jq-like 投影。

json;text;table;yaml;yaml-stream

aws ec2 describe-instances --output table
aws <service> <command> --query '<JMES>'

用 JMESPath 表达式投影响应(类似 jq)。

--query 'Reservations[].Instances[].InstanceId';--query 'Reservations[].Instances[].[InstanceId,State.Name]'

aws ec2 describe-instances --query 'Reservations[].Instances[].[InstanceId,State.Name]' --output table
aws <service> <command> --no-paginate

禁用自动分页——只返回第一页(更快;只需要计数时很有用)。

aws s3 ls --no-paginate
aws <service> <command> --cli-binary-format raw-in-base64-out

把输入参数作为 base64 读取——像 `--zip-file fileb://lambda.zip` 这类二进制参数所需。

raw-in-base64-out;base64

aws lambda update-function-code --function-name fn --zip-file fileb://out.zip --cli-binary-format raw-in-base64-out

EC2

aws ec2 describe-instances

列出全部 EC2 实例及其完整详情。

--instance-ids i-xxx;--filters Name=tag:Name,Values=prod;--query;--output

aws ec2 describe-instances --query 'Reservations[].Instances[].{ID:InstanceId,State:State.Name}' --output table
aws ec2 start-instances --instance-ids <id>

启动一个或多个已停止的实例。

--instance-ids i-xxx i-yyy

aws ec2 start-instances --instance-ids i-0abc123
aws ec2 stop-instances --instance-ids <id>

停止一个或多个正在运行的实例(不会终止)。

aws ec2 stop-instances --instance-ids i-0abc123
aws ec2 create-key-pair --key-name <name> --query 'KeyMaterial' --output text > key.pem

创建新的 SSH 密钥对,并把私钥保存为带正确权限的 `.pem` 文件。

aws ec2 create-key-pair --key-name dev --query 'KeyMaterial' --output text > dev.pem && chmod 400 dev.pem

S3

aws s3 ls

列出桶(无参数时)或某前缀下的文件。

s3://<bucket>/<prefix>;--recursive;--human-readable;--summarize

aws s3 ls s3://my-bucket/data/
aws s3 cp <local> s3://<bucket>/<key>

上传或复制文件。`s3://...` 可作源或目标。

--recursive;--exclude '*';--include '*.log';--storage-class STANDARD|GLACIER|...;--acl public-read

aws s3 cp ./build/ s3://my-bucket/release/ --recursive
aws s3 sync <src> s3://<bucket>/<dst>

S3 目录双向同步(上传新增 / 变更的文件,除非传 `--delete`,否则不会删除目标端多余文件)。

--delete;--exclude;--include;--no-progress;--exact-timestamps

aws s3 sync ./dist s3://my-bucket/app/ --delete
aws s3 mb s3://<bucket>

新建一个 S3 桶。Region 默认 us-east-1,可通过 `--region` 覆盖。

--region eu-west-1

aws s3 mb s3://my-new-bucket --region eu-west-1
aws s3 rb s3://<bucket>

删除桶(用 `--force` 会先清空对象)。

--force;--no-progress

aws s3 rb s3://old-bucket --force
aws s3 presign s3://<bucket>/<key> --expires-in <seconds>

生成一个在 `<seconds>` 秒后过期的预签名 URL——分享私有文件时很有用。

aws s3 presign s3://my-bucket/file.pdf --expires-in 3600

Lambda

aws lambda list-functions

列出当前 region 下的所有 Lambda 函数。

--function-version ALL;--max-items 50;--query 'Functions[].FunctionName'

aws lambda list-functions --query 'Functions[].FunctionName' --output text
aws lambda update-function-code --function-name <name> --zip-file fileb://fn.zip

用本地 zip 更新函数代码。在某些环境下需要 `--cli-binary-format raw-in-base64-out`。

aws lambda update-function-code --function-name my-fn --zip-file fileb://out.zip --cli-binary-format raw-in-base64-out
aws lambda invoke --function-name <name> --payload '{}' out.json

同步调用一个函数——把响应写入 `out.json`。

--invocation-type Event|RequestResponse|DryRun;--log-type Tail;--cli-binary-format

aws lambda invoke --function-name my-fn --payload '{"key":"value"}' out.json && cat out.json

DynamoDB

aws dynamodb scan --table-name <name>

扫描 DynamoDB 表——读取所有 item(建议尽量用 `query` 加 key condition)。

--table-name;--filter-expression;--projection-expression;--select;--max-items

aws dynamodb scan --table-name users --max-items 5
aws dynamodb query --table-name <name> --key-condition-expression 'pk = :v' --expression-attribute-values '{":v":{"S":"u1"}}'

通过 key condition 表达式按分区键查询 item。

aws dynamodb query --table-name users --key-condition-expression '#u = :u' --expression-attribute-names '{"#u":"userId"}' --expression-attribute-values '{":u":{"S":"u1"}}'

IAM

aws iam list-users

列出账号中的所有 IAM 用户。

--path-prefix /;--max-items

aws iam list-users --query 'Users[].UserName' --output text
aws iam create-user --user-name <name>

新建一个 IAM 用户。

aws iam create-user --user-name new-dev
aws iam attach-user-policy --user-name <name> --policy-arn <arn>

为一个用户附加托管策略。

aws iam attach-user-policy --user-name new-dev --policy-arn arn:aws:iam::aws:policy/ReadOnlyAccess

Profiles

aws --profile <name> <service> <cmd>

以具名 profile 运行任意命令(profile 必须已经配置好)。

--profile prod;--profile dev;--profile staging

aws --profile prod s3 ls
AWS_PROFILE=<name> aws <service> <cmd>

通过环境变量设置 profile——在脚本中很有用。

AWS_PROFILE=prod aws lambda list-functions

诊断

aws --debug <service> <cmd>

把 HTTP wire-level 日志 dump 到 stderr——排查签名或 payload 错误时很有用。

--debug;--no-verify-ssl;--ca-bundle <file>;--cli-read-timeout <seconds>

aws --debug s3 ls 2> aws.log
aws --no-sign-request <service> <cmd>

发起未签名请求——用于公共桶 / 测试 endpoint。

aws --no-sign-request s3 cp public.txt s3://public-bucket/x

相关命令速查

关于 AWS CLI

AWS Command Line Interface(awscli)是 Amazon 官方推出的用于在终端控制 AWS 服务的工具。当前版本线是 AWS CLI v2(2020 年发布;awscli 1.x 处于维护期)。v2 发布为单一安装程序(msi / pkg / 签名 zip),支持 SSO、新的 `aws sso login` 流程、自动分页以及二进制参数(处理像 Lambda zip 上传这类 base64 编码的 blob)。配置拆分为 `~/.aws/config`(region、output 格式)与 `~/.aws/credentials`(access key),但在使用 IAM Identity Center / SSO 时,通常用 `aws sso configure` 而不是长期 key。每个 AWS 服务都可以通过 `aws <service> <command>` 触达——例如 `aws ec2 describe-instances`、`aws s3 sync`、`aws lambda invoke`、`aws dynamodb scan`。CLI 采用 Apache 2.0 协议。更新的替代方案是 `aws-shell`(交互式补全)和 AWS CDK(`cdk`,用于基础设施即代码)。AWS CLI v2 不会把你的源代码上传到任何地方,只会执行你显式发起的 API 调用。

速查页版本 1.0.0