使用 Amazon Bedrock 对 AWS Step Functions 中的状态进行问题排查 - AWS Prescriptive Guidance

使用 Amazon Bedrock 对 AWS Step Functions 中的状态进行问题排查

Aniket Kurzadkar 和 Sangam Kushwaha,Amazon Web Services

摘要

AWS Step Functions 错误处理功能可帮助您查看在工作流的某个状态期间发生的错误,但要找到错误的根本原因并对其进行调试仍然非常困难。此模式克服了这一挑战,并展示了 Amazon Bedrock 如何帮助您解决 Step Functions 的某些状态期间出现的错误。

Step Functions 提供了工作流编排功能,这样能够让开发人员更轻松地实现流程自动化。Step Functions 还提供了错误处理功能,具有以下优势:

  • 开发人员可以创建更具弹性的应用程序,这些应用程序在出现问题时不会完全失效。

  • 工作流可以包含条件逻辑,以便以不同的方式处理不同类型的错误。

  • 系统或许采用指数回退来自动重试失败的操作。

  • 可以为错误场景定义替代的执行路径,这样将使工作流能够进行调整并继续处理。

当 Step Functions 工作流中出现错误时,此模式将显示如何将错误消息和上下文发送到 Step Functions 支持的基础模型(FM),例如 Claude 3。基础模型可以分析错误,对其进行分类,并提出可以采取的补救措施。

先决条件和限制

先决条件

限制

  • 您可以将此模式的方法用于各种 AWS 服务。不过,根据由 AWS Lambda 创建然后由 Amazon Bedrock 评估的提示,结果可能会有所不同。

  • 部分 ‭AWS 服务在有些 ‭AWS 区域不可用。有关区域可用性,请参阅按区域划分的 AWS 服务。有关特定端点,请参阅服务端点和配额,然后选择相应服务的链接。

架构

下图显示了此模式的工作流和架构组件。

用于使用 Step Functions、Amazon Bedrock 和 Amazon SNS 来处理错误和发送通知的工作流。

下图显示了用于在 Step Functions 状态机中处理错误和发送通知的自动工作流:

  1. 开发人员开始在状态机上执行操作。

  2. Step Functions 状态机开始处理它的状态。可能得到两种结果:

    • (a)如果成功执行了所有状态,工作流将直接转到 Amazon SNS,以便通过电子邮件发送成功通知。

    • (b)如果任何状态失败,工作流将转到负责处理错误的 Lambda 函数。

  3. 当出现错误时,会发生以下情况:

    • (a)触发 Lambda 函数(错误处理程序)。Lambda 函数从 Step Functions 状态机传递给它的事件数据中提取错误消息。随后,Lambda 函数根据此错误消息来准备一个提示,并将此提示发送到 Amazon Bedrock。此提示要求提供与遇到的特定错误相关的解决方案和建议。

    • (b)托管着生成式人工智能模型的 Amazon Bedrock 将处理输入的提示。(此模式将使用 Anthropic Claude 3 基础模型(FM),这是 Amazon Bedrock 支持的众多基础模型之一。) 人工智能模型将分析错误上下文。随后,此模型会生成一个响应,其中可能包含对错误发生原因的解释、错误的潜在解决方案以及有关如何避免将来再犯同样错误的建议。

      Amazon Bedrock 将向 Lambda 函数返回由人工智能生成的响应。Lambda 函数将处理此响应,并可能对其进行格式化或者提取关键信息。随后,Lambda 函数将此响应发送到状态机输出。

  4. 在处理了错误或者成功执行之后,工作流最后将会触发 Amazon SNS,以便发送电子邮件通知。

工具

AWS 服务

  • Amazon Bedrock 是一项完全托管式服务,通过一个统一的 API 提供来自领先的人工智能初创企业和 Amazon 的高性能基础模型(FM)供您使用。

  • AWS Lambda 是一项计算服务,可帮助您运行代码,无需预置或管理服务器。它只在需要时运行您的代码,并自动进行扩展,因此您只需为使用的计算时间付费。

  • Amazon Simple Notification Service(Amazon SNS)可帮助您协调和管理发布者与客户端(包括 Web 服务器和电子邮件地址)之间的消息交换。

  • AWS Step Functions 是一项无服务器编排服务,可帮助您将 AWS Lambda 函数与其他 AWS 服务 结合使用,以便构建业务关键型应用程序。

