建立 S3 批次操作任務 - Amazon Simple Storage Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

建立 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 任務的清單檔案:

  • 手動建立自己的自訂 CSV 格式物件清單。

  • 選擇現有的 CSV 格式 Amazon S3 清查 報告。

  • 指示 Batch Operations 根據您在建立任務時指定的物件篩選條件自動產生清單檔案。此選項適用於您在 Amazon S3 主控台中建立的批次複寫任務,或使用 AWS 開發套件或 Amazon S3 REST API 建立的任何任務類型。 AWS CLI

注意
  • 無論您如何指定清單檔案,此清單本身都必須儲存在一般用途儲存貯體中。Batch Operations 無法從目錄儲存貯體匯入現有的清單檔案,或將產生的清單檔案儲存到目錄儲存貯體。不過,清單檔案內描述的物件可以儲存在目錄儲存貯體中。如需詳細資訊,請參閱目錄儲存貯體

  • 如果您清單檔案中的物件位於已進行版本控制的儲存貯體中,指定物件的版本 ID 將會指示 Batch Operations 對特定版本執行操作。如果未指定版本 ID,則 Batch Operations 會對物件的最新版本執行操作。如果您的清單檔案包含版本 ID 欄位,您必須為資訊清單中的所有物件提供一個版本 ID。

如需詳細資訊,請參閱「指定資訊清單」。

優先順序

請使用任務優先順序,指出此任務與您帳戶中執行之其他任務的相對優先順序。數字越大表示優先順序越高。

