홈>
디지털 자산 관리 시스템 인 앱이 있습니다. 썸네일을 표시합니다. https와 같은 썸네일을 AWS S3 사전 서명 URL과 함께 제공하도록 설정했습니다. : //docs.aws.amazon.com/AmazonS3/latest/dev/ShareObjectPreSignedURLJavaSDK.html . 이 코드는 요청을 통해 처리되는 항목 수를 변경할 때까지 작동합니다. 응용 프로그램에 25, 50, 100, 200을 선택할 수 있습니다. 100 또는 200을 선택하면 "오류 : com.amazonaws.AmazonServiceException : 너무 많은 요청 (서비스 : null;상태 코드 : 429;오류 코드 : null)과 함께 프로세스가 실패합니다. ;요청 ID : null) "
현재 프로세스는 다음과 같습니다. 검색을 수행하고 해당 객체에 대해 미리 서명 된 URL을 반환하는 메소드를 통해 각 객체 키를 실행합니다.
ContainerCredentialsProvider를 통해 자격 증명을 가져올 수있는 Elastic Container Service를 통해이 애플리케이션을 실행합니다.
검토를위한 관련 코드 :
String s3SignedUrl(String objectKeyUrl) {
// Environment variables for S3 client.
String clientRegion = System.getenv("REGION");
String bucketName = System.getenv("S3_BUCKET");
try {
// S3 credentials get pulled in from AWS via ContainerCredentialsProvider.
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withRegion(clientRegion)
.withCredentials(new ContainerCredentialsProvider())
.build();
// Set the pre-signed URL to expire after one hour.
java.util.Date expiration = new java.util.Date();
long expTimeMillis = expiration.getTime();
expTimeMillis += 1000 * 60 * 60;
expiration.setTime(expTimeMillis);
// Generate the presigned URL.
GeneratePresignedUrlRequest generatePresignedUrlRequest =
new GeneratePresignedUrlRequest(bucketName, objectKeyUrl)
.withMethod(HttpMethod.GET)
.withExpiration(expiration);
return s3Client.generatePresignedUrl(generatePresignedUrlRequest).toString();
} catch (AmazonServiceException e) {
throw new AssetException(FAILED_TO_GET_METADATA, "The call was transmitted successfully, but Amazon " +
"S3 couldn't process it, so it returned an error response. Error: " + e);
} catch (SdkClientException e) {
throw new AssetException(FAILED_TO_GET_METADATA, "Amazon S3 couldn't be contacted for a response, or " +
"the client couldn't parse the response from Amazon S3. Error: " + e);
}
}
이 부분은 우리가 아이템을 처리하는 부분입니다 :
// Overwrite the url, it's nested deeply in maps of maps.
for (Object anAssetList : assetList) {
String assetId = ((Map) anAssetList).get("asset_id").toString();
if (renditionAssetRecordMap.containsKey(assetId)) {
String s3ObjectKey = renditionAssetRecordMap.get(assetId).getThumbObjectLocation();
((Map) ((Map) ((Map) anAssetList)
.getOrDefault("rendition_content", new HashMap<>()))
.getOrDefault("thumbnail_content", new HashMap<>()))
.put("url", s3SignedUrl(s3ObjectKey));
}
}
모든 안내를 부탁드립니다. AWS 측에서 간단하고 희망적으로 구성 할 수있는 솔루션을 원할 것입니다. 그렇지 않으면 지금 당장 URL을 일괄 생성하는 프로세스를 추가하려고합니다.
- 답변 # 1
관련 자료
- 요청을 사용하여 Python의 curl에서 API에서 데이터 가져 오기
- iText 7 및 Java 생성 pdf를 사용하면 긴 영어 단어를 래핑 할 수 없습니다
- python - 요청을 사용하여 웹 페이지에서 일부 필드를 스크랩 할 수 없습니다
- python - Django 템플릿에서 개체 목록 사용
- python - MetPy를 사용하여 Countour Plot 생성 문제
- powershell - 게시 설정 파일을 사용하여 Azure 개체 만들기
- javascript - 객체 배열을 사용하여 데이터를 가져오고 표시하는 방법은 무엇입니까?
- arrays - 자바에서 객체 생성 및 메소드 호출을위한 변수 사용
- c# - 상속하는 클래스에서 참조하는 객체에 대한 속성을 사용하면 이점이 있습니까?
- javascript - 여러 요청을 만들고 데이터 개체를 새 배열에 저장하는 방법
- javascript - Objectentries를 사용하여 객체를 반복합니다
- javascript - map 또는 filter Reactjs를 사용하여 위치에있는 객체 목록 변경
- javascript - Mongoose를 사용하여 특정 개체 배열을 찾고 그 안에있는 모든 개체 만 가져옵니다
- javascript - redux를 사용하여 중첩 된 개체를 텍스트 입력에 올바르게 바인딩하는 방법
- android - Paging 3을 사용하여 많은 API 요청을 처리하는 방법
- javascript - 개체의 여러 값을 사용하여 개체 배열 필터링
- javascript - 개체 값을 사용하여지도 개체를 정렬하는 방법
- SFV2를 사용하여 forge 뷰어에서 특정 개체 만로드하려면 어떻게해야합니까?
- c++ - OpenMP를 사용하여 스레드로부터 안전하지 않은 개체의 for 루프 병렬화
- Python 요청을 사용할 때 잘못된 URL
관련 질문
- IAM 정책은 S3 객체 나열을 명시적으로 허용하지 않지만 이 JavaScript를 사용하여 여전히 나열할 수 있습니다.
- 특정 위치에서 CloudFront 전송이 느림
- java : Docker와 함께 AWS 사용: 리전 공급자 체인을 통해 리전을 찾을 수 없음
- AWS 배포 시 기본 리전 변경
- Ruby: Aws::S3::Presigner를 사용하여 PUT을 S3로 보낼 때 ACL 설정
- 다음 AWS CLI 명령에 해당하는 boto3은 무엇입니까?
- php : 검정색 배경 aws s3 버킷 png 이미지 업로드 방지
- AWS S3에서 전체 비디오를 한 번에 다운로드하십시오. 현재 빨리 감기할 수 없습니다.
- AWS S3 버킷의 하위 폴더 -버킷에 대한 명명 제한이 폴더에도 적용됩니까?
- 완전히 별도의 AWS 계정을 만드는 것이 더 낫습니까? 아니면 별도의 개발 환경을 갖기 위해 별도의 IAM 사용자를 만드는 것이 더 낫습니까?
문제는 사전 서명 된 URL 생성과 관련이 없습니다. 이는 서비스와의 상호 작용없이 수행되므로 속도 제한이 가능한 방법은 없습니다. 사전 서명 된 URL은 HMAC-SHA 알고리즘을 사용하여 자격 증명을 소유 한 엔터티가 특정 요청을 승인했음을 서비스에 증명합니다. HMAC-SHA의 단방향 (비가 역적) 특성으로 인해 서비스 상호 작용없이 코드가 실행중인 시스템에서 이러한 URL을 완전히 생성 할 수 있습니다.
그러나 자격 증명을 반복적으로 가져 오는 것이 예외의 실제 원인 일 수 있으며 불필요하게 반복해서 수행하는 것 같습니다.비용이 많이 드는 작업입니다 :
이를 다시 호출 할 때마다 자격 증명을 다시 가져와야합니다. 그것은 실제로 당신이 치는 한계입니다.
와이즈 비즈 건설 한 번만
s3client
를 리팩토링 해당 객체가 전달 될 것으로 예상하므로 재사용 할 수 있습니다.s3SignedUrl()
를 해결하는 것 외에도 눈에 띄는 성능 향상이 나타납니다. 오류.429