对 亚马逊云科技 Backup 的自动前脚本和后脚本进行故障排除

客户可以使用带有解耦任务的事件驱动架构来自动化和协调备份任务的自定义脚本。在事件驱动架构中,故障排除是了解组件级别故障的关键,这样才能解决出现的问题并保持整个自动化工作流程平稳运行。

在这个由两部分组成的博客系列 的第一篇文章 中,我们展示了如何利用 亚马逊云科技 Backup、亚马逊云科技 Step Fun ctions 和 亚马逊云科技 Systems Manager 部署自动解决方案, 以便在备份之前或之后运行自定义脚本。部署的解决方案允许您计划和协调多个 亚马逊云科技 资源的备份,管理其生命周期,并保护它们免受未经授权的操作。如果你还没有在目标账户中部署解决方案,那么参考 第一篇文章 开始吧。

在这篇文章中,我们将重点介绍对 Step Functions 执行路径进行故障排除,每当执行导致失败时,都会密切关注这些组件。

了解输入 JSON

用于自定义调用、定时调用或手动调用状态机的输入遵循严格的模式。 请参阅 Readme.md 中的 属性部分 ,了解可以在输入 JSON 中传递哪些支持的属性。根据您在输入中指定的属性,当前解决方案支持八条执行路径。

  1. 一切都已启用:执行预脚本 | 停止 EC2 实例 | 运行备份任务 | 启动 EC2 实例 | 执行后脚本 | 在 DynamoDB 表中记录详细信息。
  2. 无发布脚本:执行预脚本 | 停止 EC2 实例 | 运行备份任务 | 启动 EC2 实例 | 在 DynamoDB 表中记录详细信息。
  3. 无预脚本:停止 EC2 实例 | 运行备份任务 | 执行后脚本 | 启动 EC2 实例 | 在 DynamoDB 表中记录执行详情。
  4. 没有前置和事后脚本:停止 EC2 实例 | 运行备份任务 | 启动 EC2 实例 | 在 DynamoDB 表中记录执行详情。
  5. 未终止实例;其他所有功能均已启用:执行预脚本 | 运行备份作业 | 执行后脚本 | 在 DynamoDB 表中记录详细信息。
  6. 不终止实例,没有后置脚本:执行预脚本 | 运行备份作业 | 在 DynamoDB 表中记录详细信息。
  7. 不终止实例,没有预脚本:运行备份作业 | 执行后脚本 | 在 DynamoDB 表中记录详细信息。
  8. 不终止实例,没有前后脚本:运行备份作业 | 在 DynamoDB 表中记录详细信息。

有关根据您的 用例启用和禁用这些配置的更多信息,请参阅本 文档

故障排除

在具有解耦任务的事件驱动架构中,您必须了解哪些组件可能出现故障以及如何解决这些问题。本节简要概述了如何排除故障并知道应从何处查找。

状态机

每个状态机执行都将有一个图形视图,您可以在其中可视化对不同状态进行颜色编码的工作流程(图 1)。如果在任何步骤中出现错误,则可以选择以红色突出显示的单个失败步骤来获取有关该错误的更多详细信息。下图是成功执行步骤的示例。它提供以下内容:

  • 输入和输出 :发送到步骤的输入和相应的输出。如果任何步骤失败,则此处将显示失败详情。
  • 详情 :您可以查看支持此步骤的资源,在本例中为 亚马逊云科技 L am bda 函数,以及与该步骤对应的日志。

Diagram showing StopEC2Instance step details in the state machine

图 1:显示状态机中 stopec2Instance 步骤详细信息的示意图

Amazon DynamoDB

每个关于失败的边缘案例都没有记录在 亚马逊 DynamoDB 表中。这可能是未来的增强。在这里,DynamoDB 表主要用于内务管理,管理员可以在其中回顾运行的历史作业以及已执行的受影响目标和脚本。该表由四个属性组成。

  • sm_execution_ID:执行 步骤函数的亚马逊资源名称 (ARN)
  • 开始时间:执行的开始时间。
  • 结束时间:执行的结束时间。
  • Workflow_Overall_Status:它包含实例列表以及每项操作的状态,即停止 EC2 实例、运行预脚本、运行备份、启动 EC2 实例、运行后脚本。

以下是 Workflow_Overall_Status 代码段示例,供您参考:

