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
安装
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/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保存
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 系统。