致命错误:调用 HeadObject 操作时发生错误(404):键“”不存在

Posted

技术标签:

【中文标题】致命错误:调用 HeadObject 操作时发生错误(404):键“”不存在【英文标题】:fatal error: An error occurred (404) when calling the HeadObject operation: Key " " does not exist 【发布时间】:2021-09-03 08:21:15 【问题描述】:

这是我的设置:

我使用的是运行自定义 Docker 映像的 AWS Batch startup.sh 文件是一个入口点脚本,它读取文本文件的第 n 行并将其从 s3 复制到 docker。 例如,如果 .txt 文件的第一行是“Startup_00001/Startup_000018 Startup_000019”,则 bash 脚本会读取这一行,并使用 for 循环将它们复制过来。 这是我的 bash 脚本的一部分:
STARTUP_FILE_S3_URL=s3://cmtestbucke/Config/
Startup_FileNames=$(sed -n $LINEp file.txt)
for i in $Startup_FileNames
do
        Startup_FileURL=$STARTUP_FILE_S3_URL$i
        echo $Startup_FileURL
        aws s3 cp $Startup_FileURL /home/CM_Projects/ &
done
这是 aws 的日志输出:

s3://cmtestbucke/Config/Startup_000017 s3://cmtestbucke/Config/Startup_000018 s3://cmtestbucke/Config/Startup_000019 已完成 727 字节/727 字节 (7.1 KiB/s),剩余 1 个文件下载:s3://cmtestbucke/Config/Startup_000018 到 Data/Config/Startup_000018 已完成 731 字节/731 字节 (10.1 KiB/s),剩余 1 个文件下载:s3://cmtestbucke/Config/Startup_000017 到 Data/Config/Startup_000017 致命错误:*调用 HeadObject 操作时发生错误 (404):键 “Config/Startup_000019”不存在。*

我的 s3 存储桶肯定包含对象 s3://cmtestbucke/Config/Startup_000019 我注意到无论文件名如何都会发生这种情况。最后一次迭代总是给出这个错误。 我使用相同的 aws 命令在本地测试了这个 bash 逻辑。它会复制所有 3 个文件。

谁能帮我弄清楚这里出了什么问题?

【问题讨论】:

看起来最后一项的名称中可能有一个尾随空格。你能检查一下这是否是根本原因吗? @OleksiiDonoha 没有空格。然而,这让我想到了 EOL,结果发现它是 windows(CR LF)。我将其更改为 unix (LF),因为我运行的 docker 映像是 Ubuntu。现在它起作用了。感谢您的帮助。 【参考方案1】:

问题在于文本文件的 EOL。它被设置为 Windows(CR LF)。 docker 映像正在运行导致错误的 Ubuntu。我将 EOL 更改为 Unix(LF)。问题解决了。

【讨论】:

以上是关于致命错误:调用 HeadObject 操作时发生错误(404):键“”不存在的主要内容,如果未能解决你的问题,请参考以下文章

ClientError:调用 HeadObject 操作时发生错误(403):尝试跨帐户复制时禁止

Django/AWS - 调用 HeadObject 操作时发生错误(403):禁止

AWS BOTO3 S3 python - 调用 HeadObject 操作时发生错误(404):未找到

AWS Lamda:ClientError:调用 HeadObject 操作时发生错误(403):禁止

AWS lambda:调用HeadObject操作时发生错误(404):找不到

调用 HeadObject 操作时发生客户端错误 (400):Bad Request Completed 1 part(s) with ... file(s)