Skip to content

https://blog.51cto.com/thedream/1893168

https://www.cnblogs.com/hei-ma/p/10155004.html

https://www.cnblogs.com/syavingcs/p/7302501.html

1. S3 cmd

官方网站 http://s3tools.org/s3cmd

安装

pip install s3cmd

第一次使用 s3cmd 前,需要先填写必要的信息。运行 s3cmd --configure,填入 csv 文件中的 access key 和 secret key,其余选项通常可以使用默认设定。设置结束后,在 $HOME 目录下会出现一个 .s3cfg 文件,里面存储了所有的设置信息。你可以使用文本编辑器进一步修改它

创建一个 bucket

s3cmd mb s3://bucket-name
s3cmd mb s3://bucket-name

显示所有 bucket

s3cmd ls
s3cmd ls

显示一个 bucket 中的内容

# 只显示根目录下的文件和文件夹
s3cmd ls s3://bucket-1

# 显示所有文件和文件夹
# -r 可以用 --recursive 代替,下同
s3cmd ls -r s3://bucket-1
s3cmd la s3://bucket-1
# 只显示根目录下的文件和文件夹
s3cmd ls s3://bucket-1

# 显示所有文件和文件夹
# -r 可以用 --recursive 代替,下同
s3cmd ls -r s3://bucket-1
s3cmd la s3://bucket-1

上传文件

# 上传单个文件
s3cmd put file-1 s3://bucket-1/dir-1/file-1

# 上传整个文件夹
# dir-1 将存放在 dir-2 之下
s3cmd put -r dir-1 s3://bucket-1/dir-2/

# 与 put -r 类似
# 但只上传已修改的文件
# 相当于 Linux 中的 rsync
s3cmd sync dir-1 s3://bucket-1/dir-2/
# 上传单个文件
s3cmd put file-1 s3://bucket-1/dir-1/file-1

# 上传整个文件夹
# dir-1 将存放在 dir-2 之下
s3cmd put -r dir-1 s3://bucket-1/dir-2/

# 与 put -r 类似
# 但只上传已修改的文件
# 相当于 Linux 中的 rsync
s3cmd sync dir-1 s3://bucket-1/dir-2/

下载文件

# 下载单个文件
s3cmd get s3://bucket-1/dir-1/file-1 file-1

# 下载整个文件夹
# 将在当前路径创建 dir-1 文件夹
s3cmd get -r s3://bucket-1/dir-1

# 下载整个文件夹
# 直接下载内容,不创建 dir-1 文件夹
s3cmd get -r s3://bucket-1/dir-1/
# 下载单个文件
s3cmd get s3://bucket-1/dir-1/file-1 file-1

# 下载整个文件夹
# 将在当前路径创建 dir-1 文件夹
s3cmd get -r s3://bucket-1/dir-1

# 下载整个文件夹
# 直接下载内容,不创建 dir-1 文件夹
s3cmd get -r s3://bucket-1/dir-1/

复制文件

# 复制单个文件
s3cmd cp s3://bucket-1/file-1 s3://bucket-2/file-2

# 复制整个文件夹的内容
s3cmd cp s3://bucket-1/dir-1/ s3://bucket-2/dir-2/
# 复制单个文件
s3cmd cp s3://bucket-1/file-1 s3://bucket-2/file-2

# 复制整个文件夹的内容
s3cmd cp s3://bucket-1/dir-1/ s3://bucket-2/dir-2/

移动文件

# 移动单个文件 s3cmd mv s3://bucket-1/file-1 s3://bucket-2/file-2

# 移动整个文件夹的内容 s3cmd mv s3://bucket-1/dir-1/ s3://bucket-2/dir-2/

删除文件

# 删除单个文件
s3cmd rm s3://bucket-1/file-1

\# 删除整个文件夹
s3cmd rm -r s3://bucket-1/dir-1/
# 删除单个文件
s3cmd rm s3://bucket-1/file-1

\# 删除整个文件夹
s3cmd rm -r s3://bucket-1/dir-1/

删除 bucket

# 删除一个空的 bucket
s3cmd rb s3://bucket-1

# 删除 bucket 和其中的所有内容
s3cmd rb --force s3://bucket-1
# 删除一个空的 bucket
s3cmd rb s3://bucket-1

# 删除 bucket 和其中的所有内容
s3cmd rb --force s3://bucket-1

2. S3上开启CORS

https://docs.aws.amazon.com/zh_cn/AmazonS3/latest/userguide/ManageCorsUsing.html

https://docs.aws.amazon.com/zh_cn/AmazonS3/latest/userguide/VirtualHosting.html#virtual-hosted-style-access

https://docs.aws.amazon.com/zh_cn/sdk-for-javascript/v3/developer-guide/s3-example-photo-album.html

3. 跨账户复制数据

3.1 源地址配置

进入原始数据保存的S3桶,进入桶内,在标签页中点击第三个标签页Permission权限界面,在下方的Bucket Policy位置输入如下的配置。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "DelegateS3Access",
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::123456781111:root",
                    "arn:aws:iam::987654321111:root"
                ]
            },
            "Action": [
                "s3:ListBucket",
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::demo-data-abc/*",
                "arn:aws:s3:::demo-data-abc"
            ]
        }
    ]
}
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "DelegateS3Access",
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::123456781111:root",
                    "arn:aws:iam::987654321111:root"
                ]
            },
            "Action": [
                "s3:ListBucket",
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::demo-data-abc/*",
                "arn:aws:s3:::demo-data-abc"
            ]
        }
    ]
}

请替换上文中的AWS账号为要分发给的用户的账号,如果有多个账号,请分别填写,并将Resource部分的S3桶名字替换为实际要分发数据的桶的名字。在这个AWS账户下的IAM用户隶属的Access Key都将具有权限。此外,如果希望复制整个目录,使用 --recursive 命令,那么就需要提供ListBucket权限,否则将只能逐条复制单个文件而不能复制自动的整个目录。

注:虽然AWS中国区没有root账号,但是实际操作中本策略可以成功地为中国区的一个AWS账户内的所有IAM用户赋予访问权限。

现在可以切换到要复制数据的用户账户内,创建IAM用户,创建Access Key,安装AWS CLI客户端,配置Access Key,然后开始数据复制。

执行如下命令复制整个桶。

aws s3 cp --recursive s3://demo-data-abc/demo1/ s3://my-demo-bucket/demo1/ --copy-props none
aws s3 cp --recursive s3://demo-data-abc/demo1/ s3://my-demo-bucket/demo1/ --copy-props none

4. s3上传加速

S3 Accelerator目前仅在Global区域有效

4.1 启动

进入S3存储桶,点击第二个标签页”属性“,点击高级设置中的”转移加速度“(英文是Tranfer acceleration),点击Enable启用。然后点击Save保存

image-20250429164647041

image-20250429164731268

4.2 费用

S3 Transfer Acceleration 主要用于上传方向的加速,其原理是利用CloudFront的CDN POP点做加速。

费用定义在如下页面的下半部分的“传输加速”章节中描述:

https://aws.amazon.com/cn/s3/pricing/?nc=sn&loc=4

官方说明:

每当您使用 S3 Transfer Acceleration 上传对象时,我们都会检查此服务的传输速度是否有可能比常规 Amazon S3 的快。在将同一对象传输到同一目标 AWS 区域时,如果我们确定此服务的传输速度不会快于常规 Amazon S3,那么对于此次使用 S3 Transfer Acceleration 进行的传输,我们将不会收取任何费用,并且可能对此次上传绕过 S3 Transfer Acceleration 系统。

5. 挂载s3到ec2