awscli version 2学习笔记

本文最后更新于:2022年11月4日 下午

AWS Command Line Interface (AWS CLI) 是一种开源工具,让您能够在命令行 Shell 中使用命令与 AWS 服务进行交互。搜了一下感觉相关中文资料不太多?特别是 version 2 的几乎没找到。就看官方自己学了学。写一点awscli s3 version2的学习笔记,一些命令的简单介绍。

参考资料:

  1. 官方文档AWS CLI Command Reference
  2. 官方文档AWS CLI Command Reference version 2
  3. GitHub 项目 aws-cli
  4. User Guide for Version 2 pdf
  5. AWS Command Line Interface中文用户指南
  6. 【推荐】AWS Command Line Interface 版本 2 的用户指南

安装 version 1

AWS CLI有三种安装方式。

  1. pip
    AWS CLI 在 Linux、Windows 和 macOS 上的主要分发方式是 pip,这是一个用于 Python 的程序包管理
    器,可提供方便的方式来安装、升级和删除 Python 程序包及其相关组件。

    1
    pip install awscli --upgrade --user
  2. 在虚拟环境中安装【推荐】
    用root用户使用pip可能会出现问题,一般建议使用虚拟环境(*我个人喜欢用anaconda或者miniconda*)。

    • pip安装virtualenv
      1
      pip install --user virtualenv
    • 创建虚拟环境并为其命名
      1
      virtualenv ~/cli-ve
    • 激活新虚拟环境
      Linux, macOS, or Unix
      1
      source ~/cli-ve/bin/activate
      Windows
      1
      %USERPROFILE%\cli-ve\Scripts\activate
    • 将 AWS CLI 安装到虚拟环境中
      1
      (cli-ve)~$ pip install --upgrade awscli

    您可以使用 deactivate 命令退出虚拟环境。不管何时启动新会话,都必须重新激活环境。

要升级到最新版本,请重新运行安装命令:

1
(cli-ve)~$ pip install --upgrade awscli

3. 捆绑安装程序

验证 AWS CLI 是否已正确安装。

1
aws --version

卸载

pip 卸载,或者

1
2
sudo rm -rf /usr/local/aws
sudo rm /usr/local/bin/aws

安装version2

AWS CLI 版本 2 是 AWS CLI 的最新主版本,支持所有最新功能。版本 2 中引入的某些功能无法向后兼容版
本 1,您必须升级才能访问这些功能。AWS CLI 版本 2 仅可作为捆绑安装程序安装。虽然您可能会在软件包管理器中找到它,但这些软件包是不受支持的非官方软件包,并非由生产或管理AWS 我们建议您仅从本指南中记载的官方 AWS CLI 发行点安装
AWS。

脚本安装

Linux x86 (64-bit)

1
2
3
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install

Linux ARM

1
2
3
curl "https://awscli.amazonaws.com/awscli-exe-linux-aarch64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install

验证 AWS CLI 是否已正确安装。

1
aws --version

Docker官方镜像安装

官方 AWS CLI 版本 2 Docker 镜像托管在 amazon/aws-cli 存储库中的 DockerHub 上。首次使用 docker run 命令时,最新的 Docker 镜像将下载到您的电脑。docker run 命令的每次后续使用都会从本地副本运行。

1
docker run --rm -it amazon/aws-cli command

command 替换成你需要的 aws-cli 命令

比如说,验证 AWS CLI 是否已正确安装。

1
docker run --rm -it amazon/aws-cli --version

--rm – 指定在命令退出后清理容器。
-it – 指定要使用 打开伪 TTY。stdin这允许您在容器中运行 AWS CLI 版本 2 时向其提供输入,例如,
通过使用 aws configure 和 aws help 命令。当选择是否省略 -it 时,请考虑以下事项:
• 如果您正在运行脚本,则不需要 -it
• 如果您的脚本遇到错误,则从 Docker 调用中省略 -it 也许能解决此问题。
• 如果您正在尝试通过管道发送输出,-it 可能会导致错误,从 Docker 调用中省略 -it 也许能解决此问题。如果希望保留 -it 标志,但仍想通过管道发送输出,请禁用 AWS CLI 默认使用的客户端分页程序 (p. 109),应该能解决此问题。

可以使用 -e 标志调用特定系统的环境变量。要使用环境变量,请按名称调用它。

1
2
$ docker run --rm -it -v ~/.aws:/root/.aws -e ENVVAR_NAME amazon/aws-cli s3 ls
2020-03-25 00:30:48 aws-cli-docker-demo

您可以使用 -e 标志调用特定系统的环境变量。

1
2
$ docker run --rm -it -v ~/.aws:/root/.aws -e AWS_PROFILE amazon/aws-cli s3 ls
2020-03-25 00:30:48 aws-cli-docker-demo

用别名缩短 Docker 命令:

1
alias aws='docker run --rm -it amazon/aws-cli'

