创建 S3 批量操作任务
借助 Amazon S3 批量操作,您可以对特定 Amazon S3 对象的列表执行大规模批量操作。本节介绍创建 S3 批量操作任务所需的信息以及 CreateJob
请求的结果。它还提供说明,讲解如何通过使用 Amazon S3 控制台、AWS Command Line Interface(AWS CLI)和 适用于 Java 的 AWS SDK 创建批量操作任务。
当您创建 S3 批量操作任务时,可以为全部任务或仅失败任务请求完成报告。只要成功调用了至少一个任务,S3 批量操作即会为已完成、已失败或已取消的任务生成报告。有关更多信息,请参阅 示例:S3 分批操作完成报告。
以下视频简要演示了如何使用 Amazon S3 控制台创建批量操作任务。
批量操作任务请求元素
要创建 S3 批量操作任务,您必须提供以下信息:
- 操作
-
指定希望 S3 批量操作对清单中的对象运行的操作。每种操作类型都接受特定于该操作的参数。借助批量操作功能,您可以批量执行操作,其结果与对每个对象逐个执行该操作相同。
- 清单
-
清单是一个 Amazon S3 对象列表,其中包含您希望 Amazon S3 采取操作的对象键。您可以使用以下方法为批量操作任务指定清单。
-
指示批量操作根据您指定的元数据生成对象列表。您可以将此列表另存为清单文件,并在创建作业时使用它。此选项适用于您使用 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 角色必须具有足够的权限来执行任务中指定的操作。例如,要运行
CopyObject
任务,IAM 角色必须具有针对源存储桶的s3:GetObject
权限和针对目标存储桶的s3:PutObject
权限。该角色还需要读取清单和写入完成报告的权限。有关 IAM 角色的更多信息,请参阅《IAM 用户指南》中的 IAM 角色。
有关 Amazon S3 权限的更多信息,请参阅 Amazon S3 的策略操作。
注意
对目录存储桶执行操作的批量操作任务需要特定的权限。有关更多信息,请参阅适用于 S3 Express One Zone 的 AWS Identity and Access Management(IAM)。
- 报告
-
指定您是否希望 S3 批量操作生成完成报告。如果您请求完成报告,还必须在此元素中提供报告的参数。需要以下信息:
-
您希望存储报告的存储桶
注意
报告必须存储在通用存储桶中。批量操作功能无法将报告保存到目录存储桶中。有关更多信息,请参阅目录存储桶。
-
报告的格式
-
您希望报告包含所有任务的详细信息还是只包含失败的任务
-
可选的前缀字符串
如果提供了
CreateJob.Report.ExpectedBucketOwner
字段,则它要求完成报告存储桶拥有者匹配。如果不匹配,则任务失败。注意
完成报告始终使用具有 Amazon S3 托管式密钥的服务器端加密(SSE-S3)来进行加密。
-
- 标签(可选)
-
您可以通过添加标签来标记和控制对 S3 批量操作任务的访问。您可以使用标签来标识谁负责批量操作任务,或者控制用户与批量操作任务的交互方式。任务标签的存在可授予或限制用户取消任务、激活处于确认状态的任务或更改任务优先级的能力。例如,您可以授予用户调用
CreateJob
操作的权限,前提是使用标签"Department=Finance"
创建此任务。您可以创建附加了标签的任务,并且可以在创建任务后向任务添加标签。
有关更多信息,请参阅 使用标签控制访问和标记任务。
- Description(可选)
-
要跟踪和监控任务,您还可以提供最多包含 256 个字符的描述。只要返回有关任务的信息或在 Amazon S3 控制台中显示任务详细信息,Amazon S3 便会包含此描述。随后您便可以根据自己分配的描述轻松地对任务进行排序和筛选。描述不一定是唯一的,因此您可以使用描述作为类别(例如“每周日志复制任务”)来帮助您跟踪多组相似的任务。
指定清单
清单是一个 Amazon S3 对象列表,其中包含您希望 Amazon S3 采取操作的对象键。您可以使用以下方法为批量操作任务指定清单。
-
指示批量操作根据您指定的元数据生成对象列表。您可以将此列表另存为清单,并在创建作业时使用它。此选项适用于您使用 Amazon S3 控制台、AWS CLI、AWS SDK 或 Amazon S3 REST API 创建的任何作业类型。
-
根据现有的复制配置自动生成对象列表。您可以将此列表另存为清单,然后再次将其用于将来的作业。
-
手动创建新的清单文件。
-
使用现有的清单。
注意
Amazon S3 批量操作不支持跨区域对象列表生成。
无论您如何指定要处理的对象,清单本身都必须存储在通用存储桶中。批量操作无法从目录存储桶中导入现有清单,也无法将生成的对象列表作为清单保存到目录存储桶。但是,清单中描述的对象可以存储在目录存储桶中。有关更多信息,请参阅目录存储桶。
自动生成对象列表并将其另存为清单文件
您可以指示 Amazon S3 根据您指定的元数据自动生成对象列表。您可以将此列表另存为清单,并在创建作业时使用它。此选项适用于您使用 Amazon S3 控制台、AWS CLI、AWS SDK 或 Amazon S3 REST API 创建的任何作业类型。
要自动生成对象列表并将其另存为清单文件,请在作业创建请求中指定以下元素:
-
有关包含源对象的存储桶的信息,包括存储桶拥有者和 Amazon 资源名称(ARN)。
-
有关清单输出的信息,包括用于创建清单文件的标志、输出存储桶拥有者、ARN、前缀、文件格式和加密类型。
-
按对象的创建日期、键名称、大小、加密类型、KMS 密钥 ARN、存储桶密钥和存储类别筛选对象的可选标准。对于复制作业,还可以使用标签来筛选对象。
对象筛选标准
要筛选要包含在自动生成的对象列表中的对象的列表,您可以指定以下标准。有关更多信息,请参阅《Amazon S3 API 参考》中的 JobManifestGeneratorFilter。
- CreatedAfter
-
如果提供,则生成的清单仅包含在此时间之后创建的源存储桶对象。
- CreatedBefore
-
如果提供,则生成的清单仅包含在此时间之前创建的源存储桶对象。
- EligibleForReplication
-
如果提供,则生成的清单仅包含根据源存储桶上的复制配置而符合复制条件的对象。
- KeyNameConstraint
-
如果提供,则生成的清单仅包含下面这样的源存储桶对象:其对象密钥与 MatchAnySubstring、MatchAnyPrefix 和 MatchAnySuffix 所指定的字符串约束相匹配。
MatchAnySubstring – 如果提供,则当指定的字符串出现在对象密钥字符串中的任何位置时,生成的清单将包含对象。
MatchAnyPrefix – 如果提供,则当指定的字符串出现在对象密钥字符串的开头时,生成的清单将包含对象。
MatchAnySuffix – 如果提供,则当指定的字符串出现在对象密钥字符串的末尾时,生成的清单将包含对象。
- MatchAnyObjectEncryption
-
如果提供,则保存为清单文件的已生成对象列表仅包含采用指定的服务器端加密类型(SSE-S3、SSE-KMS、DSSE-KMS、SSE-C 或 NOT-SSE)的源存储桶对象。如果您选择 SSE-KMS 或 DSSE-KMS,则可以选择通过指定特定的 KMS 密钥 ARN 来进一步筛选结果。如果您选择 SSE-KMS,还可以选择按存储桶密钥启用状态来进一步筛选结果。
- MatchAnyStorageClass
-
如果提供,则生成的清单仅包含以指定存储类存储的源存储桶对象。
- ObjectReplicationStatuses
-
如果提供,则生成的清单仅包含具有指定复制状态之一的源存储桶对象。
- ObjectSizeGreaterThanBytes
-
如果提供,则生成的清单仅包含文件大小大于指定字节数的源存储桶对象。
- ObjectSizeLessThanBytes
-
如果提供,则生成的清单仅包含文件大小小于指定字节数的源存储桶对象。
注意
您无法克隆大多数将自动生成的对象列表另存为清单的作业。可以克隆批量复制任务,除非它们使用 KeyNameConstraint
、MatchAnyStorageClass
、ObjectSizeGreaterThanBytes
或 ObjectSizeLessThanBytes
清单筛选标准。
指定清单标准的语法因您用于创建任务的方法而异。有关示例,请参阅 创建作业。
创建清单文件
要手动创建清单文件,您需要采用 CSV 格式列表的形式,指定清单对象键、ETag(实体键)和可选的版本 ID。清单的内容必须是 URL 编码的。
默认情况下,Amazon S3 自动使用具有 Amazon S3 托管密钥的服务器端加密(SSE-S3)对上传到 Amazon S3 存储桶的清单进行加密。不支持使用具有客户提供密钥(SSE-C)的服务器端加密的清单。仅当使用 CSV 格式的清单报告时,才支持使用具有 AWS Key Management Service(AWS KMS)密钥的服务器端加密(SSE-KMS)的清单。不支持将手动创建的清单与 AWS KMS 一起使用。
您的清单必须包括存储桶名称、对象键以及(可选)每个对象的对象版本。S3 批量操作不使用清单中的任何其他字段。
注意
如果清单中的对象位于受版本控制的存储桶中,指定对象的版本 ID 时,批量操作将在特定版本上执行此操作。如果未指定版本 ID,则批量操作将针对最新对象版本执行该操作。如果您的清单包含版本 ID 字段,则必须为清单中的所有对象提供版本 ID。
下面是 CSV 格式的没有版本 ID 的清单示例。
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 格式的包含版本 ID 的清单示例。
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 清单对数据进行编目和分析。如果清单报告包括版本 ID,S3 批量操作将对特定对象版本进行操作。注意
-
S3 批量操作支持用 SSE-KMS 加密的 CSV 格式清单报告。
-
如果您提交使用 SSE-KMS 加密的清单报告清单,则 IAM 策略必须包含对于
manifest.json
对象以及所有关联 CSV 数据文件的"kms:Decrypt"
和"kms:GenerateDataKey"
权限。
-
-
CSV 文件 – 文件中的每一行必须包括存储桶名称和对象键,还可选择包括对象版本。对象键必须进行 URL 编码,如以下示例所示。清单必须包含所有对象的版本 ID 或忽略所有对象的版本 ID。有关 CSV 清单格式的更多信息,请参阅《Amazon Simple Storage Service API 参考》中的 JobManifestSpec。
注意
S3 批量操作不支持使用 SSE-KMS 加密的 CSV 清单文件。
重要
当您使用手动创建的清单和受版本控制的存储桶时,我们建议您指定对象的版本 ID。创建任务时,S3 批量操作会在运行任务之前解析整个清单。不过,它不会获取存储桶状态的“快照”。
由于清单可以包含数十亿个对象,因此任务可能需要很长时间才能运行完,这可能会影响任务所针对的对象版本。假设您在任务运行时用新版本覆盖某个对象,但未指定该对象的版本 ID。在这种情况下,Amazon S3 将对该对象的最新版本(而不是在创建作业时存在的版本)执行操作。避免此行为的唯一方式是为清单中列出的对象指定版本 ID。
创建作业
您可以使用 Amazon S3 控制台、AWS CLI、AWS SDK 或 Amazon S3 REST API 创建 S3 批量操作任务。
有关创建任务请求的更多信息,请参阅 批量操作任务请求元素。
先决条件
在创建批量操作任务之前,请确认您已配置相关权限。有关更多信息,请参阅 授予批处理操作的权限。
使用 S3 控制台创建批量操作作业
登录到 AWS Management Console,然后通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/
。 -
在 Amazon S3 控制台的左侧导航窗格中选择批量操作。
-
请选择创建任务。
-
在选择区域和范围下,选择并查看要在其中创建作业的 AWS 区域。
注意
对于复制操作,必须在目标存储桶所在的同一区域中创建任务。对于所有其它操作,必须在与清单中的对象相同的区域中创建任务。
-
对于范围,指定批量操作作业将要处理的对象的列表。
在对象列表下,您可以选择使用对象列表生成清单、使用复制配置生成清单或使用现有清单。
-
如果选择生成对象列表,则会根据您指定的源位置和元数据自动生成对象列表。您可以将此列表另存为清单,然后再次将其用于将来的作业。
注意
注意:要生成对象列表,您必须拥有
s3:PutInventoryConfiguration
权限。源存储桶必须是通用存储桶。 -
如果您选择使用现有清单,则可以从现有清单中导入对象列表。清单是一个 S3 清单报告或 CV 文件,其中列出了您希望批量操作处理的特定对象。
-
如果选择使用复制配置,则可以根据现有的复制配置自动生成对象列表。您可以将此列表另存为清单,然后再次将其用于将来的作业。
对于本示例,选择生成对象列表。
-
-
对于源账户,选择拥有源对象的账户。
-
在源下,输入指向源的路径,例如
s3://
amzn-s3-demo-bucket
。 -
在对象筛选条件下,可以使用筛选条件按对象键的任意部分进行筛选,也可以按对象键的末尾进行筛选。对象键筛选条件有助于细化清单中要使用的对象的列表。对于对象元数据筛选条件,请选择筛选条件以进一步定义要包含在清单中的对象的范围。
-
在选择操作下,选择您希望对清单中列出的所有对象执行的操作类型。如果您的清单引用存储在目录存储桶中的对象,则只能使用复制或调用 AWS Lambda 函数操作。不支持所有其它操作
选择操作类型后,选择下一步。
填写配置其它选项的信息,然后选择下一步。
对于审核,验证设置。如果需要进行更改,请选择上一步。否则,可以选择创建作业。
要使用 AWS CLI 创建批量操作任务,请根据您是指定现有清单还是自动生成清单,选择以下示例之一。
要使用适用于 Java 的 AWS SDK 创建批量操作任务,根据您是指定现有清单还是自动生成清单,可以在两种方法之间进行选择:
-
指定现有清单:创建 S3 批量操作任务(例如
S3PutObjectTagging
),以便处理现有清单文件中列出的对象。这种方法要求您提供清单位置、ETag 和格式规范。 -
自动生成清单:创建 S3 批量操作任务(例如
s3PutObjectCopy
),以便根据对象筛选条件(包括创建日期、键名称和大小约束)自动生成清单。
这两种方法都使用 S3Control 客户端来配置任务操作、清单规范、任务报告、IAM 角色和其它任务参数,包括优先级和确认要求。
有关如何使用适用于 Java 的 AWS SDK 创建 S3 批量操作任务的示例,请参阅《Amazon S3 API Reference》中的 Create a batch job to copy objects。
您可以使用 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 天,则它将失败。