2016-09-28 10 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; 

このスクリプトを1つのファイル(コマンドsh upload.sh 'filename' 'path'を使用)で呼び出すと正常に機能しますが、2回目のシェルスクリプトと、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

私はスクリプトに '--debug'フラグを追加しました。これは、アップロードがより確実に動作するように思えます。それが違いを生む理由は何ですか? –

+0

デバッグが有効になっているときに問題に関連する他の情報がありましたか? – jbird

答えて

1

この問題は、スクリプトを実行しているマシン(ビルドエージェント)が要求を行う際に2つの異なる接続を使用していて、それらの接続がそれぞれ独自の外部IPアドレス(WiFiおよび有線接続)これらのIPのうちAWSアクセスポリシーによって許可されているため、アップロードのランダム性と予期しない可能性があります。

関連する問題