跟踪任务状态和完成报告 - Amazon Simple Storage Service

跟踪任务状态和完成报告

借助 S3 分批操作,您可以查看和更新任务状态、添加通知和日志记录、跟踪任务失败以及生成完成报告。

任务状态

在您创建和运行任务之后,该任务会逐步经过一系列状态。下表描述了状态以及状态之间可能的转换。

状态 说明 转换
New 在您创建任务时,任务首先处于 New 状态。 Amazon S3 开始处理清单对象时,任务自动转入 Preparing 状态。
Preparing Amazon S3 正在处理清单对象及其他任务参数,以设置和运行任务。 Amazon S3 完成清单和其他参数的处理之后,任务自动转入 Ready 状态。然后,任务随时可以在清单中列出的对象上开始运行指定的操作。

如果任务要求在运行之前确认,就像您在使用 Amazon S3 控制台创建任务时那样,则任务从 Preparing 转换为 Suspended。在您确认希望运行之前,任务将保持在 Suspended 状态。

Suspended 任务需要确认,但您尚未确认您想要运行该任务。只有使用 Amazon S3 控制台创建的任务需要确认。使用控制台创建的任务在 Preparing 之后立即进入 Suspended 状态。在您确认希望运行任务并且任务成为 Ready 状态之后,它不会再返回 Suspended 状态。 在您确认希望运行任务之后,其状态将更改为 Ready
Ready Amazon S3 已准备好开始运行请求的对象操作。 Amazon S3 开始运行任务时,任务自动转入 Active 状态。任务保持在 Ready 状态的时间长度取决于您是否已经在运行具有较高优先级的任务,以及完成这些任务需要多长时间。
Active Amazon S3 正在对清单中列出的对象执行请求的操作。当任务处于 Active 状态时,您可使用 Amazon S3 控制台,或者通过 REST API、AWS CLI 或 AWS 开发工具包使用 DescribeJob 操作监控其进度。 当任务不再在对象上运行操作时,该任务就移出 Active 状态。此行为自动发生,例如在任务成功完成或失败时。或者,此行为也可作为用户操作的结果发生,例如取消某个任务。任务转入的状态取决于发生转换的原因。
Pausing 任务从其他状态转换为 Paused Paused 阶段完成时,任务自动转入 Pausing 状态。
Paused 在当前任务正在运行时,如果您提交了具有更高优先级的其他任务,任务可以进入 Paused 状态。 对于处于 Paused 状态的任务,如果阻止了该任务的任何较高优先级的任务执行完成、失败或暂停,则该任务自动返回 Active 状态。
Complete 任务已完成对清单中所有对象执行请求的操作。对于每个对象,操作可能成功或失败。如果您配置任务生成完成报告,则在任务处于 Complete 状态之后报告立即可用。 Complete 是最终状态。任务一旦进入 Complete 状态,就不会转换为任何其它状态。
Cancelling 任务转换为 Cancelled 状态。 Cancelled 阶段完成时,任务自动转入 Cancelling 状态。
Cancelled 您请求取消任务,而 S3 批量操作已成功取消了任务。任务将不会向 Amazon S3 提交任何新请求。 Cancelled 是最终状态。任务进入 Cancelled 状态之后,就不会转换为任何其它状态。
Failing 任务转换为 Failed 状态。 Failed 阶段完成后,任务自动转入 Failing 状态。
Failed 任务已失败,不再运行。有关任务失败的更多信息,请参阅 跟踪任务失败 Failed 是最终状态。任务进入 Failed 状态之后,就不会转换为任何其它状态。

更新任务状态

以下 AWS CLI 和AWS SDK for Java 示例更新批量操作任务的状态。有关使用 Amazon S3 控制台管理批量操作任务的更多信息,请参阅使用 Amazon S3 控制台管理 S3 分批操作任务

要使用以下示例命令,请将 user input placeholders 替换为您自己的信息。

  • 如果未在 create-job 命令中指定 --no-confirmation-required 参数,则任务将保持为暂停状态,直至通过将其状态设置为 Ready 来确认任务。然后,Amazon S3 会使任务符合执行的条件。

    aws s3control update-job-status \ --region us-west-2 \ --account-id 123456789012 \ --job-id 00e123a4-c0d8-41f4-a0eb-b46f9ba5b07c \ --requested-job-status 'Ready'
  • 通过将任务状态设置为 Cancelled 来取消任务。

    aws s3control update-job-status \ --region us-west-2 \ --account-id 123456789012 \ --job-id 00e123a4-c0d8-41f4-a0eb-b46f9ba5b07c \ --status-update-reason "No longer needed" \ --requested-job-status Cancelled

