【问题标题】:fatal error: An error occurred (404) when calling the HeadObject operation: Key " " does not exist致命错误:调用 HeadObject 操作时发生错误(404):键“”不存在
【发布时间】: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 ${LINE}p 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。现在它起作用了。感谢您的帮助。

标签: bash amazon-web-services amazon-s3


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2022-11-11
    • 2017-12-07
    • 2017-12-19
    • 2020-06-07
    • 2018-03-20
    • 2020-09-14
    • 1970-01-01
    • 2022-01-08
    • 2021-05-06
    相关资源
    最近更新 更多