照片由 Christina @ wocintechchat.com 提供 | 图片由作者编辑 | 来自 Unsplash
当谈到云存储时,无论是新手还是经验丰富的云工程师,AWS S3(S3服务)通常是首选的云存储解决方案。然而,仅仅使用S3是不够的——你需要正确地使用它,才能真正发挥其全部潜力。无论你是管理TB级的数据,优化存储成本,还是确保高可用性的同时,接下来要分享的一些技巧都将帮助你最大限度地利用S3。
在这份指南中,我将带你一步步掌握一些专家技巧,这些技巧不仅可以帮你省下成本,还可以提升性能和保证高可用性。到文章结束时,你将全面掌握如何优化你的AWS S3 存储桶,并避开那些可能拖慢数据处理速度或增加成本的常见坑。
1. 了解基础知识:AWS S3 存储桶和对象简介在我们深入优化之前,让我们确保我们对S3实际是什么有同样的理解。简单来说,AWS S3 是一个可扩展的对象存储服务,您可以将数据存储在“桶”中,并通过唯一的对象键来访问它们。
- 桶:这些是存放您的数据对象的容器。
- 对象:这些是存储在桶中的单个文件或数据。
尽管这听起来很简单,但错误配置桶或不妥善存储对象会导致意外的费用和性能瓶颈。
常犯的错误:- 使用随机的名字来命名桶会使管理和跟踪变得很困难。相反,可以使用如
项目-地区-环境
的命名规则(例如analytics-us-east-1-production
,这一串可以是分析-美国东部-1-生产
)。
使用 S3 的一个最大优势是它的 性价比高,但前提是您正确地利用它。下面来看看一些节省成本的方法:
2.1. 使用存储类别:AWS S3 提供不同的存储类别选项,根据您的数据访问模式:
- S3 标准:适合频繁访问的数据。
- S3 不经常访问 (IA) 层:适用于访问不频繁但仍然需要快速检索的数据。
- S3 Glacier 及 Glacier 深度归档:非常适合极少访问的存档数据。
实用技巧:如果你不确定访问模式是怎么样的,可以考虑使用S3 智能分层。它会自动将数据移动到最经济的存储级别
2.2. 运用生命周期政策对于那些随着时间推移变得不再那么重要的数据,生命周期策略可以自动将数据迁移到更便宜的存储层,或者在设定的期限后删除它们。
# 示例生命周期策略
{
"Rules": [
{
"ID": "将旧日志数据移至Glacier",
"Prefix": "logs/",
"Status": "已启用",
"Transitions": [
{
"Days": 30,
"StorageClass": "StorageClass"
}
]
}
]
}
常犯的错误
- 忘记设置生命周期策略可能导致不必要的开支,尤其是对于那些随时间变得无关紧要的日志数据或大型数据集。
当你处理大型文件时,默认的单文件上传可能不是最高效的选择。让我们来看看两种可以提高效率的方法。
3.1. 使用分段上传功能对于超过100 MB的文件,建议使用多部分上传。这会将文件分成更小的部分并同时进行上传,从而显著加快上传速度。
import boto3
s3_client = boto3.client('s3')
multipart_upload = s3_client.create_multipart_upload(Bucket='my-bucket', Key='large-file.zip') # 分段上传对象
# 上传各个部分
for i in range(1, num_parts + 1):
part = s3_client.upload_part(
Bucket='my-bucket',
Key='large-file.zip',
PartNumber=i,
UploadId=multipart_upload['UploadId'],
Body=file_part # 文件分段
)
# 完成分片上传
3.2. 加速传输
您可以使用 S3 传输加速更快地传输数据。
如果你的用户在全球范围内访问数据,可以考虑启用 S3 传输加速功能,利用 Amazon CloudFront 全球分布的边缘位置来减少延迟时间。
如何开启:
- 进入 S3 控制台。
- 选择你的桶,然后转到 传输加速 选项。
- 点击 启用 按钮。
4. 增强安全性:桶策略、加密和 IAM 角色权限, 桶政策使用Python的Boto3库来自动化任务可以简化重复性任务。
提示:使用Python脚本自动处理标签、生命周期配置和备份等,以实现自动化。
防止未经授权访问桶级别的权限
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "拒绝",
"Principal": "主体",
"Action": "s3:*",
"Resource": "arn:aws:s3:::my-bucket/*",
"Condition": { "布尔": { "aws:安全传输": "false" } }
}
]
}
// 这段 JSON 表示拒绝所有用户进行不安全传输的 S3 操作。
加密技术使用服务器端加密(SSE-S3)或自带客户端加密来保护您的数据。
IAM 角色(Role)为不同的应用程序创建特定的IAM角色,以遵循最小权限策略。
5: 确保高可用性通过S3复制数据冗余和可用性 对关键任务应用程序来说至关重要。AWS S3 提供 跨区域复制功能(CRR) 和 同区域复制功能(SRR),以便在不同区域或同一区域内复制数据,从而实现灾难恢复。
例子:设置跨区域的备份{
"规则列表": [
{
"ID": "跨区域副本",
"状态": "已开启",
"前缀": "",
"目标位置": {
"存储桶": "arn:aws:s3:::my-replica-bucket"
}
}
]
}
常见的用法:
- 将数据复制到另一个区域以实现灾难恢复目的。
- 使用同区域备份来维护备份以符合合规要求。
标签帮助你整理和分类你的数据,使其更易于搜索、筛选和管理大量数据。比如,可以根据项目、环境或部门给对象打标签。
s3_client.put_object_tagging(
Bucket='my-bucket',
Key='data/report.csv',
Tagging={'TagSet': [{'Key': 'Project', 'Value': 'Analytics'}]}
)
6.2. 开启数据保护中的版本管理
如果你担心不小心删错文件或覆盖重要文件,这时开启版本历史功能就很有帮助。此功能会存储文件的多个版本,让你在需要时可以恢复数据。
基于优化大规模数据传输成本的技巧 #7在将大量数据传输进出S3时,成本可能迅速增加。这里有一些策略可以帮助你降低这些成本:
- 使用 VPC 终端节点来连接到 S3,以避免 VPC 和 S3 之间的数据传输费用。
- 在上传之前压缩文件,以减少存储和传输所需的空间。
- 使用 Amazon CloudFront 缓存经常访问的数据,降低对 S3 的访问频率。
- 解决 AWS S3 的常见问题
确保桶策略正确配置,并且IAM角色设置妥当。
多部分上传失败情况- 使用 重试 并监控进度来处理多部分上传期间的中断。
- 使用 S3 Transfer Acceleration 优化数据检索过程,并利用 CloudFront 进行缓存。
通过运用本指南中的技术,可以让您的 AWS S3 使用更上一层楼。无论您是 云工程师 、数据架构师 ,还是仅仅想优化云存储策略的用户,这些最佳实践将帮助您降低成本、提高性能并确保数据的可用性。
随意试试这些策略,然后告诉我感觉怎么样。如果你有任何疑问或者需要更多帮助,随时可以留言或者直接联系我。
❤️ 觉得这有用吗?与需要它的朋友分享吧!给点掌声 👏👏👏👏 也超级赞——这能让更多人发现这篇内容,也是对你喜欢的内容的一种肯定。当然,我也很想知道你的看法!
🎯谢谢阅读!如果喜欢的话,请点击_关注我 按钮,获取我的最新文章。你也可以通过☕_请我喝杯咖啡_支持我。
🚀 想联系我吗?欢迎在LinkedIn上联系我!
🔔 我经常撰写有关数据工程的核心概念、SQL、Python、数据分析和数据科学等主题的博客。欢迎在我的个人主页上浏览更多文章。
一个直接了当的英语解释感谢你成为我们的一员!在你离开前,我们想对你说……
- 确保 点赞 并 关注作者的动态 ️👏️
- 关注我们:X | LinkedIn | YouTube | Discord | Newsletter | 听我们的播客
- 在 Differ 上免费创建一个 AI 驱动的博客。
- 更多精彩内容请访问 PlainEnglish.io
共同学习,写下你的评论
评论加载中...
作者其他优质文章