S3 是 AWS 公有云服务提供的云存储服务,提供海量数据存储服务,同时基于 AWS S3 提供的一系列网络服务接口,也有大量已经开发完成的工具供我们使用,以利用起 AWS 庞大的存储资源,这篇文章的目录选取了其中一个用 Linux 命令行工具s3cmd来管理 AWS S3 云存储其中的数据。
s3cmd 是非常优秀的 S3 命令行管理工具,用 python 编写,支持 python 2.6 & 2.7,但是尚不支持 python3,但是目前绝大多数的 Linux 发行版默认都是 python2.x 系列。
Demo CentOS 6.x
Install s3cmd
1. 无论是 Denbian 系还是 Rehat 系列,软件仓库内已经加入了 s3cmd
# 1.1 Ubuntu & Debian
$ sudo apt-get install -y s3cmd
# 1.2 RHEL & CentOS
$ sudo yum install s3cmd
2. 如果您的系统比较特殊,软件仓库内找 不到 s3cmd,还有 s3cmd 的 Github 上去获取相关安装信息:链接
Configure s3cmd
1. 第一次运行 s3cmd 需要首先预配置相关 s3 信息
s3cmd --configure
它会问你一系列问题:
- AWS S3 中 IAM 账户的 Access Key 以及 Secret Key (建议单独创建 IAM)
- 对 AWS S3 双向传输的加密密码(自行设定不要忘记)
- 为加密数据设定 GPG 程序的路径(默认即可)
- 是否使用 https 协议(默认即可)
- 如果不是 https 协议,需要设定名字和端口 配置完成之后,配置信息以普通文本保存在~/.s3cfg
2. China 与 Global 的区别
笔者在第一次运行时,始终无法添加成功,报错信息如下:
ERROR: Test failed: 403 (InvalidAccessKeyId): The AWS Accecc Key Id you provided does not exist in our records.
起初以为是 Access Key 不对,在经过多次测试之后,才发现问题,这是因为 s3cmd 内置 s3 的 Domain 为 Global 的信息,而中国与 Global 是独立存在的所以查找不到我们的 Access Key。所以,如果你使用的 Global AWS 那么上面一步应该已经配置好了你的 s3cmd,如果你是 AWS China 的用户,那么你要做以下操作。
- 在 Retry configuration? [Y/n]选择“n”
- Save settings? [y/N] 选择“y”
- 保存设置之后,编辑配置文件(~/.s3cfg ) 修改其中的如下字段,并将其中%(bucket)s 用您实际的某一个存储桶名字代替掉
bucket_location = %(location)
host_base = s3.cn-north-1.amazonaws.com.cn
host_bucket = %(bucket)s.s3.cn-north-1.amazonaws.com.cn
website_endpoint = http://%(bucket)s.s3-website-%(location)s.amazonaws.com.cn/
例如,你的存储桶的名字为 s3chinatest: 地域为北京。
bucket_location = cn-north-1
host_base = s3.cn-north-1.amazonaws.com.cn
host_bucket = s3chinatest.s3.cn-north-1.amazonaws.com.cn
website_endpoint = http://s3chinatest.s3-website.amazonaws.com.cn/
3. 保存配置文件,然后用命令测试一下,确认 s3cmd 可以正常工作
$ s3cmd ls
2016-11-18 22:30 s3://s3chinatest
2016-10-29 00:14 s3://bucket2