跟踪任务状态和完成报告 - Amazon Simple Storage Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

跟踪任务状态和完成报告

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

任务状态

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

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

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

Suspended 任务需要确认,但您尚未确认希望运行任务。只有使用 Amazon S3 控制台创建的任务需要确认。使用控制台创建的任务在 Suspended 之后立即进入 Preparing 状态。在您确认希望运行任务并且任务成为 Ready 状态之后,它不会再返回 Suspended 状态。 在您确认希望运行任务之后,其状态将更改为 Ready
Ready Amazon S3 已准备好开始运行请求的对象操作。 Amazon S3 开始运行任务时,任务自动转入 Active 状态。任务保持在 Ready 状态的时间长度取决于您是否已经在运行具有较高优先级的任务,以及完成这些任务需要多长时间。
Active Amazon S3 正在对清单中列出的对象执行请求的操作。当任务处于 Active 状态时,您可使用 Amazon S3 控制台,或者通过 REST API、Amazon CLI 或 Amazon 开发工具包使用 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 状态之后,它不会转换为任何其他状态。

更新任务状态

以下 Amazon CLI 和适用于 Java 的开发工具包示例更新了分批操作任务的状态。有关使用 S3 控制台管理分批操作任务的更多信息,请参阅 使用 S3 控制台管理 S3 分批操作任务

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

    aws s3control update-job-status \ --region us-west-2 \ --account-id 181572960644 \ --job-id 00e123a4-c0d8-41f4-a0eb-b46f9ba5b07c \ --requested-job-status 'Ready'

  • 通过将任务状态设置为 Cancelled 来取消任务。

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

以下示例使用 Amazon 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(); } } }

通知和日志记录

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

注意

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

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

跟踪任务失败

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

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

注意

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

完成报告

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

完成报告包含任务配置以及每个任务的状态和信息,包括对象键和版本、状态、错误代码以及任何错误的描述。完成报告提供了以合并格式查看任务结果的简单途径,且无需进行任何附加设置。有关完成报告的示例,请参阅示例:S3 分批操作完成报告

如果您未配置完成报告,则仍可使用 CloudTrail 和 Amazon CloudWatch 监控并审核您的任务及其任务。有关更多信息,请参阅以下部分。