任務優先順序僅在相對於為同一帳戶和區域中的其他任務所設定的優先順序有意義。您可以選擇任何適合您的編號系統。例如,您可能想要對所有還原 (RestoreObject) 任務指派優先順序 1,對所有複製 (CopyObject) 任務指派優先順序 2,以及對所有取代存取控制清單 (ACL) (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 的政策動作

注意

對目錄儲存貯體執行動作的 Batch Operations 任務須具備特定許可。如需詳細資訊,請參閱適用於 S3 Express One Zone 的AWS Identity and Access Management (IAM)

報告

指定是否希望 S3 批次操作產生完整報告。若您要請求任務完成報告,您也必須在此元素中提供報告的參數。必要資訊包括:

  • 您希望在其中存放報告的儲存貯體

    注意

    報告必須儲存在一般用途儲存貯體中。Batch Operations 無法將報告儲存至目錄儲存貯體。如需詳細資訊,請參閱目錄儲存貯體

  • 報告的格式

  • 您希望報告包含所有任務的詳細資訊,還是僅限失敗的任務

  • 選擇性的字首字串

注意

完成報告一律使用 Amazon S3 受管金鑰 (SSE-S3) 加密。

標籤 (選用)

您可以透過新增標籤,標示和控制對 S3 批次操作任務的存取權。您可以使用標籤來識別負責 Batch Operations 任務的人員,或控制使用者與 Batch Operations 任務互動的方式。任務標籤的存在可以授與或限制使用者的以下能力:取消任務、啟動處於確認狀態的任務或變更任務的優先順序層級。例如,假設建立的任務具有標籤 "Department=Finance",您就可以授予使用者調用 CreateJob 操作的許可。

您可以建立已連接標籤的任務,也可以在建立任務後將標籤新增至任務。

如需詳細資訊,請參閱「使用標籤控制存取和標記任務」。

描述 (選用)

若要追蹤和監控任務,您也可以提供最多 256 個字元的說明。每當 Amazon S3 在 Amazon S3 主控台上傳回任務的相關資訊或顯示任務的詳細資訊時,都會包含此說明。您可以輕鬆地根據指派的描述來排序和篩選任務。描述不需要是唯一的,因此您可以使用描述作為類別 (例如「每週複製日誌任務」) 來協助您追蹤相似任務的群組。

指定資訊清單

清單檔案是 Amazon S3 物件,其中包含您希望 Amazon S3 採取行動的物件索引鍵。您可透過下列其中一種方式供應清單檔案:

  • 手動建立新的清單檔案。

  • 使用現有的清單檔案。

  • 指示 Batch Operations 根據您在建立任務時指定的物件篩選條件自動產生清單檔案。此選項適用於您在 Amazon S3 主控台中建立的批次複寫任務,或使用 AWS 開發套件或 Amazon S3 REST API 建立的任何任務類型。 AWS CLI

注意

無論您如何指定清單檔案,此清單本身都必須儲存在一般用途儲存貯體中。Batch Operations 無法從目錄儲存貯體匯入現有的清單檔案,或將產生的清單檔案儲存到目錄儲存貯體。不過,清單檔案內描述的物件可以儲存在目錄儲存貯體中。如需詳細資訊,請參閱目錄儲存貯體

建立清單檔案

若要手動建立清單檔案,您可指定清單檔案物件索引鍵、ETag (實體標籤) 和選用的版本 ID (使用 CSV 格式清單)。資訊清單的內容必須為 URL 編碼。

根據預設,Amazon S3 會自動使用採用 Amazon S3 受管金鑰 (SSE-S3) 的伺服器端加密,來加密上傳至 S3 儲存貯體的清單檔案。不支援使用以客戶提供之金鑰 (SSE-C) 進行伺服器端加密的資訊清單。只有 AWS Key Management Service 當您使用 CSV 格式的庫存報告時,才支援使用伺服器端加密 () 金鑰 (SSE-KMS) 的資訊清單。AWS KMS

您的資訊清單必須包含儲存貯體名稱、物件金鑰,也可選擇納入各物件的物件版本。S3 批次作業不會使用資訊清單中的任何其他欄位。

注意

如果您清單檔案中的物件位於已進行版本控制的儲存貯體中,指定物件的版本 ID 將會指示 Batch Operations 對特定版本執行操作。如果未指定版本 ID,則 Batch Operations 會對物件的最新版本執行操作。如果您的清單檔案包含版本 ID 欄位,您必須為資訊清單中的所有物件提供一個版本 ID。

以下為不帶版本 ID 的 CSV 格式資訊清單範例。

Examplebucket,objectkey1 Examplebucket,objectkey2 Examplebucket,objectkey3 Examplebucket,photos/jpgs/objectkey4 Examplebucket,photos/jpgs/newjersey/objectkey5 Examplebucket,object%20key%20with%20spaces

以下是包含版本 ID 的 CSV 格式清單檔案範例。

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 清查。如果庫存報告包含版本 ID,則 S3 批次作業會對特定物件版本執行操作。

    注意
    • S3 Batch Operations 支援使用 SSE-KMS 加密的 CSV 庫存報告

    • 如果您提交使用 SSE-KMS 加密的庫存報告清單檔案,您的 IAM 政策必須包含 manifest.json 物件及所有相關聯 CSV 資料檔案的許可 "kms:GenerateDataKey""kms:Decrypt"

  • CSV 檔案:檔案中的每一列都必須包含儲存貯體名稱、物件索引鍵及選用的物件版本。物件金鑰必須使用 URL 編碼,如下列範例所示。資訊清單必須包含所有物件的版本 ID,或省略所有物件的版本 ID。如需 CSV 清單檔案格式的詳細資訊,請參閱《Amazon Simple Storage Service API 參考》中的 JobManifestSpec

    注意

    S3 Batch Operations 不支援使用 SSE-KMS 加密的 CSV 清單檔案

重要

如果您使用手動建立的清單檔案和版本控制的儲存貯體時,我們建議您指定物件的版本 ID。建立任務時,S3 批次作業會在執行任務之前剖析整個資訊清單。但是,它不會為儲存貯體的狀態拍攝「快照」。

由於清單檔案可能包含數十億個物件,因此任務可能需要很長的時間來執行,這樣可能會影響任務採取行動的物件版本。假設您在任務執行時,以新版本覆寫物件,而您未指定該物件的版本 ID。在此情況下,Amazon S3 會對物件的最新版本執行操作,而非您建立任務時已存在的版本。避免此行為最簡單的方式,便是為資訊清單中列出的物件指定版本 ID。

自動產生清單檔案

您可以指示 Amazon S3 根據您在建立任務時指定的物件篩選條件自動產生清單檔案。此選項適用於您在 Amazon S3 主控台中建立的批次複寫任務,或使用 AWS 開發套件或 Amazon S3 REST API 建立的任何任務類型。 AWS CLI如需批次複寫的詳細資訊,請參閱 使用 S3 批次複寫來複寫現有物件

若要自動產生清單檔案,請在任務建立請求中指定下列元素:

  • 包含來源物件的儲存貯體相關資訊,包括儲存貯體擁有者和 Amazon Resource Name (ARN)

  • 清單檔案輸出的相關資訊,包括建立清單檔案的旗標、輸出儲存貯體擁有者、ARN、字首、檔案格式及加密類型

  • 依建立日期、索引鍵名稱、大小、儲存類別和標籤篩選物件的選用條件標準

物件篩選條件

若要篩選要包含在自動產生的清單檔案中的物件清單,您可以指定下列篩選條件。如需詳細資訊,請參閱 Amazon S3 API 參考中的 JobManifestGeneratorFilter

CreatedAfter

如有提供,則產生的清單檔案只會包含在此時間之後建立的來源儲存貯體物件。

CreatedBefore

如有提供,則產生的清單檔案只會包含在此時間之前建立的來源儲存貯體物件。

EligibleForReplication

如有提供,則產生的清單檔案只會包含根據來源儲存貯體上的複寫組態,符合複寫資格的物件。

KeyNameConstraint

如果有提供,產生的資訊清單只會包含其物件索引鍵符合為MatchAnySubstringMatchAnyPrefix和指定的字串條件約束的來源值區物件MatchAnySuffix

MatchAnySubstring— 如果提供,如果指定的字串出現在物件索引鍵字串中的任何位置,則產生的資訊清單會包含物件

MatchAnyPrefix— 如果提供,如果指定的字串出現在物件索引鍵字串的開頭,則產生的資訊清單會包含物件。

MatchAnySuffix— 如果提供,如果指定的字串出現在物件索引鍵字串的結尾,則產生的資訊清單會包含物件。

MatchAnyStorageClass

如有提供,則產生的清單檔案只會包含以指定的儲存類別儲存的來源儲存貯體物件。

ObjectReplicationStatuses

如有提供,則產生的清單檔案只會包含具有其中一種指定複寫狀態的來源儲存貯體物件。

ObjectSizeGreaterThanBytes

如有提供,則產生的清單檔案只會包含檔案大小大於所指定位元組數目的來源儲存貯體物件。

ObjectSizeLessThanBytes

如有提供,則產生的清單檔案只會包含檔案大小小於所指定位元組數目的來源儲存貯體物件。

注意

您無法複製大部分已自動產生清單檔案的任務。除非批次複寫任務使用 KeyNameConstraintMatchAnyStorageClassObjectSizeGreaterThanBytesObjectSizeLessThanBytes 清單檔案篩選條件,否則可以複製這些任務。

指定清單檔案條件的語法會根據您用來建立任務的方法而有所不同。如需範例,請參閱 建立任務

建立任務

您可以使用 Amazon S3 主控台、 AWS CLI AWS 開發套件或 Amazon S3 REST API 來建立 S3 Batch 操作任務。

如需建立任務請求的詳細資訊,請參閱 批次操作任務請求元素

必要條件

建立 Batch Operations 任務之前,請先確認您已設定相關許可。如需詳細資訊,請參閱「授予 Amazon S3 批次操作的許可」。

建立批次任務
  1. 登入 AWS Management Console 並開啟 Amazon S3 主控台,網址為 https://console.aws.amazon.com/s3/

  2. 在頁面頂端的導覽列中,選擇目前顯示的名稱 AWS 區域。接下來,選擇您要在其中建立工作的地區。

    注意

    針對複製作業,您必須在與目的地時段相同的「區域」中建立工單。對於所有其他作業,您必須在與資訊清單中的物件相同的「區域」中建立工作。

  3. 在 Amazon S3 主控台的左側導覽窗格中選擇「Batch 操作」。

  4. 選擇建立作業

  5. 檢視您AWS 區域要建立工作的位置。

  6. Manifest format (資訊清單格式) 下,選擇要使用的資訊清單物件類型。

    • 如果您選擇 S3 inventory report (S3 庫存報告),請輸入 Amazon S3 在 CSV 格式庫存報告中所產生 manifest.json 物件的路徑。若要使用最新版本以外的版本,則可選擇輸入資訊清單物件的版本 ID。

    • 如果您選擇 CSV,請輸入 CSV 格式資訊清單物件的路徑。資訊清單物件必須遵循主控台中所描述的格式。如果要使用最新版本以外的版本,則可以選擇包含資訊清單物件的版本 ID。

    注意

    Amazon S3 主控台僅支援針對批次複寫任務自動產生清單檔案。對於所有其他任務類型,如果您希望 Amazon S3 根據您指定的篩選條件自動產生資訊清單,則必須使用 AWS 開發套件或 Amazon S3 REST API 來設定您的任務。 AWS CLI

  7. 選擇 Next (下一步)。

  8. Operation (操作) 底下,選擇要對資訊清單上所有物件執行的操作。填寫您選擇的操作資訊,然後選擇 Next (下一步)。

  9. 填寫 Configure additional options (設定其他選項) 的資訊,然後選擇 Next (下一步)。

  10. Review (檢閱) 中,確認您的設定。如需變更,請選擇 Previous (上一步)。否則,請選擇 Create Job (建立任務)。

Specify manifest

下列範例顯示如何建立 S3 Batch Operations S3PutObjectTagging 任務,讓它對現有清單檔案中列出的物件執行動作。

建立批次操作 S3PutObjectTagging 任務
  1. 使用下列命令建立 AWS Identity and Access Management (IAM) 角色,然後建立 IAM 政策以指派相關許可。下列角色和政策會授予 Amazon S3 許可來新增物件標籤,您在後續步驟中建立任務時將會需要這些標籤。

    1. 使用下列範例命令來建立要供 Batch Operations 使用的 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 Resource Name (ARN)。在建立任務時,您將需要 ARN。

    2. 使用下列範例命令來建立具有必要許可的 IAM 政策,並將其連接到上一個步驟中建立的 IAM 角色。如需有關必要許可的詳細資訊,請參閱 授予 Amazon S3 批次操作的許可

      注意

      對目錄儲存貯體執行動作的 Batch Operations 任務須具備特定許可。如需詳細資訊,請參閱適用於 S3 Express One Zone 的AWS Identity and Access Management (IAM)

      若要使用此範例命令,請取代 user input placeholders,如下所示:

      • S3BatchJobRole 取代為您的 IAM 角色名稱。確定此名稱與您之前使用的名稱相符。

      • PutObjectTaggingBatchJobPolicy 取代為您要為 IAM 政策指定的名稱。

      • DOC-EXAMPLE-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:::DOC-EXAMPLE-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/*" ] } ] }'
  2. 使用下列範例命令來建立 S3PutObjectTagging 任務。

    manifest.csv 檔案提供儲存貯體和物件金鑰值的清單。該任務會將指定的標籤套用至清單檔案中識別的物件。ETagmanifest.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:::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 任務
  1. 使用下列命令建立 AWS Identity and Access Management (IAM) 角色,然後建立 IAM 政策以指派許可。下列角色和政策會授予 Amazon S3 許可來刪除物件標籤,您在後續步驟中建立任務時將會需要這些標籤。

    1. 使用下列範例命令來建立要供 Batch Operations 使用的 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 Resource Name (ARN)。在建立任務時,您將需要 ARN。

    2. 使用下列範例命令來建立具有必要許可的 IAM 政策,並將其連接到上一個步驟中建立的 IAM 角色。如需有關必要許可的詳細資訊,請參閱 授予 Amazon S3 批次操作的許可

      注意

      對目錄儲存貯體執行動作的 Batch Operations 任務須具備特定許可。如需詳細資訊,請參閱適用於 S3 Express One Zone 的AWS Identity and Access Management (IAM)

      若要使用此範例命令,請取代 user input placeholders,如下所示:

      • S3BatchJobRole 取代為您的 IAM 角色名稱。確定此名稱與您之前使用的名稱相符。

      • DeleteObjectTaggingBatchJobPolicy 取代為您要為 IAM 政策指定的名稱。

      • DOC-EXAMPLE-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:::DOC-EXAMPLE-DESTINATION-BUCKET/*" }, { "Effect":"Allow", "Action":[ "s3:PutInventoryConfiguration" ], "Resource": "arn:aws:s3:::DOC-EXAMPLE-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/*" ] } ] }'

  2. 使用下列範例命令來建立 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:::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(); } } }

您可以使用 REST API 建立批次操作任務。如需詳細資訊,請參閱《Amazon Simple Storage Service API 參考》中的 CreateJob

任務回應

如果 CreateJob 請求成功,Amazon S3 會傳回任務 ID。任務 ID 是 Amazon S3 自動產生的唯一識別符,讓您可以識別批次操作並監控其狀態。

當您透過 AWS CLI、開 AWS 發套件或 REST API 建立任務時,您可以設定 S3 Batch 操作以自動開始處理任務。任務會在準備好後立即開始執行,而不會等待優先順序更高的任務。

當您透過 Amazon S3 主控台建立任務時,您必須檢閱任務詳細資訊,並確認您希望在 Batch Operations 開始處理任務之前執行該任務。如果任務保持在暫停狀態的時間超過 30 天,則該任務會失敗。