快速配置

aws configure 命令是设置 AWS CLI 安装的最快方法。

1
2
3
4
5
$ aws configure
AWS Access Key ID [None]: AKIAIOSFODNN7EXAMPLE
AWS Secret Access Key [None]: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
Default region name [None]: us-west-2
Default output format [None]: json

• 访问密钥 ID (p. 32)
• 秘密访问密钥 (p. 32)
• AWS 区域 (p. 33)
• 输出格式 (p. 33)

1
2
3
4
5
6
7
8
9
10
11
12
13
```
## AWS CLI 的命名配置文件
配置文件默认保存在 `~/.aws` 文件夹中,有两个 `~/.aws/config` 和 `~/.aws/credentials`。
每个中括号的一部分 `[]` 就是一个命名配置文件,可将多个命名配置文件,存储在 `config` 和 `credentials` 文件中。

config 文件的内容类似如下:
```conf
[default]
region=us-west-2
output=json
[profile user1]
region=us-east-1
output=text

在 config 文件中命名配置文件时,请包括前缀词“profile”。

credentials 文件格式如下:

1
2
3
4
5
6
[default]
aws_access_key_id=AKIAIOSFODNN7EXAMPLE
aws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
[user1]
aws_access_key_id=AKIAI44QH8DHBEXAMPLE
aws_secret_access_key=je7MtGbClwBF/2Zp9Utk/h3yCo8nvbEXAMPLEKEY

在 credentials 文件中创建条目时,请勿使用单词 profile
[default] 配置文件,以在没有显式引用配置文件时使用

可以通过在 aws configure (p. 36) 中使用 –profile 选项或手动通过向 configcredentials 文件中添加条目来配置其他配置文件。例如

1
aws config --profile profile-name

就会往 config 文件中写入 [profile profile-name] 的配置文件,在 credentials 文件中写入 [profile-name] 的配置文件。

用别的命令的时候,只需要使用 --profile profile-name 指定配置文件名称就可以使用这个配置文件。

aws s3

Amazon S3 就是 Amazon Simple Storage Service (Amazon S3)。AWS CLI 提供两个命令来访问 Amazon S3:
• s3 – 用于简化常见任务(如创建、操作和删除对象及存储桶)的执行的高级命令。
• s3api – 提供对所有 Amazon S3 API 操作的直接访问,使您能够执行高级操作。

mb 创建存储桶

使用 s3 mb 命令创建存储桶。存储桶名称必须是全局 唯一的(在所有 Amazon S3 存储桶中都是唯一的)。存储桶名称可以包含小写字母、数字、连字符和点号。存储桶名称只能以字母或数字开头和结尾,连字符或点号后不能跟点号。

语法

1
aws s3 mb <target> [--options]

示例

1
aws s3 mb s3://bucket-name

ls 列出存储桶和对象

要列出存储桶、文件夹或对象。

1
aws s3 ls <target> [--options]

这个命令默认 endpointamazon 的,所以用Scaleway的时候要加上 --endpoint-url=https://s3.你的地区.scw.cloud

示例:
列出所有存储桶

1
aws s3 ls --endpoint-url=https://s3.你的地区.scw.cloud

命令列出一个存储桶中的所有对象和前缀。

1
aws s3 ls s3://桶名 --endpoint-url=https://s3.你的地区.scw.cloud

命令列出一个存储桶中某文件夹中的所有对象(即 桶名 中按前缀 文件夹名/ 筛选出的对象)

1
aws s3 ls s3://桶名/文件夹名 --endpoint-url=https://s3.你的地区.scw.cloud

rb 删除存储桶

语法

1
aws s3 rb <target> [--options]

以下示例删除 s3://bucket-name 存储桶。(如果你的桶不是aws的话,记得加上 endpoint )

1
aws s3 rb s3://bucket-name --endpoint-url=https://s3.你的地区.scw.cloud

默认情况下,存储桶必须为空,此操作才能成功。要删除不为空的存储桶,您必须包含 --force 选项。如
果您使用的是受版本控制的存储桶,即其中包含以前删除“但仍保留”的对象,则此命令 不 允许您删除该存储
桶。您必须先删除所有内容。

rm 删除对象

1
aws s3 rm <target> [--options]

将从 s3://bucket-name/example 删除 filename.txt

1
aws s3 rm s3://bucket-name/example/filename.txt --recursive

mv 移动对象

1
aws s3 mv <source> <target> [--options]

将所有对象从 s3://bucket-name/example 移动到 s3://my-bucket/。

1
aws s3 mv s3://bucket-name/example s3://my-bucket/

将本地文件从当前工作目录移动到 Amazon S3 存储桶

1
aws s3 mv filename.txt s3://bucket-name

cp 复制对象

将所有对象从 s3://bucket-name/example 复制到 s3://my-bucket/。

