完全指南:从安装配置到命令补全的实战手册)
AWS CLI v1aws-cli完全指南从安装配置到命令补全的实战手册【免费下载链接】aws-cliUniversal Command Line Interface for Amazon Web Services项目地址: https://gitcode.com/GitHub_Trending/aw/aws-cliaws-cli 是 Amazon Web ServicesAWS提供的统一命令行工具通过 Python 实现允许你在终端中直接调用 AWS 服务 API完成对 EC2、S3、IAM、Lambda 等数百项云服务的操作与管理。本文以仓库根目录的 README.rst 为核心骨架结合 awscli 包源码系统讲解 AWS CLI v1 的环境要求、安装方式、凭证与配置文件体系、aws configure交互配置的底层原理、基础命令结构以及命令补全机制帮助你从零开始搭建一套可投入日常使用的 AWS 命令行环境。版本现状AWS CLI v1 已进入维护模式在开始之前请先了解 AWS CLI v1 的生命周期状态。根据 README.rst 的说明AWS CLI v1 已于2026 年 7 月 15 日进入维护模式官方推荐新用户迁移至 AWS CLI v2。如果你是新项目建议直接使用 v2如果你因既有脚本、工具链或业务约束必须停留在 v1本文的内容依然完全适用。同时需要注意 Python 运行时版本的边界aws-cli 支持Python 3.10.x 及以上3.10 至 3.14 均支持2026 年 4 月 29 日起AWS CLI结束了对 Python 3.9 的支持该运行时已于 2025 年 10 月 31 日停止维护官方建议用户定期关注 Amazon Web Services Security Bulletins 网站获取与 aws-cli 相关的安全公告。仓库当前版本可在 awscli/init.py 中查到__version__ 1.46.0。AWS CLI v1 于 2013 年 9 月 2 日发布正式版GA目前仍处于完整支持阶段其维护策略遵循 AWS SDKs 与工具的共享配置和凭证参考指南中的维护政策。环境要求README 明确给出两个维度的依赖要求Python 版本3.10.x 及以上含 3.11、3.12、3.13、3.14打包工具版本为保证安装顺畅建议使用pip9.0.2 以上、setuptools36.2.0 以上。从 setup.py 中的python_requires 3.10及 classifiers 列表可以进一步印证本项目仅面向 Python 3且最低版本为 3.10。setup.py中声明的核心运行时依赖install_requires包括依赖包版本约束用途docutils0.18.1,0.19生成 CLI 帮助文档reStructuredText 渲染PyYAML3.10,6.1解析 YAML 格式的输入/配置colorama0.2.5,0.4.7跨平台终端彩色输出rsa3.1.2,4.8签名相关操作jmespath0.7.1,2.0.0查询 JSON 输出的 JMESPath 表达式引擎python-dateutil2.1,3.0.0日期时间解析urllib31.25.4,!2.2.0,3HTTP 请求底层库此外若需要使用 CRTCommon Runtime相关高级特性可通过extras_require{crt: [awscrt0.36.0]}安装附加依赖。安装 AWS CLIREADME 推荐的安全安装方式是在virtualenv中使用pip# 在虚拟环境中安装推荐 $ python -m pip install awscli # 未使用虚拟环境时全局安装 $ sudo python -m pip install awscli # 仅安装到当前用户 $ python -m pip install --user awscli # 已安装 awscli 时升级到最新版会一并升级所有依赖 $ python -m pip install --upgrade awscli针对 macOS 有一个已知的坑在 El Capitan 系统上如果遇到distutils自带的six版本冲突报错需要加上--ignore-installed选项$ sudo python -m pip install awscli --ignore-installed six除了 pip 方式官方还提供了其他安装渠道Linux / macOS可使用官方 bundled installer捆绑安装器Windows提供 MSI Installer 安装包开发分支如果想运行develop分支的最新代码参见 CONTRIBUTING.md 中的 CLI Development Version 章节。安装完成后仓库的bin目录见 bin提供了完整的可执行脚本集aws、aws.cmdWindows 批处理入口、aws_completer、aws_bash_completer与aws_zsh_completer.sh命令补全脚本这些脚本在 setup.py 中被注册为 console scripts。安装后的入口链路从源码看CLI 的进程入口非常清晰bin/aws脚本以及 Windows 下的aws.cmd是用户敲击aws命令时执行的入口它会调用 awscli/main.py 中的sys.exit(main())main()定义在 awscli/clidriver.py 中创建CLIDriver实例后调用其main()方法并记录退出码CLI_RC。在 awscli/clidriver.py 的create_clidriver()中可以看到CLI 会创建一个botocore.session.Session传入EnvironmentVariables设置 User-Agent 为aws-cli/版本 botocore/版本然后加载[plugins]配置段中声明的插件最后构造CLIDriver。_build_command_table()在构建命令表时会发出building-command-table.main事件——这正是aws configure等自定义命令通过register_configure_cmd注册被注入命令表的方式。配置 AWS 凭证在使用 AWS CLI 之前必须完成凭证配置。README 列出了五种凭证来源配置命令aws configure—— 最快上手的方式环境变量—— 适合临时/CI 场景共享凭证文件~/.aws/credentials配置文件~/.aws/configIAM Role—— 强烈推荐用于 EC2 实例场景。方式一aws configure 交互式配置aws configure是 README 推荐的第一种方式$ aws configure AWS Access Key ID: MYACCESSKEY AWS Secret Access Key: MYSECRETKEY Default region name [us-west-2]: us-west-2 Default output format [None]: json这条命令会依次提示四项内容Access Key ID、Secret Access Key、默认区域region和默认输出格式output。从源码层面看ConfigureCommand定义在 awscli/customizations/configure/configure.py 中其VALUES_TO_PROMPT列表正好对应上述四个提示项VALUES_TO_PROMPT [ (aws_access_key_id, AWS Access Key ID), (aws_secret_access_key, AWS Secret Access Key), (region, Default region name), (output, Default output format), ]交互逻辑_run_main的关键点通过session.get_scoped_config()读取当前 profile 已配置的值作为默认值展示若该 profile 不存在则按空配置处理InteractivePrompter在提示 Access Key 与 Secret Key 时会对已有值做掩码处理mask_value已存在的密钥显示为****...末尾4位避免泄露用户直接回车空输入表示“保持原值”只有输入了新值且与当前值不同时才会写入按 awscli/customizations/configure/configure.py 中注释引用自 aws/aws-cli#847说明Access Key / Secret Key 始终写入共享凭证文件~/.aws/credentials而 region、output 等配置写入~/.aws/config。该命令还支持--profile参数用于为指定 profile 交互配置$ aws configure --profile testing方式二环境变量$ export AWS_ACCESS_KEY_IDaccess_key $ export AWS_SECRET_ACCESS_KEYsecret_key环境变量方式的优点是无需落盘、适合 CI/CD 流水线。除上述两个核心变量外AWS 还支持AWS_SHARED_CREDENTIALS_FILE、AWS_CONFIG_FILE、AWS_CA_BUNDLE、AWS_DEFAULT_OUTPUT等大量配置变量。在 awscli/init.py 的EnvironmentVariables字典中可以看到两个 CLI 层级的默认绑定EnvironmentVariables { ca_bundle: (ca_bundle, AWS_CA_BUNDLE, None, None), output: (output, AWS_DEFAULT_OUTPUT, json, None), }其中output的默认值为json即不指定输出格式时的兜底行为ca_bundle用于自定义 CA 证书包路径。方式三共享凭证文件创建 INI 格式文件并放到~/.aws/credentialsWindows 下为%UserProfile%\.aws\credentials[default] aws_access_key_idMYACCESSKEY aws_secret_access_keyMYSECRETKEY [testing] aws_access_key_idMYACCESSKEY aws_secret_access_keyMYSECRETKEY该文件支持多个 profile 段段名即 profile 名。如果想把它放到其他位置通过环境变量指定$ export AWS_SHARED_CREDENTIALS_FILE/path/to/shared_credentials_file方式四配置文件创建 INI 格式文件并放到~/.aws/configWindows 下为%UserProfile%\.aws\config[default] aws_access_key_iddefault access key aws_secret_access_keydefault secret key # Optional, to define default region for this profile. regionus-west-1 [profile testing] aws_access_key_idtesting access key aws_secret_access_keytesting secret key regionus-west-2自定义路径同样通过环境变量指定$ export AWS_CONFIG_FILE/path/to/config_file重要规则在 config 文件中除default段外其余 profile 段必须以profile前缀命名段头。例如名为testing的 profile其段头必须是[profile testing]。从 awscli/customizations/configure/init.py 的profile_to_section()函数可以看到实现细节profile 名会被转换为profile %s形式若 profile 名含空白字符还会用shlex.quote加引号处理。方式五IAM RoleEC2 场景如果你在 EC2 实例上使用 AWS CLI官方强烈推荐使用 IAM Roles将角色关联到实例后凭证会被自动注入实例元数据服务Instance Metadata ServiceAWS CLI 会自动发现并使用它们无需在实例内保存任何密钥文件。多个 profile 与 --profile 参数共享凭证文件和配置文件都可以定义多个 profile。默认使用defaultprofile通过--profile参数可切换$ aws s3 ls --profile testing更多配置项环境变量、配置文件条目或两者皆可详见 AWS CLI 官方配置变量主题也可直接在 CLI 内查看$ aws help config-varsaws configure 的更多子命令ConfigureCommand在 awscli/customizations/configure/configure.py 中声明了四个子命令list、get、set、add-model。其中前三个在日常运维中最常用列出当前配置$ aws configure list读取某个配置值get子命令实现在 awscli/customizations/configure/get.py$ aws configure get region $ aws configure get aws_access_key_id --profile testingget支持点分dotted语法读取嵌套配置例如aws configure get default.region、aws configure get profile.testing.region对于[preview]、[plugins]这类预定义段也可用preview.somevar形式读取。若 varname 指向的是段而非标量值命令会向 stderr 输出错误提示并返回非零退出码。设置某个配置值set子命令实现在 awscli/customizations/configure/set.py$ aws configure set region us-west-2 --profile testing $ aws configure set preview.s3 trueset的写入目标有一套明确的规则源码中_WRITE_TO_CREDS_FILE列表aws_access_key_id、aws_secret_access_key、aws_session_token、aws_security_token这几个变量始终写入~/.aws/credentials且写入时开启权限检查其余变量写入~/.aws/config支持点分语法将值作用到指定 profile如default.region、profile.testing.region也支持嵌套子配置如set preview.service true这类两段式写法会把值构造成字典写入。所有写入操作最终由 awscli/customizations/configure/writer.py 的ConfigFileWriter.update_config()完成该实现有几个值得注意的行为目标文件不存在时自动创建含父目录文件权限按0o600创建目标 section 不存在时自动追加已有行不会被覆盖重排保证注释掉的配置项保持原样写入前会校验值中不允许包含换行符\n、\r且校验错误信息刻意不打印敏感值内容防止密钥泄露到 stderr开启check_permissions时会检查文件权限是否过于宽松阈值0o700若其他用户可读则输出chmod 600警告见 awscli/customizations/configure/init.py 中的warn_if_permissive与PERMISSIONS_WARNING_TEMPLATEWindows 平台下跳过该检查。基础命令与命令行结构一个 AWS CLI 命令遵循统一结构aws command subcommand [options and parameters]常用示例# 列出所有 S3 存储桶 $ aws s3 ls # 查看顶层帮助 $ aws help # 查看某个命令的帮助 $ aws command help # 查看某个子命令的帮助 $ aws command subcommand help # 查看 CLI 版本 $ aws --version # 打开调试输出排查请求问题时非常有用 $ aws --debug command subcommand这里的command对应的是服务命令如s3、ec2、iamsubcommand对应服务操作如s3 ls、ec2 describe-instances。命令表由 awscli/clidriver.py 中的_build_command_table()动态构建先加载内置命令再通过building-command-table.main事件让各自定义命令如configure、s3、emr等向命令表注入自身。--debug选项会输出包括 HTTP 请求、签名、凭证解析在内的详细日志是排查 API 调用失败的第一利器。命令补全Command Completionaws-cli 为 Unix-like 系统内置了命令补全功能但默认不会自动启用需要手动配置。仓库 bin 目录提供了三个补全脚本aws_completer补全程序本体bash 与 zsh 通用aws_bash_completerbash 补全脚本aws_zsh_completer.shzsh 补全脚本。补全逻辑的 Python 实现位于 awscli/completer.py。配置方法bash在~/.bashrc中 sourceaws_bash_completer脚本zsh在~/.zshrc中 sourceaws_zsh_completer.sh。启用后按 Tab 键即可补全服务名、操作名、参数名等。详细的配置步骤可参考官方 AWS CLI Command Completion 主题。帮助与更多资源获取帮助的渠道README 说明通过 GitHub 仓库提交 issue提供 bug 报告、功能请求等模板在 Stack Overflow 使用aws-cli标签提问或使用 AWS CLI 官方讨论区购买了 AWS Support 计划的用户可直接创建 support case。延伸阅读资源CHANGELOG.rst版本变更日志aws helpCLI 内置帮助aws help config-vars配置变量主题文档仓库中对应的源文件为 awscli/topics/config-vars.rstaws help s3-config、aws help return-codes等内置主题见 awscli/topics 目录。总结AWS CLI v1aws-cli以统一、可脚本化的命令行方式封装了 AWS 数百项服务 API。本文覆盖了其完整的使用链路Python 3.10 与打包工具的环境要求 → pip/virtualenv/捆绑安装器/MSI 等安装方式 →aws configure交互配置及四种凭证来源 →--profile多账号切换 →aws command subcommand命令结构与--debug调试 → bash/zsh 命令补全。源码层面则揭示了其内部机制bin/aws→clidriver.main()的入口链路、building-command-table.main事件驱动的命令表构建、ConfigFileWriter对 INI 配置文件的增量写入与权限检查。需要注意的是当前 README 明确宣布 AWS CLI v1 已进入维护模式如果你正在规划新的自动化体系请优先评估迁移至 AWS CLI v2而存量 v1 环境完全可以按本文方案继续稳定运维。【免费下载链接】aws-cliUniversal Command Line Interface for Amazon Web Services项目地址: https://gitcode.com/GitHub_Trending/aw/aws-cli创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考