作为CI构建过程的最后一步,我使用以下shell脚本将一个文件一次上传到S3 Bucket:
#!/usr/bin/env bash
echo "Uploading the file: "$1
aws s3 cp "$1" "s3://BUCKET_NAME/$2$1" --grants read=uri=http://acs.amazonaws.com/groups/global/AllUsers
exit;
当我使用单个文件调用此脚本时(使用命令sh upload.sh 'filename' 'path'
)它可以正常工作,但是当我快速连续两次调用它时,第二个shell脚本和其他调用aws
命令行工具失败并显示错误:
An error occurred (AccessDenied) when calling the CreateMultipartUpload operation: Access Denied
Parameter validation failed:
Invalid type for parameter UploadId, value: None, type: <type 'NoneType'>, valid types: <type 'basestring'>
请求单独运行,但是当一起运行时,后面的请求都会失败并显示相同的“拒绝访问”错误消息。我认为这是一种竞争条件的错误,但我应该如何/可以避免这个问题?
答案 0 :(得分:1)
此问题似乎已得到解决 - 运行脚本的计算机(构建代理)在发出请求时使用了两个不同的连接,并且每个连接都有自己的外部IP地址(WiFi和有线连接)。 AWS Access Policy允许这些IP,导致上传的随机性和不可预测性。