考虑到我有一个S3桶,里面有~900K的图像,我想知道从S3将它们下载到我的服务器上需要多长时间。
带——dryrun选项的同步命令会和不带——dryrun的同步命令花费相同的时间吗?如果是,它是如何工作的-图像下载,但从来没有推到本地目录?我也会产生成本吗?
谢谢。
使用——dryrun选项运行sync命令与不使用——dryrun选项花费的时间相同吗?
不,带--dryrun
的命令运行时间更短。sync
命令包括"check"并"完成实际的上传/下载工作"。
"check">比较本地对象和远端对象的元数据,判断对象是否需要同步。
"正在进行实际的上传/下载工作">表示针对S3的PUT或GET HTTP请求。
因此,使用上面的类比,你可以认为
- sync with
--dryrun
= "check"> - 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请求的成本。