我们在专用S3存储桶上有大约400,000个文件,这些文件是入站/出站呼叫记录。这些文件具有一定的模式,可以让我搜索入站和出站的数字。请注意,这些调用位于 Glacier 存储类
上使用AWS CLI,我可以搜索此存储桶并grep我需要的文件。我现在要做的是启动S3恢复工作以加快检索(所以~1-5分钟恢复时间),然后可能30分钟后运行命令下载文件。
到目前为止我的努力:
aws s3 ls s3://exetel-logs/ --recursive | grep .*042222222.* | cut -c 32-
检索大约200个文件的密钥。我不确定如何继续下一步,因为aws s3 cp
不适用于存储类中的任何对象。
干杯,
答案 0 :(得分:2)
AWS CLI有两个单独的S3命令:s3
和s3api
。 s3
是具有有限功能的高级抽象,因此要恢复文件,您必须使用s3api
提供的其中一个命令:
aws s3api restore-object --bucket exetel-logs --key your-key
如果您之后想要复制文件,但希望确保只复制从Glacier恢复的文件,则可以使用以下代码段:
for key in $(aws s3api list-objects-v2 --bucket exetel-logs --query "Contents[?StorageClass=='GLACIER'].[Key]" --output text); do
if [ $(aws s3api head-object --bucket exetel-logs --key ${key} --query "contains(Restore, 'ongoing-request=\"false\"')") == true ]; then
echo ${key}
fi
done
答案 1 :(得分:0)
您是否考虑过使用AWS CLI的高级语言包装器?它将使这些类型的任务更容易集成到您的工作流程中。我更喜欢Python实现(Boto 3)。 Here是如何从S3存储桶下载所有文件的示例代码。