如何仅通过命令行将S3指定前缀下的文件归档至Glacier
直接用AWS CLI将S3指定前缀文件归档到Glacier的解决方案
刚好碰到过类似的需求,其实AWS CLI本身就支持直接通过命令行完成这个操作,不用依赖生命周期规则或者Python脚本——核心是利用s3 mv/s3 cp结合--storage-class参数,下面给你具体的实现方案:
1. 归档并移除原S3文件(同前缀存储类转换)
如果你想把指定前缀下的文件直接归档到Glacier,同时删除原S3标准存储的文件,可以用这个命令:
aws s3 mv s3://your-source-bucket/your-target-prefix/ s3://your-source-bucket/your-target-prefix/ --recursive --storage-class GLACIER
这里源和目标路径设置为同一个前缀,因为我们的目的是修改文件的存储类,而不是移动到不同位置。加上
--recursive会遍历前缀下所有层级的文件,不会漏掉子目录里的内容。
2. 归档但保留原S3文件(复制到Glacier存储类)
如果需要保留原文件的副本,只归档一份到Glacier,可以用s3 cp命令,还可以选择归档到同一个桶或者不同的桶:
# 归档到同一个桶的不同前缀 aws s3 cp s3://your-source-bucket/your-source-prefix/ s3://your-source-bucket/archive-backup/ --recursive --storage-class DEEP_ARCHIVE # 归档到不同的桶 aws s3 cp s3://your-source-bucket/your-source-prefix/ s3://your-archive-bucket/your-prefix/ --recursive --storage-class GLACIER_IR
进阶:过滤特定文件归档
如果不需要归档前缀下的所有文件,还可以结合--include和--exclude参数来过滤,比如只归档.csv格式的文件:
aws s3 mv s3://your-bucket/data/ s3://your-bucket/data/ --recursive --storage-class GLACIER --include "*.csv" --exclude "*"
补充说明
--storage-class可选值有多个:GLACIER(标准归档)、GLACIER_IR(即时检索归档)、DEEP_ARCHIVE(深度归档),你可以根据自己的检索时效和成本需求选择。- 之所以你在
s3 mv文档里没找到明确的示例,是因为这个操作本质是同桶内的存储类转换,文档里更多侧重跨路径/跨桶的移动,但加上--storage-class参数后,就可以实现归档的效果了。
内容的提问来源于stack exchange,提问作者SwissNavy




