【问题标题】:'tLooking to download AWS ELB logs from s3 and remove them'tLooking 从 s3 下载 AWS ELB 日志并删除它们
【发布时间】:2014-07-05 18:19:58
【问题描述】:

我正在尝试让 aws cli 将文件从 s3 移动到 ec2 实例上的 ebs。我遇到的问题是 aws cli 中没有“移动”命令。如果有的话,我的生活会轻松很多。

从逻辑的角度来看,我需要创建一个脚本,从 s3 存储桶 (s3://bucket_name/AWSLogs/...) 复制数据,然后删除它刚刚复制的文件。我知道我可以设置 Lifecycle 片段来使数据过期,但万一将数据从 s3 复制到 ebs 的脚本不运行,我不想丢失数据。

AWS CLI 支持递归复制和删除,但我需要某种类型的 FOR 命令来执行带有文件名变量的“aws s3 cp”命令,然后使用相同的文件名执行“aws s3 rm”。我已经搜索过了,我不知道任何为此存在的工具/脚本。 IANAP,所以我不知道如何将它移动到 python boto 脚本中,我只是希望有一种简单的方法可以使用 bash shell 脚本来完成。任何帮助。谢谢。

【问题讨论】:

    标签: bash amazon-web-services amazon-ec2 amazon-s3 aws-cli


    【解决方案1】:

    我建议使用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
    

    请小心,因为我只是在没有测试的情况下从脑海中编写了脚本。所以它可能包含一个错误......

    【讨论】:

      猜你喜欢
      • 2018-11-02
      • 2017-05-25
      • 1970-01-01
      • 2015-05-14
      • 1970-01-01
      • 2019-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多