[     
     {         
         "InstanceId": "i-0d7ac8ebf0957190a",
         "PreBackupScriptStatus": "Success",
         "StopEc2InstanceStatus": "skipped",
         "BackupJobStatus": "COMPLETED",
         "PostBackupScriptStatus": "Success",
         "StartEc2InstanceStatus": "skipped",
         "FailureMessage": ""
     } 
]

备份作业

使用唯一的 backupJobid 为每个实例创建了一个 备份任务。 如果备份任务花费的时间过长,则可以从步骤函数步骤 r unbackupJob 中获取此 ID, 并使用 亚马逊云科技 命令行接口 (亚马逊云科技 CLI ) 或 亚马逊云科技 开发工具包 检查备份任务 的状态, 对执行进行故障排除。另一项检查是在输入中指定的备份库中创建的恢复点的状态。

有关对备份任务进行故障排除的更多信息,请参阅 亚马逊云科技 Backup 文档 的故障排除部分 。

亚马逊云科技 Systems Manager

该解决方案利用系统管理器的运行命令在目标 EC2 实例上执行脚本。要对任何运行命令失败进行故障排除,请 从状态机步骤的输入和输出部分获取 Comman dID ,然后在 S ystems Manager 控制台 中查看其详细信息。 你还可以在输入 “outputs3B ucketName”、 “outputs3 KeyPrefix” 中为远程运行命令提供的输出路径中找到执行日志

按如下方式验证配置:

  • 确保 EC2 实例具有正确的权限并安装了 Systems Manager 代理,如 先决条件部分所述。 这可能导致无法在目标上执行远程运行命令。
  • 确保您在输入中传递的标签密钥和值与 EC2 实例 上的标签 相匹配
  • 确保 输入文件 中的所有属性都 指向正确的资源——backupJobExecutionroLearn、backupV aultName、Amazon Simple Storage Service(Amazon S3)脚本的托管位置。
  • 验证是否为预期结果传递了正确的输入组合。 请参阅属性文档

正在清理

为了避免将来产生费用,请删除在此解决方案中创建的示例资源。有关更多详细信息,请参阅 第一篇博客 的清理部分。

结论

在这篇文章中,我们展示了如何使用步骤函数、Lambda 和系统管理器对集成 亚马逊云科技 Backup 与 Amazon EC2 的工作流程进行故障排除,以便在备份任务之前和之后运行脚本和操作。在这个无服务器解决方案中,考虑到编排中涉及的服务数量,可观察性是最重要的方面。了解各个组件的工作原理并采用必要的日志记录策略以最大限度地缩短故障排除时间至关重要。

如果你在 Step Functions 工作流程中遇到问题,这篇文章可以用作指南。最后,请注意,随着您向 Step Functions 工作流程添加更多功能,您需要建立更好的可追溯性,以识别编排中的瓶颈。 为步进功能@@ 启用 Amazon X -Ray 是一个很好的解决方案。

有关步骤函数的更多信息,请参阅 步骤函数 最佳实践 事件驱动架构 入门

感谢您的阅读!如果您有任何评论、反馈或问题,请将其留在评论部分。

Wilson Dayakar Puvvula

Wilson Dayakar Puvvula Wilson Dayakar Puvvula

是 亚马逊云科技 的云应用程序架构师。他帮助客户采用 亚马逊云科技 服务,并为 亚马逊云科技 自动化和云原生应用程序的实施提供指导。工作之余,他看利物浦足球俱乐部,喜欢球队国歌《你永远不会独行》。你可以在推特上找到他,网址为 @PuvvulaWilson。

Enrique Ramirez

恩里克·拉米雷斯·

恩里克是 亚马逊云科技 Backup 团队的高级服务解决方案架构师。总部位于德克萨斯州达拉斯的Enrique喜欢帮助客户构建数据保护解决方案,并深入研究他们的业务需求以确保他们的解决方案完美契合。当他不工作时,他喜欢与家人共度时光,环游世界。

Raghu Chandra

Raghu Chandra

Raghu 是 亚马逊云科技 的一名云架构师,总部设在新加坡。他目前正在与CloudFormation服务团队合作构建和发布资源提供者。当他不工作时,他喜欢园艺、听音乐和看电影。


*前述特定亚马逊云科技生成式人工智能相关的服务仅在亚马逊云科技海外区域可用,亚马逊云科技中国仅为帮助您发展海外业务和/或了解行业前沿技术选择推荐该服务。