本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
建立 S3 批次操作任務
您可以使用 Amazon S3 Batch Operations,在特定 Amazon S3 物件清單上執行大規模的批次操作。本節說明建立 S3 批次操作任務所需的資訊,以及 CreateJob
要求的結果,它也提供使用 Amazon S3 主控台 AWS Command Line Interface (AWS CLI) 和建立 Batch 操作任務的指示 AWS SDK for Java。
建立 S3 批次操作任務時,您可以請求所有任務或僅限失敗任務的完成報告。只要順利叫用至少一個任務,S3 Batch Operations 就會產生已完成、失敗或已取消任務的報告。如需詳細資訊,請參閱 範例:S3 批次操作完成報告。
下列影片提供如何使用 Amazon S3 主控台建立 Batch Operations 任務的簡短示範。
批次操作任務請求元素
若要建立 S3 批次操作任務,您必須提供下列資訊:
- 操作
-
請指定希望 S3 批次操作針對資訊清單中物件執行的操作。每個操作類型都接受該操作特有的參數。使用 Batch 作業,您可以大量執行作業,其結果與您對每個物件執行該作業時 one-by-one 的結果相同。
- 清單檔案
-
清單檔案是您希望 S3 Batch Operations 對其執行指定操作的所有物件的清單。您可以使用下列方法指定 Batch Operations 任務的清單檔案:
-
無論您如何指定清單檔案,此清單本身都必須儲存在一般用途儲存貯體中。Batch Operations 無法從目錄儲存貯體匯入現有的清單檔案,或將產生的清單檔案儲存到目錄儲存貯體。不過,清單檔案內描述的物件可以儲存在目錄儲存貯體中。如需詳細資訊,請參閱目錄儲存貯體。
-
如果資訊清單中的物件位於已建立版本化的值區中,則指定物件IDs的版本會指示 Batch 作業在特定版本上執行作業。如果未指定任何版本IDs,「Batch 作業」會對物件的最新版本執行作業。如果您的清單檔案包含版本 ID 欄位,您必須為資訊清單中的所有物件提供一個版本 ID。
如需詳細資訊,請參閱「指定資訊清單」。
- 優先順序
-
請使用任務優先順序,指出此任務與您帳戶中執行之其他任務的相對優先順序。數字越大表示優先順序越高。
任務優先順序僅在相對於為同一帳戶和區域中的其他任務所設定的優先順序有意義。您可以選擇任何適合您的編號系統。例如,您可能想要將所有 Re store (RestoreObject
) 工作的優先順序指派為 1,將所有 Copy (CopyObject
) 工作的優先順序指派為 2,並將所有取代存取控制清單 (ACLs) (PutObjectAcl
) 工作的優先順序指派為 3。
S3 Batch Operations 會根據優先順序編號來排序任務的優先順序,但不保證嚴格排序。因此,請不要使用任務優先順序來確保其中任何一個任務會在其他任務之前啟動或完成。若您必須確保嚴格排序,請等待一個任務完成之後,再啟動下一個任務。
- RoleArn
-
指定要執行工作的 AWS Identity and Access Management (IAM) 角色。您使用的IAM角色必須具有足夠的權限,才能執行工作中指定的作業。例如,若要執行CopyObject
工作,IAM角色必須具有來源值區的s3:GetObject
權限以及目的地值區的s3:PutObject
權限。角色也需要讀取資訊清單,以及寫入任務完成報告的許可。
有關IAM角色的詳細資訊,請參閱《使用指南》中的IAM〈IAM角色〉。
如需 Amazon S3 許可的詳細資訊,請參閱 Amazon S3 的政策動作。
- 報告
-
指定是否希望 S3 批次操作產生完整報告。若您要請求任務完成報告,您也必須在此元素中提供報告的參數。必要資訊包括:
完成報告一律使用 Amazon S3 受管金鑰 (SSE-S3) 加密。
- 標籤 (選用)
-
您可以透過新增標籤,標示和控制對 S3 批次操作任務的存取權。您可以使用標籤來識別負責 Batch Operations 任務的人員,或控制使用者與 Batch Operations 任務互動的方式。任務標籤的存在可以授與或限制使用者的以下能力:取消任務、啟動處於確認狀態的任務或變更任務的優先順序層級。例如,假設建立的任務具有標籤 "Department=Finance"
,您就可以授予使用者調用 CreateJob
操作的許可。
您可以建立已連接標籤的任務,也可以在建立任務後將標籤新增至任務。
如需詳細資訊,請參閱「使用標籤控制存取和標記任務」。
- 描述 (選用)
-
若要追蹤和監控任務,您也可以提供最多 256 個字元的說明。每當 Amazon S3 在 Amazon S3 主控台上傳回任務的相關資訊或顯示任務的詳細資訊時,都會包含此說明。您可以輕鬆地根據指派的描述來排序和篩選任務。描述不需要是唯一的,因此您可以使用描述作為類別 (例如「每週複製日誌任務」) 來協助您追蹤相似任務的群組。
指定資訊清單
清單檔案是 Amazon S3 物件,其中包含您希望 Amazon S3 採取行動的物件索引鍵。您可透過下列其中一種方式供應清單檔案:
無論您如何指定清單檔案,此清單本身都必須儲存在一般用途儲存貯體中。Batch Operations 無法從目錄儲存貯體匯入現有的清單檔案,或將產生的清單檔案儲存到目錄儲存貯體。不過,清單檔案內描述的物件可以儲存在目錄儲存貯體中。如需詳細資訊,請參閱目錄儲存貯體。
建立清單檔案
若要手動建立資訊清單檔案,請在CSV格式化清單中指定資訊清單物件金鑰 ETag (實體標籤) 和選用的版本 ID。清單的內容必須進行URL編碼。
根據預設,Amazon S3 會自動使用伺服器端加密搭配 Amazon S3 受管金鑰 (SSE-S3) 來加密上傳到 Amazon S3 儲存貯體的資訊清單。不支援使用伺服器端加密搭配客戶提供的金鑰 (SSE-C) 的資訊清單。只有當您使用CSV格式化的庫存報告時,才支援使用伺服器端加密 AWS Key Management Service (AWS KMS KMS) 金鑰 (SSE-) 的資訊清單。不支援使用手動建立 AWS KMS 的資訊清單。
您的資訊清單必須包含儲存貯體名稱、物件金鑰,也可選擇納入各物件的物件版本。S3 批次作業不會使用資訊清單中的任何其他欄位。
如果資訊清單中的物件位於已建立版本化的值區中,則指定物件IDs的版本會指示 Batch 作業在特定版本上執行作業。如果未指定任何版本IDs,「Batch 作業」會對物件的最新版本執行作業。如果您的清單檔案包含版本 ID 欄位,您必須為資訊清單中的所有物件提供一個版本 ID。
以下是沒有版本的CSV格式的示例資訊清單IDs。
Examplebucket,objectkey1
Examplebucket,objectkey2
Examplebucket,objectkey3
Examplebucket,photos/jpgs/objectkey4
Examplebucket,photos/jpgs/newjersey/objectkey5
Examplebucket,object%20key%20with%20spaces
以下是包含版本的CSV格式範例資訊清單IDs。
Examplebucket,objectkey1,PZ9ibn9D5lP6p298B7S9_ceqx1n5EJ0p
Examplebucket,objectkey2,YY_ouuAJByNW1LRBfFMfxMge7XQWxMBF
Examplebucket,objectkey3,jbo9_jhdPEyB4RrmOxWS0kU0EoNrU_oI
Examplebucket,photos/jpgs/objectkey4,6EqlikJJxLTsHsnbZbSRffn24_eh5Ny4
Examplebucket,photos/jpgs/newjersey/objectkey5,imHf3FAiRsvBW_EHB8GOu.NHunHO1gVs
Examplebucket,object%20key%20with%20spaces,9HkPvDaZY5MVbMhn6TMn1YTb5ArQAo3w
指定現有的清單檔案
您可以使用下列兩種格式之一指定建立任務請求的清單檔案:
-
Amazon S3 庫存報告 — 必須是CSV格式化的 Amazon S3 庫存報告。您必須指定與庫存報告關聯的 manifest.json
檔案。如需庫存報告的詳細資訊,請參閱 Amazon S3 清查。如果庫存報告包含版本IDs,S3 Batch 操作會在特定物件版本上運作。
-
CSVfile — 檔案中的每一列都必須包含值區名稱、物件金鑰,以及物件版本 (選擇性)。物件索引鍵必須經過URL編碼,如下列範例所示。資訊清單必須包含所有物件IDs的版本,或忽略所有物件IDs的版本。如需有關資訊CSV清單格式的詳細資訊,請參閱 Amazon 簡單儲存服務API參考JobManifestSpec中的。
S3 Batch 操作不支援使用 SSE-加密的CSV資訊清單檔案KMS。
當您使用手動建立的資訊清單和已建立版本化的值區時,建議您指定物件IDs的版本。建立任務時,S3 批次作業會在執行任務之前剖析整個資訊清單。但是,它不會為儲存貯體的狀態拍攝「快照」。
由於清單檔案可能包含數十億個物件,因此任務可能需要很長的時間來執行,這樣可能會影響任務採取行動的物件版本。假設您在任務執行時,以新版本覆寫物件,而您未指定該物件的版本 ID。在此情況下,Amazon S3 會對物件的最新版本執行操作,而非您建立任務時已存在的版本。避免此行為的唯一方法是為資訊清單中列出的物件指定版本IDs。
自動產生清單檔案
您可以指示 Amazon S3 根據您在建立任務時指定的物件篩選條件自動產生清單檔案。此選項適用於您在 Amazon S3 主控台中建立的批次複寫任務,或使用 AWS CLI AWS SDKs、或 Amazon S3 建立的任何任務類型RESTAPI。如需批次複寫的詳細資訊,請參閱 使用 S3 批次複寫來複寫現有物件。
若要自動產生清單檔案,請在任務建立請求中指定下列元素:
-
包含來源物件的值區相關資訊,包括儲存貯體擁有者和 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 主控台或 Amazon S3 建立 S3 Batch 操作任務RESTAPI。 AWS CLI AWS SDKs
如需建立任務請求的詳細資訊,請參閱 批次操作任務請求元素。
必要條件
建立 Batch Operations 任務之前,請先確認您已設定相關許可。如需詳細資訊,請參閱「授予 Amazon S3 批次操作的許可」。
建立批次任務
登入 AWS Management Console 並開啟 Amazon S3 主控台,位於https://console.aws.amazon.com/s3/。
-
在頁面頂端的導覽列中,選擇目前顯示的名稱 AWS 區域。接下來,選擇您要在其中建立工作的地區。
針對複製作業,您必須在與目的地時段相同的「區域」中建立工單。對於所有其他作業,您必須在與資訊清單中的物件相同的「區域」中建立工作。
-
在 Amazon S3 主控台的左側導覽窗格中選擇「Batch 操作」。
-
選擇建立作業。
-
檢視您AWS 區域要建立工作的位置。
-
在 Manifest format (資訊清單格式) 下,選擇要使用的資訊清單物件類型。
Amazon S3 主控台僅支援針對批次複寫任務自動產生清單檔案。對於所有其他任務類型,如果您希望 Amazon S3 根據您指定的篩選條件自動產生資訊清單,則必須使用 AWS CLI AWS
SDKs、或 Amazon S3 來設定任務RESTAPI。
-
選擇 Next (下一步)。
-
在 Operation (操作) 底下,選擇要對資訊清單上所有物件執行的操作。填寫您選擇的操作資訊,然後選擇 Next (下一步)。
-
填寫 Configure additional options (設定其他選項) 的資訊,然後選擇 Next (下一步)。
-
在 Review (檢閱) 中,確認您的設定。如需變更,請選擇 Previous (上一步)。否則,請選擇 Create Job (建立任務)。
- Specify manifest
-
下列範例顯示如何建立 S3 Batch Operations S3PutObjectTagging
任務,讓它對現有清單檔案中列出的物件執行動作。
建立批次操作 S3PutObjectTagging
任務
-
使用下列命令建立 AWS Identity and Access Management (IAM) 角色,然後建立IAM原則以指派相關權限。下列角色和政策會授予 Amazon S3 許可來新增物件標籤,您在後續步驟中建立任務時將會需要這些標籤。
-
使用下列範例命令建立要使用的 Batch 作業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角色。如需有關必要許可的詳細資訊,請參閱 授予 Amazon S3 批次操作的許可。
若要使用此範例命令,請取代 user input
placeholders
,如下所示:
-
S3BatchJobRole
以您的IAM角色名稱取代。確定此名稱與您之前使用的名稱相符。
-
以您要提供IAM原則的名稱取PutObjectTaggingBatchJobPolicy
代。
-
將 amzn-s3-demo-destination-bucket
取代為包含您要套用標籤之物件的儲存貯體名稱。
-
將 DOC-EXAMPLE-MANIFEST-BUCKET
取代為包含清單檔案的儲存貯體名稱。
-
將 DOC-EXAMPLE-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:::DOC-EXAMPLE-MANIFEST-BUCKET
",
"arn:aws:s3:::DOC-EXAMPLE-MANIFEST-BUCKET
/*"
]
},
{
"Effect":"Allow",
"Action":[
"s3:PutObject",
"s3:GetBucketLocation"
],
"Resource":[
"arn:aws:s3:::DOC-EXAMPLE-REPORT-BUCKET
",
"arn:aws:s3:::DOC-EXAMPLE-REPORT-BUCKET
/*"
]
}
]
}'
-
使用下列範例命令來建立 S3PutObjectTagging
任務。
manifest.csv
檔案提供儲存貯體和物件金鑰值的清單。該任務會將指定的標籤套用至清單檔案中識別的物件。ETag
是manifest.csv
對象ETag的,您可以從 Amazon S3 控制台獲取。此請求會指定 no-confirmation-required
參數,因此您不需使用 update-job-status
命令進行確認就可以執行任務。如需詳細資訊,請參閱 AWS CLI 命令參考中的 create-job。
若要使用此範例命令,請以您自己的資訊取代 user input
placeholders
。Replace (取代) IAM-角色
與您之前創建的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:::my_manifests
/manifest.csv
","ETag":"60e460c9d1046e73f7dde5043ac3ae85
"}}' \
--report '{"Bucket":"arn:aws:s3:::DOC-EXAMPLE-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
-
下列範例顯示如何建立 S3 Batch Operations S3DeleteObjectTagging
任務,讓它根據您的物件篩選條件自動產生清單檔案。此條件包括建立日期、索引鍵名稱、大小、儲存類別和標籤。
建立批次操作 S3DeleteObjectTagging
任務
-
使用下列命令建立 AWS Identity and Access Management (IAM) 角色,然後建立IAM原則以指派權限。下列角色和政策會授予 Amazon S3 許可來刪除物件標籤,您在後續步驟中建立任務時將會需要這些標籤。
-
使用下列範例命令建立要使用的 Batch 作業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角色。如需有關必要許可的詳細資訊,請參閱 授予 Amazon S3 批次操作的許可。
若要使用此範例命令,請取代 user input
placeholders
,如下所示:
-
S3BatchJobRole
以您的IAM角色名稱取代。確定此名稱與您之前使用的名稱相符。
-
以您要提供IAM原則的名稱取DeleteObjectTaggingBatchJobPolicy
代。
-
將 amzn-s3-demo-destination-bucket
取代為包含您要套用標籤之物件的儲存貯體名稱。
-
將 DOC-EXAMPLE-MANIFEST-OUTPUT-BUCKET
取代為要在其中儲存清單檔案的儲存貯體名稱。
-
將 DOC-EXAMPLE-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:::DOC-EXAMPLE-MANIFEST-OUTPUT-BUCKET
",
"arn:aws:s3:::DOC-EXAMPLE-MANIFEST-OUTPUT-BUCKET
/*"
]
},
{
"Effect":"Allow",
"Action":[
"s3:PutObject",
"s3:ListBucket"
],
"Resource":[
"arn:aws:s3:::DOC-EXAMPLE-REPORT-BUCKET
",
"arn:aws:s3:::DOC-EXAMPLE-REPORT-BUCKET
/*",
"arn:aws:s3:::DOC-EXAMPLE-MANIFEST-OUTPUT-BUCKET
/*"
]
}
]
}'
-
使用下列範例命令來建立 S3DeleteObjectTagging
任務。
在此範例中,--report
區段中的值會指定將產生之任務報告的儲存貯體、字首、格式和範圍。此 --manifest -generator
區段會指定包含任務將對其執行動作之物件的來源儲存貯體的相關資訊、將為任務產生的清單檔案輸出清單的相關資訊,以及用來縮小要納入清單檔案中之物件範圍的篩選條件,包括建立日期、名稱限制、大小和儲存類別。此指令也會指定工作的優先順序、IAM角色和 AWS 區域。
如需詳細資訊,請參閱 AWS CLI 命令參考中的 create-job。
若要使用此範例命令,請以您自己的資訊取代 user input
placeholders
。Replace (取代) IAM-角色
與您之前創建的IAM角色。ARN
aws s3control create-job \
--account-id 012345678901
\
--operation '{
"S3DeleteObjectTagging": {}
}' \
--report '{
"Bucket":"arn:aws:s3:::DOC-EXAMPLE-REPORT-BUCKET
",
"Prefix":"reports
",
"Format":"Report_CSV_20180820",
"Enabled":true
,
"ReportScope":"AllTasks
"
}' \
--manifest-generator '{
"S3JobManifestGenerator": {
"ExpectedBucketOwner": "012345678901
",
"SourceBucket": "arn:aws:s3:::DOC-EXAMPLE-SOURCE-BUCKET
",
"EnableManifestOutput": true,
"ManifestOutputLocation": {
"ExpectedManifestBucketOwner": "012345678901
",
"Bucket": "arn:aws:s3:::DOC-EXAMPLE-MANIFEST-OUTPUT-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 來識別、監控或修改任務。
- Specify manifest
-
下列範例顯示如何建立 S3 Batch Operations S3PutObjectTagging
任務,讓它對現有清單檔案中列出的物件執行動作。若要使用此範例,請以您自己的資訊取代 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:::DOC-EXAMPLE-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
-
下列範例顯示如何建立 S3 Batch Operations s3PutObjectCopy
任務,讓它根據包括建立日期、索引鍵名稱和大小等物件篩選條件自動產生清單檔案。若要使用此範例,請以您自己的資訊取代 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:::DOC-EXAMPLE-SOURCE-BUCKET
";
String reportBucketName = "arn:aws:s3:::DOC-EXAMPLE-REPORT-BUCKET
";
String manifestOutputBucketName = "arn:aws:s3:::DOC-EXAMPLE-MANIFEST-OUTPUT-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();
}
}
}
您可以使用RESTAPI來建立 Batch 作業工單。如需詳細資訊,請參閱 Amazon 簡易儲存服務API參考CreateJob中的。
任務回應
如果 CreateJob
請求成功,Amazon S3 會傳回任務 ID。任務 ID 是 Amazon S3 自動產生的唯一識別符,讓您可以識別批次操作並監控其狀態。
透過、或RESTAPI建立任務時 AWS CLI AWS SDKs,可以將 S3 Batch 操作設定為自動開始處理任務。任務會在準備好後立即開始執行,而不會等待優先順序更高的任務。
當您透過 Amazon S3 主控台建立任務時,您必須檢閱任務詳細資訊,並確認您希望在 Batch Operations 開始處理任務之前執行該任務。如果任務保持在暫停狀態的時間超過 30 天,則該任務會失敗。