如何为"aws s3 cp"命令设置重试?



我有一个 jenkins 作业,它将一个非常小的 bash 文件(小于 <1mb(上传到 s3 存储桶。它大部分时间都有效,但偶尔会失败并出现以下错误:

upload failed: build/xxxxxxx/test.sh The read operation timed out

上述错误直接来自 aws cli 操作。我在想,这可能是一些网络问题,或者当时磁盘读取操作不可用。如果发生这种情况,如何设置重试的选项?另外,我可以增加超时吗?我搜索了 cli 文档,用谷歌搜索并查看了"aws s3api",但没有看到任何这样的选项。

如果不存在这样的选项。那么,人们如何解决这个问题?包装命令以检查错误代码并重新尝试?

最终围绕 s3 命令编写包装器以重试并在最后一次尝试时获取调试堆栈。可能会帮助人们。

# Purpose: Allow retry while uploading files to s3 bucket
# Params:
#   $1 : local file to copy to s3
#   $2 : s3 bucket path
#   $3 : AWS bucket region
#
function upload_to_s3 {
n=0
until [ $n -gt 2 ]
do
if [ $n -eq 2 ]; then
aws s3 cp --debug $1 $2 --region $3
return $?
else
aws s3 cp $1 $2 --region $3 && break
fi
n=$[$n+1]
sleep 30
done
}

AWS CLI 文档建议设置 env var:export AWS_MAX_ATTEMPTS=3

完整文档在这里

最新更新