2016-09-28 3 views
2

CI의 빌드 과정의 마지막 단계로, 나는 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' 사용)로 호출하면 제대로 작동하지만 두 번째 셸 스크립트와 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'> 

개인 요청이 작동하지만 함께 실행하면 이후 'Access Denied'오류 메시지와 함께 모두 실패합니다. 이것은 경합 조건의 오류라고 가정하지만이 문제를 어떻게 피할 수 있습니까?

+0

내 스크립트에'--debug' 플래그를 추가했습니다. 업로드가 더 안정적으로 작동하는 것처럼 보입니다. 그게 왜 차이가 나는가? –

+0

디버그를 사용할 때 문제와 관련된 다른 정보를 발견 했습니까? – jbird

답변

1

이 문제는 해결 된 것으로 보입니다. 스크립트를 실행하는 컴퓨터 (빌드 에이전트)가 요청을 작성할 때 두 개의 서로 다른 연결을 사용 중이었고 각 연결마다 자체 외부 IP 주소 (WiFi 및 유선 연결)가있었습니다. 이러한 IP 중 AWS 액세스 정책에 의해 허용되어 업로드의 무작위성 및 예측 불가능 성을 초래합니다.

관련 문제