创建 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 批量操作对清单中的对象运行的操作。每种操作类型都接受特定于该操作的参数。借助批量操作功能,您可以批量执行操作,其结果与对每个对象逐个执行该操作相同。
- 清单
-
清单是您希望 S3 批量操作对其运行指定操作的所有对象的列表。您可以使用以下方法为批量操作任务指定清单。
-
手动创建您自己自定义的 CSV 格式的对象列表。
-
选择现有的 CSV 格式的 使用 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 批量操作不支持跨区域清单生成。
无论您如何指定清单,列表本身都必须存储在通用存储桶中。批量操作无法从目录存储桶中导入现有清单,也无法将生成的清单保存到目录存储桶。但是,清单中描述的对象可以存储在目录存储桶中。有关更多信息,请参阅目录存储桶。
创建清单文件
要手动创建清单文件,您需要采用 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 批量操作根据创建任务时指定的对象筛选条件自动生成清单。此选项适用于您在 Amazon S3 控制台中创建的批量复制任务,也适用于您使用 AWS CLI、AWS SDK 或 Amazon S3 REST API 创建的任何任务类型。有关分批复制的更多信息,请参阅 使用批量复制以复制现有对象。
要自动生成清单,请在任务创建请求中指定以下元素:
-
有关包含您的源对象的存储桶的信息,包括存储桶拥有者和 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 S3 REST API 创建 S3 批量操作任务。
有关创建任务请求的更多信息,请参阅 批量操作任务请求元素。
先决条件
在创建批量操作任务之前,请确认您已配置相关权限。有关更多信息,请参阅 授予批处理操作的权限。
创建批量任务
登录到 AWS Management Console,然后通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/
。 -
在页面顶部的导航栏中,选择当前所显示 AWS 区域的名称。接下来,选择要在其中创建任务的区域。
注意
对于复制操作,必须在目标存储桶所在的同一区域中创建任务。对于所有其它操作,必须在与清单中的对象相同的区域中创建任务。
-
在 Amazon S3 控制台的左侧导航窗格中选择批量操作。
-
请选择创建任务。
-
查看要在其中创建任务的 AWS 区域。
-
在 Manifest format (清单格式) 下,请选择要使用的清单对象的类型。
-
如果您选择 S3 inventory report (S3 清单报告),请输入 Amazon S3 在 CSV 格式的清单报告中生成的 manifest.json 对象的路径,以及(可选)输入清单对象的版本 ID(如果您要使用的版本不是最新版本)。
-
如果您选择 CSV,请输入 CSV 格式清单对象的路径。清单对象必须遵循控制台中描述的格式。如果您希望使用并非最新的对象版本,则可以选择包含清单对象的版本 ID。
注意
Amazon S3 控制台仅支持对批量复制任务自动生成清单。对于其他所有任务类型,如果您希望 Amazon S3 根据您指定的筛选标准自动生成清单,则必须使用 AWS CLI、AWS SDK 或 Amazon S3 REST API 配置您的任务。
-
-
请选择 Next(下一步)。
-
在 Operation (操作) 下,请选择您希望对清单中列出的所有对象执行的操作。填写您所选操作的信息,然后选择下一步。
-
填写配置其它选项的信息,然后选择下一步。
-
对于审核,验证设置。如果需要进行更改,请选择 Previous。否则,请选择创建任务。
要使用 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 天,则它将失败。