本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
建立 S3 批次操作任務
您可以使用 Amazon S3 Batch Operations,在特定 Amazon S3 物件清單上執行大規模的批次操作。本節說明建立 S3 批次操作任務所需的資訊,以及 CreateJob
要求的結果,它還提供使用 Amazon S3 主控台 AWS Command Line Interface (AWS CLI) 和 建立批次操作任務的說明 AWS SDK for Java。
建立 S3 批次操作任務時,您可以請求所有任務或僅限失敗任務的完成報告。只要順利叫用至少一個任務,S3 Batch Operations 就會產生已完成、失敗或已取消任務的報告。如需詳細資訊,請參閱範例:S3 批次操作完成報告。
下列影片提供如何使用 Amazon S3 主控台建立 Batch Operations 任務的簡短示範。
批次操作任務請求元素
若要建立 S3 批次操作任務,您必須提供下列資訊:
- 操作
-
請指定希望 S3 批次操作針對資訊清單中物件執行的操作。每個操作類型都接受該操作特有的參數。使用批次操作,您可以大量執行操作,其結果與在每個物件上執行該 operation one-by-one 的結果相同。
- 清單檔案
-
清單檔案是您希望 S3 Batch Operations 對其執行指定操作的所有物件的清單。您可以使用下列方法指定 Batch Operations 任務的清單檔案:
-
無論您如何指定清單檔案,此清單本身都必須儲存在一般用途儲存貯體中。Batch Operations 無法從目錄儲存貯體匯入現有的清單檔案,或將產生的清單檔案儲存到目錄儲存貯體。不過,清單檔案內描述的物件可以儲存在目錄儲存貯體中。如需詳細資訊,請參閱目錄儲存貯體。
-
如果您資訊清單中的物件位於版本控制的儲存貯體中,指定物件的版本 IDs 會指示批次操作在特定版本上執行操作。如果未指定版本 IDs,批次操作會在最新版本的物件上執行操作。如果您的清單檔案包含版本 ID 欄位,您必須為資訊清單中的所有物件提供一個版本 ID。
如需詳細資訊,請參閱「指定資訊清單」。
- 優先順序
-
請使用任務優先順序,指出此任務與您帳戶中執行之其他任務的相對優先順序。數字越大表示優先順序越高。
任務優先順序僅在相對於為同一帳戶和區域中的其他任務所設定的優先順序有意義。您可以選擇任何適合您的編號系統。例如,您可能想要將所有還原 (RestoreObject
) 任務的優先順序指定為 1,所有複製 (CopyObject
) 任務的優先順序指定為 2,所有取代存取控制清單 (ACLs) (PutObjectAcl
) 任務的優先順序指定為 3。
S3 Batch Operations 會根據優先順序編號來排序任務的優先順序,但不保證嚴格排序。因此,請不要使用任務優先順序來確保其中任何一個任務會在其他任務之前啟動或完成。若您必須確保嚴格排序,請等待一個任務完成之後,再啟動下一個任務。
- RoleArn
-
指定要執行任務的 AWS Identity and Access Management (IAM) 角色。您使用的 IAM 角色必須具有足夠的許可,才能執行任務中指定的操作。例如,若要執行CopyObject
任務,IAM 角色必須具有來源儲存貯體的s3:GetObject
許可和目的地儲存貯體的s3:PutObject
許可。角色也需要讀取資訊清單,以及寫入任務完成報告的許可。
如需 IAM 角色的詳細資訊,請參閱 IAM 使用者指南中的 Word 角色。 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 採取行動的物件索引鍵。您可透過下列其中一種方式供應清單檔案:
建立清單檔案
若要手動建立資訊清單檔案,您可以在 ETag 格式清單中指定資訊清單物件索引鍵、CSV (實體標籤) 和選用版本 ID。資訊清單的內容必須為 URL 編碼。
根據預設,Amazon S3 會自動使用伺服器端加密搭配 Amazon S3 受管金鑰 (SSE-S3) 來加密上傳至 Amazon S3 儲存貯體的資訊清單。不支援使用伺服器端加密搭配客戶提供金鑰 (SSE-C) 的清單。只有在您使用 SSE 格式的庫存報告時,才支援使用伺服器端加密搭配 AWS Key Management Service (AWS KMS) 金鑰 (CSV-KMS) 的清單。 AWS KMS 不支援搭配 使用手動建立的資訊清單。
您的資訊清單必須包含儲存貯體名稱、物件金鑰,也可選擇納入各物件的物件版本。S3 批次作業不會使用資訊清單中的任何其他欄位。
如果您資訊清單中的物件位於版本控制的儲存貯體中,指定物件的版本 IDs 會指示批次操作在特定版本上執行操作。如果未指定版本 IDs,批次操作會在最新版本的物件上執行操作。如果您的清單檔案包含版本 ID 欄位,您必須為資訊清單中的所有物件提供一個版本 ID。
以下是不含 CSV 版本之 IDs 格式的範例清單。
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
以下是 CSV 格式的範例資訊清單,其中包含 IDs 版本。
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 庫存編製目錄和分析資料。如果庫存報告包含 IDs 版本,S3 批次操作會在特定物件版本上運作。
-
CSV 檔案 – 檔案中的每一列都必須包含儲存貯體名稱、物件金鑰,以及選用的物件版本。物件金鑰必須使用 URL 編碼,如下列範例所示。資訊清單必須包含所有物件的 IDs 版本,或省略所有物件的 IDs 版本。如需 CSV 資訊清單格式的詳細資訊,請參閱 JobManifestSpec 在 Amazon Simple Storage Service API 參考中。
S3 批次操作不支援使用 CSV-KMS 加密的 SSE 資訊清單檔案。
當您使用手動建立的資訊清單和版本控制的儲存貯體時,建議您指定物件的 IDs 版本。建立任務時,S3 批次作業會在執行任務之前剖析整個資訊清單。但是,它不會為儲存貯體的狀態拍攝「快照」。
由於清單檔案可能包含數十億個物件,因此任務可能需要很長的時間來執行,這樣可能會影響任務採取行動的物件版本。假設您在任務執行時,以新版本覆寫物件,而您未指定該物件的版本 ID。在此情況下,Amazon S3 會對物件的最新版本執行操作,而非您建立任務時已存在的版本。避免此行為的唯一方法是為清單清單中列出的物件指定 IDs 版本。
自動產生清單檔案
您可以指示 Amazon S3 根據您在建立任務時指定的物件篩選條件自動產生清單檔案。此選項適用於您在 Amazon S3 主控台中建立的批次複寫任務,或是您使用 AWS CLI、 AWS SDKs 或 Amazon S3 REST 建立的任何任務類型API。如需批次複寫的詳細資訊,請參閱 使用批次複寫複寫複寫現有物件。
若要自動產生清單檔案,請在任務建立請求中指定下列元素:
-
包含來源物件的儲存貯體相關資訊,包括儲存貯體擁有者和 Amazon Resource Name (ARN)
-
資訊清單輸出的相關資訊,包括建立資訊清單檔案的旗標、輸出儲存貯體擁有者、ARN、字首、檔案格式和加密類型
-
依物件建立日期、金鑰名稱、大小和儲存體類別篩選物件的選用條件。在複寫任務中,您也可以使用標籤來篩選物件。
物件篩選條件
若要篩選要包含在自動產生的清單檔案中的物件清單,您可以指定下列篩選條件。如需詳細資訊,請參閱 JobManifestGeneratorFilter 在 Amazon S3 API 參考中。
- CreatedAfter
-
如有提供,則產生的清單檔案只會包含在此時間之後建立的來源儲存貯體物件。
- CreatedBefore
-
如有提供,則產生的清單檔案只會包含在此時間之前建立的來源儲存貯體物件。
- EligibleForReplication
-
如有提供,則產生的清單檔案只會包含根據來源儲存貯體上的複寫組態,符合複寫資格的物件。
- KeyNameConstraint
-
如果提供,產生的清單僅包含物件索引鍵符合 MatchAnySubstring、MatchAnyPrefix 和 MatchAnySuffix 指定字串限制的來源儲存貯體物件。
MatchAnySubstring – 如果提供,則產生的資訊清單會包含物件,如果指定的字串出現在物件索引鍵字串中的任何位置。
MatchAnyPrefix – 如果提供,則產生的資訊清單會包含物件,如果指定的字串出現在物件金鑰字串的開頭。
MatchAnySuffix – 如果提供,則產生的資訊清單會包含物件,如果指定的字串出現在物件金鑰字串的結尾。
- MatchAnyStorageClass
-
如有提供,則產生的清單檔案只會包含以指定的儲存類別儲存的來源儲存貯體物件。
- ObjectReplicationStatuses
-
如有提供,則產生的清單檔案只會包含具有其中一種指定複寫狀態的來源儲存貯體物件。
- ObjectSizeGreaterThanBytes
-
如有提供,則產生的清單檔案只會包含檔案大小大於所指定位元組數目的來源儲存貯體物件。
- ObjectSizeLessThanBytes
-
如有提供,則產生的清單檔案只會包含檔案大小小於所指定位元組數目的來源儲存貯體物件。
您無法複製大部分已自動產生清單檔案的任務。除非批次複寫任務使用 KeyNameConstraint
、MatchAnyStorageClass
、ObjectSizeGreaterThanBytes
或 ObjectSizeLessThanBytes
清單檔案篩選條件,否則可以複製這些任務。
指定清單檔案條件的語法會根據您用來建立任務的方法而有所不同。如需範例,請參閱 建立任務。
建立任務
您可以使用 Amazon S3 主控台、 AWS CLI AWS SDKs 或 Amazon S3 Word 來建立 S3 批次操作任務API。 Amazon S3 REST
如需建立任務請求的詳細資訊,請參閱 批次操作任務請求元素。
必要條件
建立 Batch Operations 任務之前,請先確認您已設定相關許可。如需詳細資訊,請參閱「授予批次操作的許可」。
建立批次任務
登入 AWS Management Console 並在 Word 開啟 Amazon S3 主控台。 https://console.aws.amazon.com/s3/
-
在頁面頂端的導覽列中,選擇目前顯示的 名稱 AWS 區域。接下來,選擇您要建立任務的區域。
對於複製操作,您必須在與目的地儲存貯體相同的區域中建立任務。對於所有其他操作,您必須在與資訊清單中的物件相同的區域中建立任務。
-
在 Amazon S3 主控台的左側導覽窗格中選擇批次操作。
-
選擇建立作業。
-
檢視您要建立任務AWS 區域的 。
-
在 Manifest format (資訊清單格式) 下,選擇要使用的資訊清單物件類型。
Amazon S3 主控台僅支援針對批次複寫任務自動產生清單檔案。對於所有其他任務類型,如果您希望 Amazon S3 根據您指定的篩選條件自動產生資訊清單,則必須使用 AWS CLI、 AWS SDKs 或 Amazon S3 REST 來設定任務API。
-
選擇 Next (下一步)。
-
在 Operation (操作) 底下,選擇要對資訊清單上所有物件執行的操作。填寫您選擇的操作資訊,然後選擇 Next (下一步)。
-
填寫 Configure additional options (設定其他選項) 的資訊,然後選擇 Next (下一步)。
-
在 Review (檢閱) 中,確認您的設定。如需變更,請選擇 Previous (上一步)。否則選擇建立任務。
若要使用 建立批次操作任務 AWS CLI,請選擇下列其中一個範例,取決於您是指定現有資訊清單還是自動產生資訊清單。
- Specify manifest
-
下列範例示範如何使用 AWS CLI 建立 S3 批次操作S3PutObjectTagging
任務,以對現有資訊清單檔案中列出的物件採取行動。
透過指定資訊清單來建立批次操作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 Resource Name (ARN)。建立任務時,您需要 ARN。
-
使用下列範例命令建立具有必要許可的 IAM 政策,並將其連接至您在上一個步驟中建立的 IAM 角色。如需有關必要許可的詳細資訊,請參閱 授予批次操作的許可。
若要使用此範例命令,請取代 user input
placeholders
,如下所示:
-
S3BatchJobRole
以 IAM 角色的名稱取代 。確定此名稱與您之前使用的名稱相符。
-
PutObjectTaggingBatchJobPolicy
將 取代為您要提供 IAM 政策的名稱。
-
將 amzn-s3-demo-destination-bucket
取代為包含您要套用標籤之物件的儲存貯體名稱。
-
Replace (取代) amzn-s3-demo-manifest-bucket
包含資訊清單的儲存貯體名稱。
-
Replace (取代) 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
命令進行確認就可以執行任務。如需詳細資訊,請參閱 create-job 在 AWS CLI 命令參考 中。
若要使用此範例命令,請以您自己的資訊取代 user input
placeholders
。Replace (取代) IAM-role
以及您先前建立的 ARN 角色的 IAM。
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
-
下列範例顯示如何建立 S3 Batch Operations S3DeleteObjectTagging
任務,讓它根據您的物件篩選條件自動產生清單檔案。此條件包括建立日期、索引鍵名稱、大小、儲存類別和標籤。
透過產生資訊清單來建立批次操作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 Resource Name (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 區域。
如需詳細資訊,請參閱 create-job 在 AWS CLI 命令參考 中。
若要使用此範例命令,請以您自己的資訊取代 user input
placeholders
。Replace (取代) IAM-role
以及您先前建立的 ARN 角色的 IAM。
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,請選擇下列其中一個範例,取決於您是指定現有清單還是自動產生清單。
- 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:::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
-
下列範例顯示如何建立 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:::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建立批次操作任務。如需詳細資訊,請參閱 CreateJob 在 Amazon Simple Storage Service API 參考中。
任務回應
如果 CreateJob
請求成功,Amazon S3 會傳回任務 ID。任務 ID 是 Amazon S3 自動產生的唯一識別符,讓您可以識別批次操作並監控其狀態。
當您透過 AWS CLI、 AWS SDKs 或 REST 建立任務時API,您可以將 S3 批次操作設定為自動開始處理任務。任務會在準備好後立即開始執行,而不會等待優先順序更高的任務。
當您透過 Amazon S3 主控台建立任務時,您必須檢閱任務詳細資訊,並確認您希望在 Batch Operations 開始處理任務之前執行該任務。如果任務保持在暫停狀態的時間超過 30 天,則該任務會失敗。