AWSエラーメッセージ:競合する条件付き操作が現在このリソースに対して進行中です


181

このエラーが断続的に発生します。

私はjava aws sdkを使用し、数万を超える小さなファイルをs3にロードするプログラムを持っています。このエラーが断続的に表示されます。

インターネットでクイック検索を行った後、役立つ回答が見つかりませんでした。

呼び出し側プログラムはシングルスレッドであることに注意してください。基本的なaws java sdkはワーカースレッドを使用しているようです。

Status Code: 409, AWS Service: Amazon S3, AWS Request ID: 75E16E8DE2193CA6, AWS Error Code: OperationAborted, AWS Error Message: A conflicting conditional operation is currently in progress against this resource. Please try again., S3 Extended Request ID: 0uquw2YEoFamLldm+c/p412Lzd8jHJGFBDz3h7wN+/4I0f6hnGLkPMe+5LZazKnZ
    at com.amazonaws.http.AmazonHttpClient.handleErrorResponse(AmazonHttpClient.java:552)
    at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:289)
    at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:170)
    at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:2648)
    at com.amazonaws.services.s3.AmazonS3Client.createBucket(AmazonS3Client.java:578)
    at com.amazonaws.services.s3.AmazonS3Client.createBucket(AmazonS3Client.java:503)

1
オブジェクトをS3に入れてすぐに読み取ろうとしていますか?
jamieb

@jamieb、実際にはいいえ、現時点ではありません。
user1172468

1
答えがあったらいいのに。同じキーを続けて書き換えようとしていますか?S3は、「結果的に整合性のある」モデルに基づいて構築されており、PUTが安定するまでに時間が必要です。
jamieb

@jamieb、脳のサイクルを費やしてくれてありがとうございますが、Guyによって提供された答えは正しいと思います。私のコードでは、バケットの作成を再試行していると思います-正常に失敗することを期待しています-それは99.99%の時間のようで、時々このエラーをスローします。もう一度、私を助けてくれてありがとう。元気!
user1172468

フォローアップありがとうございます。幸運を!
jamieb

回答:


464

私が次のことをしたとき、私は同じエラーメッセージを受け取りました:

  1. バケットを作成しました-デフォルトでUSリージョンに移動しました(AWSCLIを使用)

  2. バケットはEUリージョンに移動して削除されます(AWSコンソールを使用)

  3. (数分後)EUリージョンを指定してバケットを作成しようとしました

ステップ3で、AWSコンソールに質問のタイトルからのエラーメッセージが表示されました。

したがって、USのバケットは削除されたと思いますが、同期プロセスがいくつかあり、時間がかかっている可能性があります。そして、私は、数時間待って、バケット名が再び作成できるようになることを願っています-今回は適切な(EU)リージョンで。

修正:-編集:約1時間後、(EUリージョンで)バケットを作成する試みが成功しました。


4
私はちょうど同じ状況に遭遇しました。1時間以内にバケットを作成できる場合は、ポストバックします。
AJB 2014年

27
確認できます。所要時間は約1.5時間です。その間、誰かがバケット名をスクープしないという保証はありませんが、妥当な期間内に、運がよければ、それを取り戻すことができます。
AJB 2014年

1
@janに同意するこれを解決するには、新しい名前で新しいバケットを作成します。新しいバケットに名前を付けるときに、削除されたバケットの名前を使用しないでください。
Dinesh Sunny

5
私にとっては70分もかかりませんでした。
offby1

4
Amazonによると、forums.aws.amazon.com / thread.jspa
threadID

37

グーグルからこのスレッドに出くわした他のすべての人のために、最初にこのエラーメッセージを検索した結果:

バケットを削除した場合、新しいリージョンで再作成するには、このバックグラウンド同期が完了するまで「手動」で待機せず、代わりに小さなbashスクリプトを実行して、必要なバケットの作成を5秒ごとに再試行します。

例:

#!/bin/bash 
RESULT=2 
until [  $RESULT -eq 0 ]; do
    aws s3 mb s3://your.bucket.name --region us-west-2
    RESULT=$?
    sleep 5 
done 
echo "Bucket created!"

数秒ごと( 'sleep'に依存)に「バケットの作成」操作を再試行し、可能な限りすぐにそれを作成します。そのため、誤ってバケット名を盗むことはできません:)

それが役に立てば幸い :)


1
これをありがとう!私のインスタンスでは、aws構成で領域が既に定義されており、スクリプトを実行しているため、次のエラーが発生しましたUnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 17: ordinal not in range(128)。解決策は、--regionフラグを削除することでした。
MagentoAaron

23

この例のリクエストは、バケットを作成することです。作成するバケットが多すぎるか、バケットを置き換えようとすると、正常ではありません。

アカウントには10​​0バケットの制限があることに注意してください(ここを参照)。編集:この制限は「ソフト制限」であり、必要に応じて増やすことができます。

また、バケットの作成には時間がかかり、次のことに注意してください。

...アプリケーションの高可用性コードパスでバケットの作成または削除の呼び出しを行うことは適切ではありません...

一度バケットを作成してから、既存のバケット(または単一のバケット)に好きなだけオブジェクトを配置できます。

とにかく、たまに失敗することがあるシステムで作業するときは、エラーを処理し、そのようなエラーを受け取ったときにプロセスを遅くできるはずです。詳細については、AWS Docsをご覧ください。


11

このエラーは通常、バケットが削除され、新しいバケットが古いバケットと同じ名前で作成されたときに発生します。

同じ名前で新しいバケットを作成できるようになるまで、一定の時間待つ必要があると思います。


8

シンプルでわかりやすい:新しいバケット名を変更するか、1時間待ちます。


0

アカウントにすでに100を超えるバケットがある場合にも、このメッセージが表示されます。100バケットのソフト制限があります。


-1

バケット名を変更するか、お待ちください。私は30分も待たなかった。名前を変更する必要はなく、設定されているため変更できませんでした。ホストしようとしている静的なWebサイトの既存のドメイン名と一致する必要がありました。とにかく、30分未満で自動的に作成されました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.