代码之家  ›  专栏  ›  技术社区  ›  101010

更有效地使用aws s3同步?

  •  0
  • 101010  · 技术社区  · 5 年前

    最近,我们注意到美国焊接学会的账单比平时高。这是由于添加了一个 aws s3 sync 任务分配到我们的常规构建过程中。构建过程会生成大约3000个文件。构建完成后,我们运行 aws s3同步 上传 全体 放进桶里。问题是这在金钱上是昂贵的。每次上传都要花费我们大约2美元(我们认为),加起来每个月的账单就让人大吃一惊。

    除1或2个文件外,所有这些文件实际上都会随着版本的变化而变化。其余的都是一样的。然而 aws s3同步 看到他们都改变了并上传了全部内容。

    文件上说 aws s3同步 比较文件的上次修改日期和字节大小,以确定是否应上载。构建服务器每次都会创建所有这些全新的文件,因此上次修改的日期始终会更改。

    我想做的是让它计算每个文件的校验和或散列,然后使用散列来比较文件。 Amazon s3 already has the etag field which is can be an MD5 hash of the file. 但是 aws s3同步 命令不使用etag。

    有没有办法使用etag?还有别的办法吗?

    最终的结果是,我只想上传1或2个实际不同的文件(并节省巨大的成本)

    0 回复  |  直到 5 年前
        1
  •  5
  •   Madan Bhandari    5 年前

    这个 aws s3 sync 命令有一个 --size-only 参数

    从…起 aws s3 sync options :

    --仅限尺寸 (布尔)使每个键的大小成为决定是否从源同步到目标的唯一标准。

    如果使用相同的内容更新所有文件,则可能避免复制这些文件。

        2
  •  4
  •   Joshua G. Edwards    5 年前

    作为s3同步或cp的替代方案,您可以使用s5cmd

    https://github.com/peak/s5cmd

    如果大小和日期不同,它可以同步文件,并且速度高达4.6gb/s

    sync命令的示例:

    AWS_REGION=eu-west-1 /usr/local/bin/s5cmd -stats cp -u -s --parents s3://bucket/folder/* /home/ubuntu
    
        3
  •  1
  •   guest    5 年前

    S3每1000次PUT请求收取0.005美元( doc ),所以 极其 上传3000个文件不太可能让你每次构建花费2美元。也许每个2美元 白天 如果您每天运行50-100次构建,但这仍然不多。

    如果您真的要为每个构建支付那么多的费用,那么您应该启用CloudTrail事件,并查看实际编写了那么多的内容(就此而言,您可能已经创建了某种递归CloudTrail事件日志)。

    最终的结果是,我只想上传1或2个实际不同的文件

    这些文件是您的构建生成的工件吗?如果是,为什么不添加一个显式复制它们的构建步骤呢?

        4
  •  0
  •   frank    4 年前

    我遇到的问题是在--include选项中使用通配符*。使用一个通配符很好,但是当我添加第二个*时,例如 /日志。 ,看起来sync试图下载所有要比较的内容,这占用了大量的CPU和网络带宽。