1
aws s3 cp s3://bucket-name/example s3://my-bucket/

例使用 s3 cp 命令,将本地文件从当前工作目录复制到 Amazon S3 存储桶。

1
aws s3 cp filename.txt s3://bucket-name

将文件从 Amazon S3 存储桶复制到当前工作目录,其中 ./ 指定当前的工作目录。

1
aws s3 cp s3://bucket-name/filename.txt ./

使用 echo 将文本“hello world”流式传输到 s3://bucket-name/filename.txt 文件。

1
echo "hello world" | aws s3 cp - s3://bucket-name/filename.txt

将 s3://bucket-name/filename.txt 文件流式传输到 stdout,并将内容输出到控制台。

1
aws s3 cp s3://bucket-name/filename.txt -

sync 同步对象

同步一个存储桶与一个目录中的内容,或者同步两个存储桶中的内容。通常,s3 sync 在源
和目标之间复制缺失或过时的文件或对象。不过,您还可以提供 --delete 选项来从目标中删除源中不存在
的文件或对象。

1
aws s3 sync <source> <target> [--options]

更新与目标位置中同名文件的大小或修改时间不同的任何文件。输出显示在同步期间执行的操作。(注意,子文件夹也会被同步)

1
aws s3 sync . s3://my-bucket/path
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// Delete local file
$ rm ./MyFile1.txt
// Attempt sync without --delete option - nothing happens
$ aws s3 sync . s3://my-bucket/path
// Sync with deletion - object is deleted from bucket
$ aws s3 sync . s3://my-bucket/path --delete
delete: s3://my-bucket/path/MyFile1.txt
// Delete object from bucket
$ aws s3 rm s3://my-bucket/path/MySubdirectory/MyFile3.txt
delete: s3://my-bucket/path/MySubdirectory/MyFile3.txt
// Sync with deletion - local file is deleted
$ aws s3 sync s3://my-bucket/path . --delete
delete: MySubdirectory\MyFile3.txt
// Sync with Infrequent Access storage class
$ aws s3 sync . s3://my-bucket/path --storage-class STANDARD_IA

[–options]选项

recursive

使用此选项时,系统针对所指定目录或前缀下的所有文件或对象执行该命令。

1
aws s3 rm s3://my-bucket/path --recursive

acl

synccp 为复制到 Amazon S3 的文件设置访问权限。--acl 选项接受 privatepublic-readpublic-read-write 值。

exclude include

使用 s3 cps3 mvs3 syncs3 rm 命令时,可以使用 --exclude--include 选项筛选结
果。

--exclude 选项将规则设置为仅从命令中排除对象,并且系统将按照指定的顺序应用这些选项。

--include 选项将规则设置为仅包括为命令指定的对象,并且系统将按照指定的顺序应用这些选
项。

–grants

s3 cps3 mvs3 sync 命令包括一个 --grants 选项,可用来向指定的用户或组授予对对
象的权限。使用以下语法对权限列表设置 --grants 选项。将 PermissionGrantee_Type
Grantee_ID 替换为您自己的值。
语法

1
2
--grants Permission=Grantee_Type=Grantee_ID
[Permission=Grantee_Type=Grantee_ID ...]

每个值都包含以下元素:
• 可可 – 指定授予的权限。可以设置为 read、readacl、writeacl 或 full。
• Grantee_Type – 指定如何标识被授权者。可以设置为 uri、emailaddress 或 id。
• Grantee_ID – 根据 Grantee_Type.指定被授权者。
• uri – 组 URI。有关更多信息,请参阅 谁是授权者?
• emailaddress – 账户的电子邮件地址。
• id – 账户的规范 ID。

awscli-plugin-endpoint 插件

Scaleway:
https://www.scaleway.com/en/docs/storage/object/api-cli/object-storage-aws-cli/
为了更方便地使用第三方的S3服务商,可以安装插件 awscli-plugin-endpoint。在使用 aws 命令的时候就不需要再指定endpoint。

1
pip install awscli-plugin-endpoint

之后运行:

1
aws configure set plugins.endpoint awscli_plugin_endpoint

修改~/.aws/config文件

1
2
3
4
5
6
7
8
9
[plugins]
endpoint = awscli_plugin_endpoint

[default]
region = nl-ams
s3 =
endpoint_url = https://s3.nl-ams.scw.cloud
s3api =
endpoint_url = https://s3.nl-ams.scw.cloud

s3api

AWS CLI 参考:
• aws s3api
• aws s3api put-bucket-acl
• aws s3api put-bucket-logging

• aws s3api
• aws s3api create-bucket
• aws s3api copy-object
• aws s3api delete-bucket
• aws s3api delete-object
• aws s3api head-bucket
• aws s3api list-objects
• aws s3api put-object


awscli version 2学习笔记
https://pawswrite.xyz/posts/40965.html
作者
Rainbow
发布于
2022年5月18日
许可协议