2016-09-28 216 views
2

作爲一個CI構建過程的最後一步,我使用下面的shell腳本上傳一次單個文件到S3鬥:拒絕訪問錯誤AWS S3

#!/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'> 

Individual請求正常工作,但在一起運行後,所有請求都會失敗,並顯示相同的「拒絕訪問」錯誤消息。我認爲這是一種競爭條件類型的錯誤,但我應該如何/能夠避免這個問題?

+0

我已將'--debug'標誌添加到我的腳本中,並且這似乎使上傳更加可靠。任何理由爲什麼會有所作爲? –

+0

您是否注意到啓用調試時可能與問題相關的其他任何信息? – jbird

回答

1

此問題似乎已解決 - 運行腳本的機器(構建代理)在提出請求時使用了兩個不同的連接,並且這些連接各自都有自己的外部IP地址(WiFi和有線連接)。只有一個的這些IP被AWS訪問策略允許,導致上傳的隨機性和不可預測性。