S3 作为 AWS 的第一个云服务,且作为部分 aws 服务的基石,能与众多 aws 服务有着良好的整合。
除此之外,并且在众多的开源项目中也有着许多良好的支持如:
- Gitlab artifacts/upload 的存储
- Mastodon 的媒体文件存储
- Discourse 的用户上传内容的存储
个人用 s3 比较多的地方,就是各种备份啦,如 gitlab 的备份,数据库备份等.
然而 aws 的 s3 并不便宜,由于按量计费,基本就是用多少付多少。以 us-east 为例,前 50TB 存储成本为: $0.023 per GB
. 在加上$0.023 per GB
出站流量费用,如果数据量比较大,对于个人,可能是用不起的…
好在 s3 基本作为事实标准的对象存储 api,大部分云厂商都有良好的支持。同时,一些不像 Azure/GCP 那么大的云服务厂商,也均有提供物美价廉的 s3 兼容服务。而这其中,最便宜的可能莫过于 Wasabi 了。
完整价格参见: https://aws.amazon.com/s3/pricing/
Wasabi 价格
wasabi 也是按量收费,其中只计算存储费用,但是至少存储 1TB,不满 1TB 也会按照 1TB 收取 5.99usd 的费用。出入站流量均不另外计费,API 请求也不另外收费。可以认为,wasabi 基本就是按照存储大小计费。而 5.99usd/1TB 的价格,相比于 s3,可谓很便宜了~
具体价格说明见: https://wasabi.com/cloud-storage-pricing/
在 aws cli 中使用 Wasabi
wasabi 兼容 s3 api,因此我们可以在 aws cli 中直接使用。
首先,我们按照 awscli 以及 endpoint plugin:
pip3 install awscli
pip3 install awscli-plugin-endpoint
修改~/.aws/config
创建内容:
[plugins]
endpoint = awscli_plugin_endpoint
[wasabi]
region = us-east-1
s3 =
endpoint_url = https://s3.wasabisys.com
signature_version = s3v4
max_concurrent_requests = 100
max_queue_size = 1000
multipart_threshold = 50MB
multipart_chunksize = 10MB
s3api =
endpoint_url = https://s3.wasabisys.com
PS: wasabi 不同地区的 endpoint 可以在此 查看.
如使用欧洲区域,那么则需要将s3.wasabisys.com
替换为 s3.eu-central-1.wasabisys.com
.
接下来,需要在~/.aws/credentials
里配置 access key:
[wasabi]
aws_access_key_id=<ACCESS_KEY>
aws_secret_access_key=<SECRET_KEY>
配置完成后,我们可以通过命令来验证是否配置成功:
aws s3 ls --profile wasabi
除了 aws cli 之外,我们也可以通过 rclone 是用 wasabi,具体可以查阅官方文档 .
使用 Terraform 管理 Wasabi 的子账号
Wasabi 支持 AWS IAM,因此,我们可以通过子账号进行权限划分,通过不同的 User 来操作不同 Bucket。同时,由于 Wasabi 也支援 IAM 的 API,因此,我们能通过 Terraform 来管理 Wasabi 的 IAM User 以及权限。
首先,我们在 main.tf 使用 Aws Provider 并自定义 endpoint:
provider aws {
region = "us-east-1"
profile = "wasabi"
endpoints {
sts = "https://sts.wasabisys.com"
iam = "https://iam.wasabisys.com"
s3 = "https://s3.us-east-2.wasabisys.com"
}
s3_force_path_style = true
skip_get_ec2_platforms = true
}
创建 Policy 并授权给 User:
resource "aws_iam_policy" "bucket" {
name = "bucket"
path = "/"
policy = file("bucket.json")
}
resource "aws_iam_user" "user" {
name = "user"
}
resource "aws_iam_user_policy_attachment" "user-bucket-attach" {
user = aws_iam_user.user.name
policy_arn = aws_iam_policy.bucket.arn
}
PS: 由于 wasabi 对 s3 的部分 api 支援不完整,因此,不能通过 Terraform 来管理 Bucket.
Wasabi 的问题
Delete Storage
wasabi 对于删除不满 90 天的文件,会收取 Delete Storage 的费用,因此如果频繁删除文件,也会造成不少额外费用。对应的,我们可以将备份等文件尽量保持 90 天来规避此问题。
稳定性
我在 18 年就开始使用 Wasabi,其中用途比较多,除了各种备份之外,还用于了 Go Mod Proxy/Docker Registry 等。其中就发现,wasabi 在稳定性跟速度上,相比于 digitalocean 的 Spaces,稳定性以及速度并不那么好。2 年过去了,由于 Go Mod Proxy/Docker Registry 已经不放在 wasabi 了,这里不太好做过多评价。但是如果作为备份存储,wasabi 是个不错的选择。
其他选择
除了 Wasabi 之外,也有一些不错的选择。
DigitalOcean Spaces
DigitalOcean 的 Spaces 是按照存储+流量计费,但也有最低消费 $5/m
,这其中包含了 250GiB 的存储,以及 1T 的出站流量。超出的费用为存储: $0.02/GB
, 出站流量费用: $0.01/GB
. 如果阁下的服务已经在使用 DigitalOcean,那么 spaces 也是个不错的选择。
完整价格说明见: https://www.digitalocean.com/pricing/#spaces-object-storage
Object Storage
Scaleway 也提供有 s3 兼容服务,也是按照存储+出站流量计费。价格为: €0.015/GB
,出站流量费用为: €0.01/GB
. 不过值得注意的是,Scaleway 有 75GiB 的免费存储额度,以及每个月有 75GiB 的免费出站流量额度。同时,如果有 Scaleway 的机器,那么通过机器不会产生额外的流量费用, 如通过 scaleway 的机器进行出站流量中转,那么将会只有存储费用。
更多关于 Scaleway Ojbect Storage 的说明见: https://www.scaleway.com/en/pricing/#object-storage
自建 MinIO
个人是不太建议自建 MinIO 的,特别是用于存储重要数据,还不如直接用便宜的 s3 兼容服务。但是如果阁下有 Online/Kimsufi 等便宜的大容量硬盘的杜甫/VPS 等,用于做一个备份也是一个不错的选择。