以下示例使用AWS SDK for Java 来更新 S3 批量操作任务的状态。

有关任务状态的更多信息,请参阅 跟踪任务状态和完成报告

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.UpdateJobStatusRequest; import static com.amazonaws.regions.Regions.US_WEST_2; public class UpdateJobStatus { public static void main(String[] args) { String accountId = "Account ID"; String jobId = "00e123a4-c0d8-41f4-a0eb-b46f9ba5b07c"; try { AWSS3Control s3ControlClient = AWSS3ControlClient.builder() .withCredentials(new ProfileCredentialsProvider()) .withRegion(US_WEST_2) .build(); s3ControlClient.updateJobStatus(new UpdateJobStatusRequest() .withAccountId(accountId) .withJobId(jobId) .withRequestedJobStatus("Ready")); } 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(); } } }

通知和日志记录

除了请求完成报告外,还可以使用 AWS CloudTrail 捕获、查看和审计批量操作活动。由于批量操作使用现有的 Amazon S3 API 操作来执行任务,因此,这些任务还会发出与您直接调用这些操作时相同的事件。因此,可以使用相同的通知、日志记录和审计工具以及已用于 Amazon S3 的过程,来跟踪和记录任务及其所有工作的进度。有关更多信息,请参阅以下部分中的示例。

注意

批量操作会在任务执行期间在 CloudTrail 中同时生成管理事件和数据事件。这些事件的数量随每个任务的清单中的键数量而扩展。有关更多信息,请参阅 CloudTrail 定价页面,其中包括定价如何根据您在账户中配置的跟踪数量而变化的示例。要了解如何配置和记录事件以满足您的需求,请参阅《AWS CloudTrail 用户指南》中的创建您的第一个跟踪

有关 Amazon S3 事件的更多信息,请参阅 Amazon S3 事件通知

跟踪任务失败

如果 S3 分批操作任务遇到的问题使其无法成功运行(如无法读取指定清单),则该任务失败。任务失败时,系统会生成一个或多个故障代码或失败原因。S3 批量操作将故障代码和原因与任务一起存储,便于您通过请求任务的详细信息来查看它们。如果您请求任务的完成报告,同时还会显示故障代码和原因。

为防止任务运行大量不成功的操作,Amazon S3 会对每个分批操作任务施加任务失败阈值。当任务已运行至少 1000 项工作时,Amazon S3 将监控工作失败率。在任何时刻,如果失败率(失败的任务数占已运行任务总数的比例)超过 50%,则任务失败。如果任务由于超过了任务失败阈值而失败,您可以确定造成失败的原因。例如,您可能在清单中意外地包括了一些指定存储桶中不存在的对象。修复错误之后,您可以重新提交任务。

注意

S3 批量操作异步进行操作,而工作并不一定按照清单中列出对象的顺序来运行。因此您不能使用清单顺序来确定哪些对象的任务成功,哪些对象的任务失败。而是可以通过查看任务的完成报告(如果已请求)或查看 AWS CloudTrail 事件日志来帮助确定失败原因。

完成报告

在创建任务时,您可以请求完成报告。只要 S3 批量操作成功调用至少一项工作,Amazon S3 便会在任务完成运行工作、失败或被取消后生成完成报告。可对完成报告进行配置,以包含所有任务或只包含失败的任务。

完成报告包含任务配置、状态以及每项工作的信息,包括对象键和版本、状态、错误代码以及有关任何错误的描述。完成报告提供了以合并格式查看任务结果的简单途径,且无需进行任何附加设置。完成报告使用具有 Amazon S3 托管式密钥的服务器端加密(SSE-S3)来进行加密。有关完成报告的示例,请参阅 示例:S3 分批操作完成报告

如果您未配置完成报告,则仍可使用 CloudTrail 和 Amazon CloudWatch 监控并审计您的任务及其各项工作。有关更多信息,请参阅以下主题: