我正在尝试让aws cli在ec2实例上将文件从s3移动到ebs。我遇到的问题是aws cli中没有“move”命令。如果有的话,这将使我的生活变得更加轻松。
从逻辑角度来看,我需要创建一个脚本来复制s3存储桶中的数据(s3:// bucket_name / AWSLogs / ...),然后删除它刚刚复制的文件。我知道我可以设置Lifecycle片段来使数据到期,但是如果将数据从s3复制到ebs的脚本没有运行,我不想丢失数据。
AWS CLI支持递归副本并删除,但是我需要使用某种类型的FOR命令来执行带有文件名变量的“aws s3 cp”命令,然后使用相同的文件名执行“aws s3 rm”。我已经搜遍过,我不知道任何存在的工具/脚本。 IANAP,所以我不知道如何将它移动到python boto脚本中,我只是希望有一个简单的方法来使用bash shell脚本。任何帮助。感谢。
答案 0 :(得分:0)
我建议使用s3cmd来执行此任务。 s3cmd基于boto并支持从/向S3同步目录。在这种情况下,您将获得可靠的同步以及机器上执行s3cmd的本地路径。
例如:
$ mkdir /home/user/logs/
$ s3cmd sync s3://org.example.mybucket/ /home/user/logs/
之后唯一的缺陷是s3cmd sync
在将源文件同步到本地文件系统后没有参数来删除源文件。为此,您仍然需要一个脚本来迭代同步到本地磁盘的文件并调用例如
$ s3cmd del s3://org.example.mybucket/log.txt
因此,如果我们假设您的同步存储桶中没有子目录,则此脚本应该可以解决这个问题:
#!/bin/bash
BUCKET='org.example.mybucket'
TARGET='/home/user/logs/'
# Ensure the directory is created
mkdir -p ${TARGET}
# Sync files from bucket
s3cmd sync s3://${BUCKET}/ ${TARGET}
# Iterate files and delete from bucket
for filename in ${TARGET}*; do
s3cmd del s3://${BUCKET}/$(basename ${filename})
done
请小心,因为我刚从脑中编写脚本而未进行测试。所以它可能包含错误......