跟踪任务状态和完成报告
借助 S3 分批操作,您可以查看和更新任务状态、添加通知和日志记录、跟踪任务失败以及生成完成报告。
任务状态
在您创建和运行任务之后,该任务会逐步经过一系列状态。下表描述了状态以及状态之间可能的转换。
状态 | 说明 | 转换 |
---|---|---|
New |
在您创建任务时,任务首先处于 New 状态。 |
Amazon S3 开始处理清单对象时,任务自动转入 Preparing 状态。 |
Preparing |
Amazon S3 正在处理清单对象及其他任务参数,以设置和运行任务。 | Amazon S3 完成清单和其他参数的处理之后,任务自动转入 Ready 状态。然后,任务随时可以在清单中列出的对象上开始运行指定的操作。如果任务要求在运行之前确认,就像您在使用 Amazon S3 控制台创建任务时那样,则任务从 |
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-id123456789012
\ --job-id00e123a4-c0d8-41f4-a0eb-b46f9ba5b07c
\ --requested-job-status 'Ready' -
通过将任务状态设置为
Cancelled
来取消任务。aws s3control update-job-status \ --region
us-west-2
\ --account-id123456789012
\ --job-id00e123a4-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 定价
有关 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 监控并审计您的任务及其各项工作。有关更多信息,请参阅以下主题: