[java] AWS 오류 메시지 : 현재이 리소스에 대해 충돌하는 조건부 작업이 진행 중입니다

이 오류가 간헐적으로 발생합니다.

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. 버킷 생성-기본적으로 미국 리전으로 이동 (AWSCLI 사용)

  2. 버킷은 EU 지역으로 이동하여 삭제해야합니다 (AWS 콘솔 사용).

  3. (몇 분 후) EU 지역을 지정하여 버킷을 만들려고했습니다.

3 단계에서 AWS 콘솔에 질문 제목의 오류 메시지가 표시되었습니다.

따라서 미국의 버킷이 삭제되었지만 시간이 걸리는 동기화 프로세스가있을 수 있습니다. 그리고 몇 시간을 기다리면 버킷 이름을 다시 만들어 사용할 수있게 되었으면합니다. 이번에는 적절한 (EU) 리전입니다.

FIX :-편집 : 약 1 시간 후 (EU 지역) 버킷 생성 시도가 성공했습니다.


답변

구글 에서이 스레드를 우연히 발견 한 다른 모든 사람들에게 1 번째 로이 오류 메시지가 검색됩니다.

버킷을 삭제 한 경우 새 리전에서 다시 생성하려면 이 백그라운드 동기화가 완료 될 때까지 “수동으로”기다리지 말고 작은 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’에 따라) “버킷 생성”작업을 다시 시도하고 가능한 한 빨리 생성하여 사용자가 실수로 버킷 이름을 도용 할 수 없도록합니다.

그것이 도움이되기를 바랍니다 🙂


답변

예제의 요청은 버킷을 생성하는 것입니다. 버킷을 너무 많이 만들거나 버킷을 교체하려고하면 상태가 좋지 않습니다.

계정에 대한 버킷 수는 100 개로 제한됩니다 ( 여기 참조 ). 편집 : 이제이 한계는 “소프트 한계”이며 필요한 경우 증가시킬 수 있습니다.

또한 버킷을 생성하는 데 시간과 시간이 소요됩니다.

… 애플리케이션의 고 가용성 코드 경로에서 버킷을 생성하거나 삭제하는 호출은 적합하지 않습니다 …

버킷을 한 번 생성 한 다음 기존 버킷 (또는 단일 버킷)에 원하는 수의 객체를 넣을 수 있습니다.

어쨌든, 지금 실패한 시스템으로 작업 할 때, 그러한 오류를 수신 할 때 오류를 처리하고 프로세스 속도를 늦출 수 있어야합니다. 자세한 내용은 AWS Docs를 참조하십시오 .


답변

이 오류는 일반적으로 버킷이 삭제되고 이전 버킷과 동일한 이름으로 새 버킷이 생성 될 때 발생합니다.

같은 이름으로 새 버킷을 만들 수있을 때까지 일정 시간 기다려야한다고 생각합니다.


답변

간단하고 간단합니다. 새 버킷 이름을 변경하거나 1 시간 동안 기다립니다.


답변

계정에 100 개가 넘는 버킷이 이미있는 경우에도이 메시지가 나타납니다. 소프트 버킷은 100 개로 제한됩니다.


답변

버킷 이름을 변경하거나 기다리십시오. 나는 30 분도 채되지 않았다. 이름을 변경할 필요가 없었으며 이름을 변경할 때 변경할 수 없었습니다. 호스팅하려는 정적 웹 사이트의 기존 도메인 이름과 일치해야했습니다. 어쨌든 30 분 안에 자동으로 만들어졌습니다.