S3 배치 작업 건 생성
Amazon S3 배치 작업을 사용하면 특정 Amazon S3 객체 목록에서 대규모 배치 작업을 수행할 수 있습니다. 이 섹션에서는 S3 배치 작업을 생성하는 데 필요한 정보와 CreateJob
요청의 결과를 설명합니다. 또한 Amazon S3 콘솔, AWS Command Line Interface(AWS CLI) 및 AWS SDK for Java를 사용하여 배치 작업 생성 지침도 제공합니다.
S3 배치 작업을 생성할 때 모든 작업 또는 실패한 작업에 대한 완료 보고서를 요청할 수 있습니다. 하나 이상의 작업이 성공적으로 호출되면 S3 배치 작업은 완료, 실패 또는 취소된 작업에 대한 보고서를 생성합니다. 자세한 내용은 예: S3 배치 작업 완료 보고서 단원을 참조하십시오.
다음 비디오에서는 Amazon S3 콘솔을 사용하여 배치 작업을 생성하는 방법에 대한 간단한 데모를 제공합니다.
배치 작업 요청 요소
S3 배치 작업 건을 생성하려면 다음 정보를 제공해야 합니다.
- 작업
-
매니페스트 내 객체에 대해 S3 배치 작업이 실행할 작업을 지정합니다. 각 작업 유형은 해당 작업과 관련된 파라미터를 허용합니다. 배치 작업을 사용하면 작업을 대량으로 수행함으로써 각 객체에 해당 작업을 하나씩 수행할 때와 같은 결과를 얻을 수 있습니다.
- 매니페스트
-
매니페스트는 S3 배치 작업에서 지정된 작업을 실행해야 하는 모든 객체의 목록입니다. 다음 방법을 사용하여 배치 작업 건의 매니페스트를 지정할 수 있습니다.
-
CSV 형식의 사용자 지정된 객체 목록을 수동으로 만듭니다.
-
기존 CSV 형식의 S3 Inventory를 사용한 데이터 카탈로그화 및 분석 보고서를 선택합니다.
-
작업을 생성할 때 지정한 객체 필터 기준에 따라 자동으로 매니페스트를 생성하도록 배치 작업에 지시합니다. 이 옵션은 Amazon S3 콘솔에서 생성하는 배치 복제 작업 또는 AWS CLI, AWS SDK 또는 Amazon S3 REST API를 사용하여 생성하는 작업 유형에 사용할 수 있습니다.
-
매니페스트를 지정하는 방법과 관계없이 목록 자체는 범용 버킷에 저장해야 합니다. 배치 작업은 디렉터리 버킷에서 기존 매니페스트를 가져올 수 없으며 생성된 매니페스트를 디렉터리 버킷에 저장할 수 없습니다. 하지만 매니페스트에 설명된 객체는 디렉터리 버킷에 저장할 수 있습니다. 자세한 내용은 디렉터리 버킷을 참조하세요.
-
매니페스트 내 객체가 버전이 지정된 버킷에 있는 경우, 객체의 버전 ID를 지정하면 배치 작업이 지정된 버전에서 실행됩니다. 버전 ID를 지정하지 않는 경우 배치 작업 시 객체의 마지막 버전에서 작업이 실행됩니다. 매니페스트에 버전 ID 필드가 포함된 경우, 매니페스트 내 모든 객체에 대한 버전 ID를 제공해야 합니다.
자세한 내용은 매니페스트 지정 단원을 참조하십시오.
- 우선 순위
-
작업 우선 순위를 사용하여 이 작업의 상대적 우선 순위를 계정에서 실행 중인 다른 작업에 표시합니다. 숫자가 높을수록 우선 순위가 높아집니다.
작업 우선 순위는 동일한 계정 및 리전의 다른 작업에 대해 설정된 우선 순위와 관련되어야만 의미가 있습니다. 사용자는 자신에게 적합한 번호 지정 시스템을 선택할 수 있습니다. 예를 들어 모든 복원(RestoreObject
) 작업에 1의 우선순위를, 모든 복사(CopyObject
) 작업에 2의 우선순위를, 모든 액세스 제어 목록(ACL) 교체(PutObjectAcl
) 작업에 3의 우선순위를 할당할 수 있습니다.
S3 배치 작업은 우선순위 번호에 따라 작업의 우선순위를 부여하며 다만 정확한 순서가 보장되지는 않습니다. 따라서 어떤 작업이 다른 작업보다 먼저 시작되거나 끝나도록 하기 위해 작업 우선순위를 사용해서는 안 됩니다. 정확한 순서가 필요한 경우 다음 작업을 시작하기 전에 하나의 작업이 완료될 때까지 기다려야 합니다.
- RoleArn
-
작업을 실행할 AWS Identity and Access Management(IAM) 역할을 지정합니다. 사용하는 IAM 역할에는 해당 작업 건(job)에 지정된 작업(operation)을 수행하기에 충분한 권한이 있어야 합니다. 예를 들어 CopyObject
작업을 실행하려면 IAM 역할이 소스 버킷에 대한 s3:GetObject
권한과 대상 버킷에 대한 s3:PutObject
권한을 가져야 합니다. 또한 역할에는 매니페스트를 읽고 작업 완료 보고서를 작성할 수 있는 권한도 필요합니다.
IAM 역할에 대한 자세한 내용은 IAM 사용 설명서의 IAM 역할 단원을 참조하세요.
Amazon S3 권한에 대한 자세한 내용은 Amazon S3의 정책 작업 섹션을 참조하세요.
- 보고서
-
S3 배치 작업에서 완료 보고서를 생성할지 여부를 지정합니다. 작업 완료 보고서를 요청하면 이 요소에서 보고서에 대한 파라미터도 제공해야 합니다. 필요한 정보에는 다음이 포함됩니다.
완료 보고서는 항상 Amazon S3 관리형 키를 사용한 서버 측 암호화(SSE-S3)로 암호화됩니다.
- 태그(선택 사항)
-
태그를 추가하여 S3 배치 작업 건에 대한 레이블을 지정하고 액세스를 제어할 수 있습니다. 배치 작업 건의 책임자를 식별하거나 사용자가 배치 작업 건과 상호작용하는 방법을 제어하기 위해 태그를 사용할 수 있습니다. 작업 태그가 있을 경우 사용자가 작업을 취소하고, 확인 상태의 작업을 활성화하거나 작업의 우선 순위 레벨을 바꿀 수 있는 능력을 부여하거나 제한할 수 있습니다. 예를 들어, "Department=Finance"
태그로 작업이 생성된 경우 CreateJob
작업을 호출할 수 있는 권한을 사용자에게 부여할 수 있습니다.
태그가 연결된 작업을 생성할 수 있으며 작업을 생성한 후 작업에 태그를 추가할 수 있습니다.
자세한 내용은 태그를 사용하여 액세스 제어 및 작업 레이블 지정 단원을 참조하십시오.
- Description(선택 사항)
-
작업 건을 추적하고 모니터링하기 위해 최대 256자의 설명을 제공할 수도 있습니다. Amazon S3는 작업 건에 대한 정보를 반환하거나 Amazon S3 콘솔에 작업 세부 정보를 표시할 때마다 이 설명을 포함합니다. 그러므로 지정한 설명에 따라 손쉽게 작업을 정렬하고 필터링할 수 있습니다. 설명이 고유할 필요는 없으므로 설명을 범주(예: "주간 로그 복사 작업")로 사용하면 유사한 작업 그룹을 추적하는 데 도움이 됩니다.
매니페스트 지정
매니페스트는 Amazon S3가 작업을 수행할 객체 키를 포함하는 Amazon S3 객체입니다. 다음 방법 중 하나를 사용하여 매니페스트를 제공할 수 있습니다.
Amazon S3 Batch Operations는 리전 간 매니페스트 생성을 지원하지 않습니다.
매니페스트를 지정하는 방법과 관계없이 목록 자체는 범용 버킷에 저장해야 합니다. 배치 작업은 디렉터리 버킷에서 기존 매니페스트를 가져올 수 없으며 생성된 매니페스트를 디렉터리 버킷에 저장할 수 없습니다. 하지만 매니페스트에 설명된 객체는 디렉터리 버킷에 저장할 수 있습니다. 자세한 내용은 디렉터리 버킷을 참조하세요.
매니페스트 파일 생성
수동으로 매니페스트 파일을 생성하려면 매니페스트 객체 키, ETag(엔터티 태그) 및 선택적으로 버전 ID를 CSV 형식의 목록으로 지정합니다. 매니페스트의 콘텐츠는 URL로 인코딩되어야 합니다.
기본적으로 Amazon S3가 Amazon S3 관리형 키(SSE-S3)를 통한 서버 측 암호화를 사용하여 Amazon S3 버킷에 업로드된 매니페스트를 암호화합니다. 고객 제공 키를 사용한 서버 측 암호화(SSE-C) 키를 사용한 매니페스트는 지원되지 않습니다. AWS Key Management Service(AWS KMS) 키(SSE-KMS)를 통한 서버 측 암호화를 사용하는 매니페스트는 CSV 형식의 인벤토리 보고서를 사용할 때만 지원됩니다. AWS KMS로 수동으로 생성된 매니페스트를 사용하는 것은 지원되지 않습니다.
매니페스트에는 버킷 이름, 객체 키, 각 객체의 객체 버전(선택 사항)이 포함되어야 합니다. 매니페스트의 다른 모든 필드는 S3 배치 작업에서 사용되지 않습니다.
매니페스트 내 객체가 버전이 지정된 버킷에 있는 경우, 객체의 버전 ID를 지정하면 배치 작업이 지정된 버전에서 실행됩니다. 버전 ID를 지정하지 않는 경우 배치 작업 시 객체의 마지막 버전에서 작업이 실행됩니다. 매니페스트에 버전 ID 필드가 포함된 경우, 매니페스트 내 모든 객체에 대한 버전 ID를 제공해야 합니다.
다음은 버전 ID가 없는 CSV 형식의 매니페스트 예입니다.
amzn-s3-demo-bucket1,objectkey1
amzn-s3-demo-bucket1,objectkey2
amzn-s3-demo-bucket1,objectkey3
amzn-s3-demo-bucket1,photos/jpgs/objectkey4
amzn-s3-demo-bucket1,photos/jpgs/newjersey/objectkey5
amzn-s3-demo-bucket1,object%20key%20with%20spaces
다음은 버전 ID를 포함하는 CSV 형식의 매니페스트 예시입니다.
amzn-s3-demo-bucket1,objectkey1,PZ9ibn9D5lP6p298B7S9_ceqx1n5EJ0p
amzn-s3-demo-bucket1,objectkey2,YY_ouuAJByNW1LRBfFMfxMge7XQWxMBF
amzn-s3-demo-bucket1,objectkey3,jbo9_jhdPEyB4RrmOxWS0kU0EoNrU_oI
amzn-s3-demo-bucket1,photos/jpgs/objectkey4,6EqlikJJxLTsHsnbZbSRffn24_eh5Ny4
amzn-s3-demo-bucket1,photos/jpgs/newjersey/objectkey5,imHf3FAiRsvBW_EHB8GOu.NHunHO1gVs
amzn-s3-demo-bucket1,object%20key%20with%20spaces,9HkPvDaZY5MVbMhn6TMn1YTb5ArQAo3w
기존 매니페스트 파일 지정
다음 두 형식 중 하나를 사용하여 작업 생성 요청에 매니페스트 파일을 지정할 수 있습니다.
-
Amazon S3 인벤토리 보고서 - CSV 형식의 Amazon S3 인벤토리 보고서여야 합니다. 인벤토리 보고서와 연결된 manifest.json
파일을 지정해야 합니다. 인벤토리 보고서에 대한 자세한 내용은 S3 Inventory를 사용한 데이터 카탈로그화 및 분석 섹션을 참조하세요. 인벤토리 보고서가 버전 ID를 포함할 경우, S3 배치 작업이 특정 객체 버전에만 작용합니다.
-
CSV 파일 - 파일 내 각 행이 버킷 이름, 객체 키 및 선택적으로 객체 버전을 포함해야 합니다. 객체 키는 다음 예제와 같이 URL로 인코딩되어야 합니다. 매니페스트는 모든 객체에 대한 버전 ID를 포함하거나 모든 객체에 대한 버전 ID를 생략해야 합니다. CSV 매니페스트 형식에 대한 자세한 내용은 Amazon Simple Storage Service API 참조에서 JobManifestSpec을 참조하세요.
S3 배치 작업은 SSE-KMS로 암호화된 CSV 매니페스트 파일을 지원하지 않습니다.
수동으로 생성된 매니페스트와 버전이 지정된 버킷을 사용하는 경우 객체의 버전 ID를 지정하는 것이 좋습니다. 작업을 생성하면 S3 배치 작업이 작업을 실행하기 전에 전체 매니페스트를 구문 분석합니다. 하지만 버킷 상태 "스냅샷"을 생성하지는 않습니다.
매니페스트에는 수십억 개의 객체가 포함될 수 있으므로 작업 실행에 오랜 시간이 걸릴 수 있으며, 그러한 경우 작업이 실행되는 객체의 버전에 영향을 미칠 수 있습니다. 작업이 실행되는 동안 객체를 새 버전으로 덮어쓰고 그 객체에 버전 ID를 지정하지 않았다고 가정해 봅시다. 이 경우 Amazon S3는 작업 생성 시 존재했던 버전이 아니라 객체의 최신 버전에서 작업을 수행합니다. 이 문제를 피하는 유일한 방법은 매니페스트에 나열된 객체에 버전 ID를 지정하는 것입니다.
매니페스트 자동 생성
작업을 생성할 때 지정한 객체 필터 기준에 따라 자동으로 매니페스트를 생성하도록 Amazon S3에 지시할 수 있습니다. 이 옵션은 Amazon S3 콘솔에서 생성하는 배치 복제 작업 또는 AWS CLI, AWS SDK 또는 Amazon S3 REST API를 사용하여 생성하는 작업 유형에 사용할 수 있습니다. Batch Replication에 대한 자세한 내용은 배치 복제를 사용한 기존 객체 복제 섹션을 참조하세요.
매니페스트를 자동으로 생성하려면 작업 생성 요청의 일부로 다음 요소를 지정합니다.
-
소스 객체를 포함하는 버킷에 대한 정보(버킷 소유자 및 Amazon 리소스 이름(ARN) 등)
-
매니페스트 출력에 대한 정보(매니페스트 파일 생성 플래그, 출력 버킷 소유자, ARN, 접두사, 파일 형식, 암호화 유형 등)
-
만든 날짜, 키 이름, 크기 및 스토리지 클래스별로 객체를 필터링하는 선택적 기준입니다. 복제 작업의 경우 태그를 사용하여 객체를 필터링할 수도 있습니다.
객체 필터 기준
자동으로 생성된 매니페스트에 포함할 객체 목록을 필터링하려면 다음 기준을 지정할 수 있습니다. 자세한 내용은 Amazon S3 API 참조의 JobManifestGeneratorFilter 섹션을 참조하세요.
- CreatedAfter
-
제공된 경우 생성된 매니페스트에는 이 시점 후에 생성된 소스 버킷 객체만 포함됩니다.
- CreatedBefore
-
제공된 경우 생성된 매니페스트에는 이 시점 전에 생성된 소스 버킷 객체만 포함됩니다.
- EligibleForReplication
-
제공된 경우 생성된 매니페스트에는 소스 버킷의 복제 구성에 따라 복제에 적합한 객체만 포함됩니다.
- KeyNameConstraint
-
제공된 경우 생성된 매니페스트에는 MatchAnySubstring, MatchAnyPrefix 및 MatchAnySuffix에 지정된 문자열 제약 조건과 객체 키가 일치하는 소스 버킷 객체만 포함됩니다.
MatchAnySubstring - 제공된 경우 생성된 매니페스트에는 지정된 문자열이 객체 키 문자열 내에 있으면 객체가 포함됩니다.
MatchAnyPrefix - 제공된 경우 생성된 매니페스트에는 지정된 문자열이 객체 키 문자열의 시작 부분에 있으면 객체가 포함됩니다.
MatchAnySuffix - 제공된 경우 생성된 매니페스트에는 지정된 문자열이 객체 키 문자열의 끝 부분에 있으면 객체가 포함됩니다.
- MatchAnyStorageClass
-
제공된 경우 생성된 매니페스트에는 지정된 스토리지 클래스와 함께 저장된 소스 버킷 객체만 포함됩니다.
- ObjectReplicationStatuses
-
제공된 경우 생성된 매니페스트에는 지정된 복제 상태 중 하나를 가진 소스 버킷 객체만 포함됩니다.
- ObjectSizeGreaterThanBytes
-
제공된 경우 생성된 매니페스트에는 파일 크기가 지정된 바이트 수보다 큰 소스 버킷 객체만 포함됩니다.
- ObjectSizeLessThanBytes
-
제공된 경우 생성된 매니페스트에는 파일 크기가 지정된 바이트 수보다 작은 소스 버킷 객체만 포함됩니다.
매니페스트를 자동으로 생성한 대부분의 작업은 복제할 수 없습니다. KeyNameConstraint
, MatchAnyStorageClass
, ObjectSizeGreaterThanBytes
또는 ObjectSizeLessThanBytes
매니페스트 필터 기준을 사용하는 경우를 제외하고 배치 복제 작업을 복제할 수 있습니다.
매니페스트 기준을 지정하는 구문은 작업을 생성하는 데 사용하는 방법에 따라 달라집니다. 예시는 작업 생성 섹션을 참조하세요.
작업 생성
Amazon S3 콘솔, AWS CLI, AWS SDK 또는 Amazon REST API를 사용하여 S3 배치 작업을 생성할 수 있습니다.
작업 요청 생성에 대한 자세한 내용은 배치 작업 요청 요소 섹션을 참조하세요.
사전 조건
배치 작업 건을 생성하기 전에 관련 권한을 구성했는지 확인합니다. 자세한 내용은 배치 작업에 대한 권한 부여 단원을 참조하십시오.
배치 작업 생성
AWS Management Console에 로그인한 후 https://console.aws.amazon.com/s3/에서 Amazon S3 콘솔을 엽니다.
-
페이지 상단의 탐색 모음에서 현재 표시된 AWS 리전의 이름을 선택합니다. 그런 다음 작업을 생성하려는 리전을 선택합니다.
복사 작업의 경우 대상 버킷과 동일한 리전에서 작업을 생성해야 합니다. 기타 작업의 경우 매니페스트에 있는 객체와 동일한 리전에서 작업을 생성해야 합니다.
-
Amazon S3 콘솔의 왼쪽 탐색 창에서 배치 작업을 선택합니다.
-
작업 생성을 선택합니다.
-
작업을 생성하려는 AWS 리전을 확인합니다.
-
매니페스트 형식에서 사용할 매니페스트 객체의 형식을 선택합니다.
-
S3 인벤토리 보고서를 선택하는 경우 Amazon S3가 CSV 형식 인벤토리 보고서의 일부로 생성한 manifest.json 객체의 경로를 입력하고 최신 버전이 아닌 다른 버전을 사용하려는 경우 매니페스트 객체의 버전 ID를 선택적으로 지정합니다.
-
CSV를 선택하는 경우 CSV 형식 매니페스트 객체의 경로를 입력합니다. 매니페스트 객체는 콘솔에 설명된 형식을 따라야 합니다. 선택적으로 최신 버전이 아닌 버전을 사용하려는 경우 매니페스트 객체의 버전 ID를 포함시킬 수 있습니다.
Amazon S3 콘솔은 배치 복제 작업에 대해서만 자동 매니페스트 생성을 지원합니다. 다른 모든 작업 유형의 경우 지정한 필터 기준에 따라 Amazon S3에서 매니페스트를 자동으로 생성하도록 하려면 AWS CLI, AWS SDK 또는 Amazon S3 REST API를 사용하여 작업을 구성해야 합니다.
-
Next(다음)를 선택합니다.
-
작업에서 매니페스트에 나열된 모든 객체에 수행할 작업을 선택합니다. 선택한 작업에 대한 정보를 입력하고 다음을 선택합니다.
-
Configure additional options(추가 옵션 구성)에 대한 정보를 입력하고 다음을 선택합니다.
-
검토에서 설정을 확인합니다. 설정을 변경하려면 이전을 선택합니다 또는 작업 생성을 선택합니다.
AWS CLI를 사용하여 Batch Operations 작업을 만들려면 기존 매니페스트를 지정할지 아니면 매니페스트를 자동으로 생성할지에 따라 다음 예제 중 하나를 선택하세요.
- Specify manifest
-
다음 예제는 AWS CLI를 사용하여 기존 매니페스트 파일에 나열된 객체에 대해 수행되는 S3 Batch Operations S3PutObjectTagging
작업을 만드는 방법을 보여줍니다.
매니페스트를 지정하여 Batch Operations S3PutObjectTagging
작업을 만들려면
-
다음 명령을 사용하여 AWS Identity and Access Management(IAM) 역할을 생성한 다음 IAM 정책을 생성하여 관련 권한을 할당합니다. 다음 역할 및 정책은 Amazon S3에 객체 태그를 추가할 수 있는 권한을 부여합니다. 이 권한은 후속 단계에서 작업을 생성할 때 필요합니다.
-
다음 예시 명령을 사용하여 배치 작업에서 사용할 IAM 역할을 생성합니다. 이 예시 명령을 사용하려면 S3BatchJobRole
을 역할에 지정할 이름으로 변경하세요.
aws iam create-role \
--role-name S3BatchJobRole
\
--assume-role-policy-document '{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Principal":{
"Service":"batchoperations.s3.amazonaws.com"
},
"Action":"sts:AssumeRole"
}
]
}'
역할의 Amazon 리소스 이름(ARN)을 기록합니다. 작업을 생성할 때 ARN이 필요합니다.
-
다음 예시 명령을 사용하여 필요한 권한이 포함된 IAM 정책을 생성하고 이전 단계에서 생성한 IAM 역할에 연결합니다. 필요한 권한에 대한 자세한 내용은 배치 작업에 대한 권한 부여 섹션을 참조하세요.
이 예시 명령을 사용하려면 user input
placeholders
를 다음과 같이 바꾸세요.
-
S3BatchJobRole
을 IAM 역할의 이름으로 바꿉니다. 이 이름이 이전에 사용한 이름과 일치하는지 확인하세요.
-
PutObjectTaggingBatchJobPolicy
를 IAM 정책에 부여하려는 이름으로 바꿉니다.
-
amzn-s3-demo-destination-bucket
을 태그를 적용하려는 객체를 포함하는 버킷의 이름으로 바꿉니다.
-
amzn-s3-demo-manifest-bucket
을 매니페스트를 포함하는 버킷의 이름으로 바꿉니다.
-
amzn-s3-demo-completion-report-bucket
을 완료 보고서를 전송하려는 버킷 이름으로 바꿉니다.
aws iam put-role-policy \
--role-name S3BatchJobRole
\
--policy-name PutObjectTaggingBatchJobPolicy
\
--policy-document '{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Action":[
"s3:PutObjectTagging",
"s3:PutObjectVersionTagging"
],
"Resource": "arn:aws:s3:::amzn-s3-demo-destination-bucket
/*"
},
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:GetObjectVersion",
"s3:GetBucketLocation"
],
"Resource": [
"arn:aws:s3:::amzn-s3-demo-manifest-bucket
",
"arn:aws:s3:::amzn-s3-demo-manifest-bucket
/*"
]
},
{
"Effect":"Allow",
"Action":[
"s3:PutObject",
"s3:GetBucketLocation"
],
"Resource":[
"arn:aws:s3:::amzn-s3-demo-completion-report-bucket
",
"arn:aws:s3:::amzn-s3-demo-completion-report-bucket
/*"
]
}
]
}'
-
다음 예시 명령을 사용하여 S3PutObjectTagging
작업을 생성합니다.
manifest.csv
파일은 일련의 버킷 및 객체 키 값을 제공합니다. 이 작업은 매니페스트에서 식별된 객체에 지정된 태그를 적용합니다. ETag
는 manifest.csv
객체의 ETag이며 Amazon S3 콘솔에서 가져올 수 있습니다. 이 요청은 no-confirmation-required
파라미터를 지정하므로 update-job-status
명령으로 파라미터를 확인하지 않고도 작업을 실행할 수 있습니다. 자세한 정보는 AWS CLI 명령 참조의 create-job 섹션을 참조하세요.
이 예 명령을 사용하려면 user input
placeholders
를 실제 정보로 대체하세요. IAM-role
을 이전에 생성한 IAM 역할의 ARN으로 바꿉니다.
aws s3control create-job \
--region us-west-2
\
--account-id acct-id
\
--operation '{"S3PutObjectTagging": { "TagSet": [{"Key":"keyOne
", "Value":"ValueOne
"}] }}' \
--manifest '{"Spec":{"Format":"S3BatchOperations_CSV_20180820
","Fields":["Bucket","Key"]},"Location":{"ObjectArn":"arn:aws:s3:::amzn-s3-demo-manifest-bucket
/manifest.csv
","ETag":"60e460c9d1046e73f7dde5043ac3ae85
"}}' \
--report '{"Bucket":"arn:aws:s3:::amzn-s3-demo-completion-report-bucket
","Prefix":"final-reports
", "Format":"Report_CSV_20180820
","Enabled":true,"ReportScope":"AllTasks"}' \
--priority 42
\
--role-arn IAM-role
\
--client-request-token $(uuidgen) \
--description "job description
" \
--no-confirmation-required
이에 대한 응답으로 Amazon S3은 작업 ID(예: 00e123a4-c0d8-41f4-a0eb-b46f9ba5b07c
)를 반환합니다. 작업을 식별, 모니터링 및 수정하려면 작업 ID가 필요합니다.
- Generate manifest
-
다음 예시는 객체 필터 기준에 따라 매니페스트를 자동으로 생성하는 S3DeleteObjectTagging
S3 배치 작업 건을 생성하는 방법을 보여줍니다. 이 기준에는 생성 날짜, 키 이름, 크기, 스토리지 클래스 및 태그가 포함됩니다.
매니페스트를 생성하여 Batch Operations S3DeleteObjectTagging
작업을 만들려면
-
다음 명령을 사용하여 AWS Identity and Access Management(IAM) 역할을 생성한 다음 IAM 정책을 생성하여 권한을 할당합니다. 다음 역할 및 정책은 Amazon S3에 객체 태그를 삭제할 수 있는 권한을 부여합니다. 이 권한은 후속 단계에서 작업을 생성할 때 필요합니다.
-
다음 예시 명령을 사용하여 배치 작업에서 사용할 IAM 역할을 생성합니다. 이 예시 명령을 사용하려면 S3BatchJobRole
을 역할에 지정할 이름으로 변경하세요.
aws iam create-role \
--role-name S3BatchJobRole
\
--assume-role-policy-document '{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Principal":{
"Service":"batchoperations.s3.amazonaws.com"
},
"Action":"sts:AssumeRole"
}
]
}'
역할의 Amazon 리소스 이름(ARN)을 기록합니다. 작업을 생성할 때 ARN이 필요합니다.
-
다음 예시 명령을 사용하여 필요한 권한이 포함된 IAM 정책을 생성하고 이전 단계에서 생성한 IAM 역할에 연결합니다. 필요한 권한에 대한 자세한 내용은 배치 작업에 대한 권한 부여 섹션을 참조하세요.
이 예시 명령을 사용하려면 user input
placeholders
를 다음과 같이 바꾸세요.
-
S3BatchJobRole
을 IAM 역할의 이름으로 바꿉니다. 이 이름이 이전에 사용한 이름과 일치하는지 확인하세요.
-
DeleteObjectTaggingBatchJobPolicy
를 IAM 정책에 부여하려는 이름으로 바꿉니다.
-
amzn-s3-demo-destination-bucket
을 태그를 적용하려는 객체를 포함하는 버킷의 이름으로 바꿉니다.
-
amzn-s3-demo-manifest-bucket
을 매니페스트를 저장하려는 버킷의 이름으로 바꿉니다.
-
amzn-s3-demo-completion-report-bucket
을 완료 보고서를 전송하려는 버킷 이름으로 바꿉니다.
aws iam put-role-policy \
--role-name S3BatchJobRole
\
--policy-name DeleteObjectTaggingBatchJobPolicy
\
--policy-document '{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Action":[
"s3:DeleteObjectTagging",
"s3:DeleteObjectVersionTagging"
],
"Resource": "arn:aws:s3:::amzn-s3-demo-destination-bucket
/*"
},
{
"Effect":"Allow",
"Action":[
"s3:PutInventoryConfiguration"
],
"Resource": "arn:aws:s3:::amzn-s3-demo-destination-bucket
"
},
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:GetObjectVersion",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::amzn-s3-demo-manifest-bucket
",
"arn:aws:s3:::amzn-s3-demo-manifest-bucket
/*"
]
},
{
"Effect":"Allow",
"Action":[
"s3:PutObject",
"s3:ListBucket"
],
"Resource":[
"arn:aws:s3:::amzn-s3-demo-completion-report-bucket
",
"arn:aws:s3:::amzn-s3-demo-completion-report-bucket
/*",
"arn:aws:s3:::amzn-s3-demo-manifest-bucket
/*"
]
}
]
}'
-
다음 예시 명령을 사용하여 S3DeleteObjectTagging
작업을 생성합니다.
이 예시에서 --report
섹션의 값은 생성될 작업 보고서의 버킷, 접두사, 형식 및 범위를 지정합니다. --manifest-generator
섹션은 작업이 실행될 객체를 포함하는 소스 버킷에 대한 정보, 작업에 대해 생성될 매니페스트 출력 목록에 대한 정보, 매니페스트에 포함할 객체의 범위를 생성 날짜, 이름 제약 조건, 크기, 스토리지 클래스별로 좁히는 필터 기준이 지정됩니다. 또한 이 명령은 작업의 우선순위, IAM 역할, AWS 리전을 지정합니다.
자세한 정보는 AWS CLI 명령 참조의 create-job 섹션을 참조하세요.
이 예 명령을 사용하려면 user input
placeholders
를 실제 정보로 대체하세요. IAM-role
을 이전에 생성한 IAM 역할의 ARN으로 바꿉니다.
aws s3control create-job \
--account-id 012345678901
\
--operation '{
"S3DeleteObjectTagging": {}
}' \
--report '{
"Bucket":"arn:aws:s3:::amzn-s3-demo-completion-report-bucket
",
"Prefix":"reports
",
"Format":"Report_CSV_20180820",
"Enabled":true
,
"ReportScope":"AllTasks
"
}' \
--manifest-generator '{
"S3JobManifestGenerator": {
"ExpectedBucketOwner": "012345678901
",
"SourceBucket": "arn:aws:s3:::amzn-s3-demo-source-bucket
",
"EnableManifestOutput": true,
"ManifestOutputLocation": {
"ExpectedManifestBucketOwner": "012345678901
",
"Bucket": "arn:aws:s3:::amzn-s3-demo-manifest-bucket
",
"ManifestPrefix": "prefix
",
"ManifestFormat": "S3InventoryReport_CSV_20211130"
},
"Filter": {
"CreatedAfter": "2023-09-01
",
"CreatedBefore": "2023-10-01
",
"KeyNameConstraint": {
"MatchAnyPrefix": [
"prefix
"
],
"MatchAnySuffix": [
"suffix
"
]
},
"ObjectSizeGreaterThanBytes": 100
,
"ObjectSizeLessThanBytes": 200
,
"MatchAnyStorageClass": [
"STANDARD
",
"STANDARD_IA
"
]
}
}
}' \
--priority 2
\
--role-arn IAM-role
\
--region us-east-1
이에 대한 응답으로 Amazon S3은 작업 ID(예: 00e123a4-c0d8-41f4-a0eb-b46f9ba5b07c
)를 반환합니다. 작업을 식별, 모니터링 또는 수정하려면 이 작업 ID가 필요합니다.
AWS SDK for Java를 사용하여 Batch Operations 작업을 만들려면 기존 매니페스트를 지정할지 아니면 매니페스트를 자동으로 생성할지에 따라 다음 예제 중 하나를 선택하세요.
- Specify manifest
-
다음 예시에서는 기존 매니페스트 파일에 나열된 객체에 수행되는 S3PutObjectTagging
S3 배치 작업 건을 생성하는 방법을 보여줍니다. 이 예제를 사용하려면 user
input placeholders
를 사용자의 정보로 대체합니다.
package aws.example.s3control;
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.services.s3control.AWSS3Control;
import com.amazonaws.services.s3control.AWSS3ControlClient;
import com.amazonaws.services.s3control.model.*;
import java.util.UUID;
import java.util.ArrayList;
import static com.amazonaws.regions.Regions.US_WEST_2
;
public class CreateJob {
public static void main(String[] args) {
String accountId = "Account ID
";
String iamRoleArn = "IAM Role ARN
";
String reportBucketName = "arn:aws:s3:::amzn-s3-demo-completion-report-bucket
";
String uuid = UUID.randomUUID().toString();
ArrayList tagSet = new ArrayList<S3Tag>();
tagSet.add(new S3Tag().withKey("keyOne
").withValue("ValueOne
"));
try {
JobOperation jobOperation = new JobOperation()
.withS3PutObjectTagging(new S3SetObjectTaggingOperation()
.withTagSet(tagSet)
);
JobManifest manifest = new JobManifest()
.withSpec(new JobManifestSpec()
.withFormat("S3BatchOperations_CSV_20180820
")
.withFields(new String[]{
"Bucket
", "Key
"
}))
.withLocation(new JobManifestLocation()
.withObjectArn("arn:aws:s3:::my_manifests/manifest.csv
")
.withETag("60e460c9d1046e73f7dde5043ac3ae85
"));
JobReport jobReport = new JobReport()
.withBucket(reportBucketName)
.withPrefix("reports
")
.withFormat("Report_CSV_20180820
")
.withEnabled(true)
.withReportScope("AllTasks
");
AWSS3Control s3ControlClient = AWSS3ControlClient.builder()
.withCredentials(new ProfileCredentialsProvider())
.withRegion(US_WEST_2
)
.build();
s3ControlClient.createJob(new CreateJobRequest()
.withAccountId(accountId)
.withOperation(jobOperation)
.withManifest(manifest)
.withReport(jobReport)
.withPriority(42
)
.withRoleArn(iamRoleArn)
.withClientRequestToken(uuid)
.withDescription("job description
")
.withConfirmationRequired(false)
);
} catch (AmazonServiceException e) {
// The call was transmitted successfully, but Amazon S3 couldn't process
// it and returned an error response.
e.printStackTrace();
} catch (SdkClientException e) {
// Amazon S3 couldn't be contacted for a response, or the client
// couldn't parse the response from Amazon S3.
e.printStackTrace();
}
}
}
- Generate manifest
-
다음 예시는 생성 날짜, 키 이름, 크기 등의 객체 필터 기준에 따라 매니페스트를 자동으로 생성하는 s3PutObjectCopy
S3 배치 작업 건을 생성하는 방법을 보여줍니다. 이 예제를 사용하려면 user input placeholders
를 사용자의 정보로 대체합니다.
package aws.example.s3control;
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.services.s3control.AWSS3Control;
import com.amazonaws.services.s3control.AWSS3ControlClient;
import com.amazonaws.services.s3control.model.CreateJobRequest;
import com.amazonaws.services.s3control.model.CreateJobResult;
import com.amazonaws.services.s3control.model.JobManifestGenerator;
import com.amazonaws.services.s3control.model.JobManifestGeneratorFilter;
import com.amazonaws.services.s3control.model.JobOperation;
import com.amazonaws.services.s3control.model.JobReport;
import com.amazonaws.services.s3control.model.KeyNameConstraint;
import com.amazonaws.services.s3control.model.S3JobManifestGenerator;
import com.amazonaws.services.s3control.model.S3ManifestOutputLocation;
import com.amazonaws.services.s3control.model.S3SetObjectTaggingOperation;
import com.amazonaws.services.s3control.model.S3Tag;
import java.time.Instant;
import java.util.Date;
import java.util.UUID;
import java.util.ArrayList;
import static com.amazonaws.regions.Regions.US_WEST_2
;
public class test {
public static void main(String[] args) {
String accountId = "012345678901
";
String iamRoleArn = "arn:aws:iam::012345678901
:role/ROLE
";
String sourceBucketName = "arn:aws:s3:::amzn-s3-demo-source-bucket
";
String reportBucketName = "arn:aws:s3:::amzn-s3-demo-completion-report-bucket
";
String manifestOutputBucketName = "arn:aws:s3:::amzn-s3-demo-manifest-bucket
";
String uuid = UUID.randomUUID().toString();
long minimumObjectSize = 100L;
ArrayList<S3Tag> tagSet = new ArrayList<>();
tagSet.add(new S3Tag().withKey("keyOne
").withValue("ValueOne
"));
ArrayList<String> prefixes = new ArrayList<>();
prefixes.add("s3KeyStartsWith
");
try {
JobOperation jobOperation = new JobOperation()
.withS3PutObjectTagging(new S3SetObjectTaggingOperation()
.withTagSet(tagSet)
);
S3ManifestOutputLocation manifestOutputLocation = new S3ManifestOutputLocation()
.withBucket(manifestOutputBucketName)
.withManifestPrefix("manifests
")
.withExpectedManifestBucketOwner(accountId)
.withManifestFormat("S3InventoryReport_CSV_20211130");
JobManifestGeneratorFilter jobManifestGeneratorFilter = new JobManifestGeneratorFilter()
.withEligibleForReplication(true
)
.withKeyNameConstraint(
new KeyNameConstraint()
.withMatchAnyPrefix(prefixes))
.withCreatedBefore(Date.from(Instant.now()))
.withObjectSizeGreaterThanBytes(minimumObjectSize);
S3JobManifestGenerator s3JobManifestGenerator = new S3JobManifestGenerator()
.withEnableManifestOutput(true
)
.withManifestOutputLocation(manifestOutputLocation)
.withFilter(jobManifestGeneratorFilter)
.withSourceBucket(sourceBucketName);
JobManifestGenerator jobManifestGenerator = new JobManifestGenerator()
.withS3JobManifestGenerator(s3JobManifestGenerator);
JobReport jobReport = new JobReport()
.withBucket(reportBucketName)
.withPrefix("reports
")
.withFormat("Report_CSV_20180820")
.withEnabled(true
)
.withReportScope("AllTasks
");
AWSS3Control s3ControlClient = AWSS3ControlClient.builder()
.withCredentials(new ProfileCredentialsProvider())
.withRegion(US_WEST_2
)
.build();
CreateJobResult createJobResult = s3ControlClient.createJob(new CreateJobRequest()
.withAccountId(accountId)
.withOperation(jobOperation)
.withManifestGenerator(jobManifestGenerator)
.withReport(jobReport)
.withPriority(42
)
.withRoleArn(iamRoleArn)
.withClientRequestToken(uuid)
.withDescription("job description
")
.withConfirmationRequired(true)
);
System.out.println("Created job " + createJobResult.getJobId());
} catch (AmazonServiceException e) {
// The call was transmitted successfully, but Amazon S3 couldn't process
// it and returned an error response.
e.printStackTrace();
} catch (SdkClientException e) {
// Amazon S3 couldn't be contacted for a response, or the client
// couldn't parse the response from Amazon S3.
e.printStackTrace();
}
}
}
REST API를 사용하여 배치 작업을 생성할 수 있습니다. 자세한 내용은 Amazon Simple Storage Service API 참조에서 CreateJob를 참조하십시오.
작업 응답
CreateJob
요청이 성공하면 Amazon S3가 작업 ID를 반환합니다. 작업 ID는 Amazon S3가 자동으로 생성하는 고유한 식별자이므로 배치 작업 건을 식별하고 그 상태를 모니터링할 수 있습니다.
AWS CLI, AWS SDK 또는 REST API를 통해 작업을 생성할 때 자동으로 작업 처리를 시작하도록 S3 배치 작업을 설정할 수 있습니다. 작업은 우선순위가 더 높은 작업을 기다리지 않고 준비가 완료되는 즉시 실행됩니다.
Amazon S3 콘솔을 통해 작업을 생성할 때 작업 세부 정보를 검토하고 배치 작업이 처리를 시작하기 전에 작업을 실행할 것인지 확인해야 합니다. 작업이 30일 이상 일시 중지된 상태로 있으면 작업이 실패합니다.