最佳实践

  • 鉴于 Amazon Bedrock 是一款从经过训练的数据中学习的生成式人工智能模型,因此它还会使用这些数据来训练和生成上下文。作为一项最佳实践,隐藏任何可能导致数据泄露问题的私有信息。

  • 尽管生成式人工智能可以提供宝贵的洞察,但关键的错误处理决策仍然涉及人工监督,尤其是在生产环境中。

操作说明

任务说明所需技能

创建一个状态机。

要创建一个适合工作流的状态机,请执行以下操作:

  1. 登录到 AWS 管理控制台,然后打开 AWS Step Functions 控制台

  2. 从左侧的导航窗格中,选择状态机

  3. 选择创建状态机

  4. 根据您的使用案例选择一个模板,或者选择空白以便根据您的需求创建一个模板。

AWS DevOps
任务说明所需技能

创建一个 Lambda 函数。

要创建一个 Lambda 函数,请执行以下操作:

  1. 在 AWS 管理控制台 中,导航到 AWS Lambda 控制台。

  2. 在左侧的导航窗格中,选择函数,然后选择创建函数

  3. 创建函数页面上,从选项中进行选择,以便创建一个函数。随后,在函数名称中输入一个名称,并从运行时中的下拉列表中选择相应的语言。

  4. 选择创建函数

AWS DevOps

在 Lambda 代码中,设置所需的逻辑。

  • 要通过 适用于 Python (Boto3) 的 AWS SDK 连接到 Amazon Bedrock API,请使用如下代码。

    此代码将为 Amazon Bedrock 设置一个客户端、准备必要的参数,然后使用指定的提示向 Claude 3 模型发送一个请求。

    此模式将调用此 Claude 3 模型。有关支持的所有基础模型的更多信息(包括相关的模型 ID),请参阅 Amazon Bedrock 文档中的 Amazon Bedrock 中支持的基础模型

client = boto3.client( service_name="bedrock-runtime", region_name="selected-region" ) # Invoke Claude 3 with the text prompt model_id = "your-model-id" # Select your Model ID, Based on the Model Id, Change the body format try: response = client.invoke_model( modelId=model_id, body=json.dumps( { "anthropic_version": "bedrock-2023-05-31", "max_tokens": 1024, "messages": [ { "role": "user", "content": [{"type": "text", "text": prompt}], } ], } ), )
  • (可选)将 AWS 账户 ID 替换为占位符账户 ID。出于安全原因,当清理日志、错误消息或者其他可能包含敏感账户信息的输出时,这种方法可能非常有用。

    如下代码将查找用冒号括起来的任意 12 位数字(即 Amazon 资源名称(ARN)和其他的一些 AWS 标识符中的 AWS 账户 ID 格式),并将它们替换为占位符账户 ID ":123456789012:"

    def replace_account_id(input_string): # Use a regular expression to find the AWS account ID pattern account_id_pattern = r'(:\d{12}:)' # Replace the matched pattern with ":123456789012:" modified_string = re.sub(account_id_pattern, ":123456789012:", input_string) return modified_string
AWS DevOps
任务说明所需技能

设置 Lambda,以便处理 Step Functions 中的错误。

要设置 Step Functions 以便在不中断工作流的情况下处理错误,请执行以下操作:

  1. 在 Step Functions 控制台中,导航到您之前创建的状态机。

  2. 选择编辑,然后选择要为其设置错误处理操作的服务,然后选择错误处理

  3. 选择添加新捕获器,为回退状态选择 Lambda,然后选择您之前创建的 Lambda 函数。有关详情,请参阅 Step Functions 文档中的捕获错误

AWS DevOps

问题排查

问题解决方案

Lambda 无法访问 Amazon Bedrock API(无权执行)

当 Lambda 角色无权访问 Amazon Bedrock API 时,就会发生此错误。要解决此问题,请为 Lambda 角色添加 AmazonBedrockFullAccess 策略。有关详情,请参阅《AWS 托管式策略参考指南》中的 AmazonBedrockFullAccess

Lambda 超时错误

有时,可能需要 30 秒钟以上的时间才能生成并发回响应,具体情况取决于提示。要解决此问题,请延长配置时间。有关详情,请参阅《AWS Lambda 开发人员指南》中的配置 Lambda 函数超时

相关资源