使用和不使用——dryrun选项运行s3 sync的时间差



考虑到我有一个S3桶,里面有~900K的图像,我想知道从S3将它们下载到我的服务器上需要多长时间。

带——dryrun选项的同步命令会和不带——dryrun的同步命令花费相同的时间吗?如果是,它是如何工作的-图像下载,但从来没有推到本地目录?我也会产生成本吗?

谢谢。

使用——dryrun选项运行sync命令与不使用——dryrun选项花费的时间相同吗?

不,带--dryrun的命令运行时间更短。sync命令包括"check"并"完成实际的上传/下载工作"。

"check">比较本地对象和远端对象的元数据,判断对象是否需要同步。

"正在进行实际的上传/下载工作">表示针对S3的PUT或GET HTTP请求。

因此,使用上面的类比,你可以认为

  1. sync with--dryrun= "check">
  2. sync without--dryrun= "check"+ "正在进行实际的上传/下载工作">

您可以使用AWS CLI提供的--debug标志来验证我所说的内容。下面是我用来检查这一点的最简单的命令:

aws s3 sync --dryrun . s3://<your-bueket-name> --debug 2>&1 | grep urllib3

输出应该只包含列出bucket中S3对象的HTTP请求。例如,

2021-01-31 16:28:51,635 - MainThread - urllib3.connectionpool - DEBUG - https://<your-bueket-name>.s3.us-east-1.amazonaws.com:443 "GET /?list-type=2&prefix=&encoding-type=url HTTP/1.1" 200 None

如果您仔细阅读sync命令的man页面,您将注意到,当您使用--dryrun执行sync时,对象的实际内容并没有下载/上传。sync实用程序使用列表对象API的响应来执行"检查"。

sync命令通过将本地文件上传到s3,将指定前缀和桶下的对象同步到本地目录下的文件。如果本地文件的大小与s3对象的大小不一致,本地文件的最后修改时间比s3对象的最后修改时间短,或者指定的桶和前缀下不存在本地文件,则需要上传本地文件。在此例中,用户将桶mybucket同步到本地当前目录。本地当前目录包含test.txt和test2.txt两个文件。桶mybucket不包含任何对象

回答您的后续问题:

如果是,它是如何工作的-图像下载,但从未推到本地目录?

我是否也会产生成本?

是的,您将产生LIST请求的成本。

最新更新