目 录CONTENT

文章目录

使用 GitHub Actions 在 Amazon Bedrock AgentCore 上部署 AI 智能体

Administrator
2026-01-17 / 0 评论 / 0 点赞 / 0 阅读 / 0 字

📢 转载信息

原文链接:https://aws.amazon.com/blogs/machine-learning/deploy-ai-agents-on-amazon-bedrock-agentcore-using-github-actions/

原文作者:Prafful Gupta and Anshu Bathla


最近,AWS 发布了 Amazon Bedrock AgentCore,这是一个灵活的服务,可帮助开发人员在不同框架和模型之间无缝创建和管理 AI 智能体,无论这些模型是托管在 Amazon Bedrock 上还是其他环境中。具体来说,AgentCore Runtime 提供了一个安全、无服务器且专用的托管环境,用于部署和运行 AI 智能体或工具。AgentCore Runtime 不受框架限制,可以与 LangGraph、Strands 和 CrewAI 等流行框架无缝协作,从而以自动扩展和内置安全性的方式部署您的 AI 智能体和工具。

在本文中,我们将演示如何使用 GitHub Actions 工作流来自动化将 AI 智能体部署到 AgentCore Runtime。这种方法提供了一个具有企业级安全控制的可扩展解决方案,实现了完整的持续集成和交付 (CI/CD) 自动化。通过实施全面的流水线,我们能够实现无缝的智能体部署,并遵循 AWS 最佳实践,包括 OpenID Connect (OIDC) 身份验证、最小权限访问控制和环境分离。我们的解决方案有助于提高现有智能体的更新效率,并整合持续的安全扫描和严格的代码质量检查。最终结果是一种强大的部署策略,有助于最大限度地减少运营复杂性、增强安全性,并加速企业环境中 AI 智能体的开发。

Amazon Bedrock AgentCore Runtime 的优势

AgentCore Runtime 是用于生产环境智能体部署的理想服务:

  • 提供一个框架无关的环境来运行您的智能体
  • 可与 Amazon Bedrock 和 Anthropic Claude 等提供的模型等大型语言模型 (LLM) 协同工作
  • 通过在具有隔离的 CPU、内存和文件系统资源的专用 microVM 中运行每个用户会话,提供会话隔离
  • 支持实时交互和长达 8 小时的长期运行工作负载
  • 提供内置的身份验证和可观察性功能

解决方案概述

我们开发了一个全面的 CI/CD 流水线,使用 GitHub Actions 来简化符合安全标准的智能体部署。该流水线作为一个即用型解决方案,可以无缝集成到您现有的开发工作流中。该解决方案由以下关键组件构成:

下图说明了该解决方案的架构。

Architecture

数据流包含以下步骤:

  1. 开发人员将代码更改从其本地存储库提交到 GitHub 存储库。在此解决方案中,GitHub Action 是手动触发的,但这可以实现自动化。
  2. GitHub Action 触发构建阶段。
  3. GitHub 的 OIDC 使用令牌向 AWS 进行身份验证并访问资源。
  4. GitHub Actions 调用命令,直接从 Dockerfile 构建并将智能体容器映像推送到 Amazon ECR。
  5. 映像上传后,AWS Inspector 触发高级安全扫描。
  6. 使用容器映像创建 AgentCore Runtime 实例。
  7. 智能体可以根据其配置进一步查询 Amazon Bedrock 模型并调用工具。

在接下来的部分中,我们将介绍部署解决方案的步骤:

  1. 从 GitHub 仓库下载源代码。
  2. 创建您的智能体代码。
  3. 设置 GitHub 密钥。
  4. 创建 IAM 角色和策略。
  5. 创建 GitHub Actions 工作流。
  6. 触发并监控流水线。
  7. 验证部署。

先决条件

在使用我们的安全 CI/CD 流水线将智能体部署到 AgentCore Runtime 之前,请验证您已满足以下先决条件:

下载源代码

克隆源代码存储库:bedrock-agentcore-runtime-cicd

git clone https://github.com/aws-samples/sample-bedrock-agentcore-runtime-cicd.git

存储库文件夹包含以下结构:

bedrock-agentcore-runtime-cicd/ ├── .github/ │ └── workflows/ │ └── deploy-agentcore.yml # 文件包含构建并在 AgentCore Runtime 上部署智能体的操作集 │ └── test-agent.yml # 部署后,此文件用于通过手动工作流分派测试智能体 ├── agents/ │ ├── strands_agent.py # 使用 BedrockAgentCoreApp 应用,该应用使用 Strands 框架和 Claude 作为底层模型来创建 AI 智能体 │ ├── requirements.txt # 包含依赖项 ├── scripts │ ├── create_iam_role.py # AgentCore Runtime 所需的 IAM 角色 │ ├── deploy_agent.py # 将自定义智能体部署到 AWS Bedrock 的 AgentCore Runtime 平台,该平台允许您在 AWS 基础设施上运行容器化 AI 智能体 │ └── setup_oidc.py # 用于 Github 身份验证和授权的 OIDC 设置,以访问 AWS 账户以部署所需的服务 │ └── cleanup_ecr.py # 在 ECR 注册表中保留最近的 9 个映像,可以自定义 │ └── create_guardrail.py # 设置最小防护栏以进行内容过滤,可根据用例进行自定义 │ └── test_agent.py # 包含测试用例 └── Dockerfile # 包含构建 Docker 映像的说明 └── README.md

创建智能体代码

使用 AgentCore Runtime 工具包,使用您选择的框架创建您的智能体。该工具包使用 BedrockAgentCoreApp 来创建一个应用程序,该应用程序提供了一种标准化的方式,将您的 AI 智能体代码打包成可以在 AgentCore Runtime 管理的基础设施上运行的容器。它还使用 app.entrypoint,这是一个将函数标记为主入口点的 Python 装饰器。当 Amazon Bedrock 智能体收到传入的 API 请求时,此函数会接收并处理用户的请求。在此示例智能体代码中,当有人通过 API 调用您的 Amazon Bedrock 智能体时,AgentCore Runtime 将自动调用 strands_agent_bedrock(payload) 函数。

在本文中,我们使用 agents/strands_agent.py 文件使用 Strands Agents 框架创建一个智能体:

""" 此模块使用 Strands 框架定义一个可以执行计算的对话式 AI 智能体。 """ from bedrock_agentcore.runtime import BedrockAgentCoreApp from strands import Agent from strands.models import BedrockModel from strands_tools import calculator # 初始化 Bedrock AgentCore 应用程序 app = BedrockAgentCoreApp() # 配置带有防护栏的 Claude 模型用于智能体 model_id = "us.anthropic.claude-sonnet-4-20250514-v1:0" # 加载防护栏 ID(如果可用) guardrail_config = None try: with open("guardrail_id.txt", "r", encoding="utf-8") as f: guardrail_id = f.read().strip() if guardrail_id: guardrail_config = { "guardrailIdentifier": guardrail_id, "guardrailVersion": "1", } print(f"Loaded guardrail: {guardrail_id}") except FileNotFoundError: print("No guardrail file found - running without guardrail") model = BedrockModel(model_id=model_id, guardrail=guardrail_config) # 使用工具和系统提示创建智能体 agent = Agent( model=model, tools=[calculator], system_prompt="You're a helpful assistant. You can do simple math calculation.", ) @app.entrypoint def strands_agent_bedrock(payload): """ Bedrock AgentCore Runtime 的主入口点。当智能体收到请求时,AWS Bedrock AgentCore 会调用此函数。它会处理用户输入并返回智能体的响应。 Args: payload (dict): 包含用户输入的请求负载 预期格式: {"prompt": "user question"} Returns: str: 智能体对用户提示的文本响应 """ # 从负载中提取用户提示 user_input = payload.get("prompt") # 通过智能体处理输入(处理工具选择和模型推理) response = agent(user_input) # 从响应中提取并返回文本内容 return response.message["content"][0]["text"] if __name__ == "__main__": # 本地运行应用程序进行测试 # 在生产环境中,这由 Bedrock AgentCore Runtime 处理 app.run()

设置 GitHub 密钥

GitHub Actions 工作流必须能够访问您 AWS 账户中的资源。在本文中,我们使用 IAM OpenID Connect 身份提供程序和具有 IAM 策略的 IAM 角色来访问 AWS 资源。OIDC 允许您的 GitHub Actions 工作流在不将 AWS 凭证存储为长期 GitHub 密钥的情况下访问 AWS 资源。这些凭证存储在 GitHub 存储库 Settings 下的 Secrets 选项中作为 GitHub 密钥。有关更多信息,请参阅 在 GitHub Actions 中使用密钥

创建 IAM 角色和策略

要在 AgentCore Runtime 中运行智能体或工具,您需要一个 IAM 执行角色。有关创建 IAM 角色的信息,请参阅 IAM 角色创建

在本文中,我们为 AgentCore Runtime 创建所需的信任策略和执行角色。有关更多详细信息,请参阅 AgentCore Runtime 的 IAM 权限

以下代码是 AgentCore Runtime 信任策略的代码:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AssumeRolePolicy", "Effect": "Allow", "Principal": { "Service": "bedrock-agentcore.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:SourceAccount": "accountId" }, "ArnLike": { "aws:SourceArn": "arn:aws:bedrock-agentcore:region:accountId:*" } } } ] }

以下代码是 AgentCore Runtime 执行角色:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "bedrock:InvokeModel", "bedrock:InvokeModelWithResponseStream", "bedrock:Converse", "bedrock:ConverseStream" ], "Resource": [ "arn:aws:bedrock:*::foundation-model/us.anthropic.claude-sonnet-4-*", "arn:aws:bedrock:*::foundation-model/anthropic.claude-*", "arn:aws:bedrock:*:*:inference-profile/us.anthropic.claude-sonnet-4-*", "arn:aws:bedrock:*:*:inference-profile/anthropic.claude-*" ] }, { "Effect": "Allow", "Action": [ "ecr:GetAuthorizationToken", "ecr:BatchCheckLayerAvailability", "ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage" ], "Resource": "arn:aws:ecr:::repository/bedrock-agentcore-*" }, { "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "arn:aws:logs:*:*:*" } ] }

创建 GitHub Actions 工作流

请参阅 .github/workflows/deploy-agentcore.yml 处的 CI/CD 工作流文件,了解创建工作流的详细信息。工作流将执行以下步骤:

  • 它使用默认的 Ubuntu Github Runner 来执行流水线中提供的任务。
  • 工作流会安装 requirement.txt 文件中提到的所需依赖项。
  • 它构建 Docker 映像并将其部署到 ECR 存储库。
  • 使用 Amazon Inspector 对映像进行扫描,以识别潜在漏洞。
  • AgentCore Runtime 将智能体作为端点进行部署。
  • 工作流会测试智能体端点以验证功能。

触发和监控流水线

此流水线可以通过更改 agents 文件夹中的代码或使用工作流分派选项手动触发。根据您组织的开发分支策略,这可能会进一步更改。更新 .github/workflows/deploy-agentcore.yml 中的代码以更改此触发行为。

Pipeline

Detailed Steps

测试智能体

部署智能体后,我们将通过工作流分派选项手动触发测试智能体工作流来验证其功能。

Test Agent Pipeline

Test Agent

AgentCore Runtime 版本控制和端点

Amazon Bedrock AgentCore 为 AgentCore Runtime 实现了自动版本控制,并允许您使用端点管理不同的配置。端点提供了一种引用特定 AgentCore Runtime 版本的方式。有关更多详细信息和示例代码,请参阅 AgentCore Runtime 版本控制和端点

清理

为避免产生额外费用,请完成以下步骤:

  1. 通过部署使用的 Amazon ECR 控制台中的 ECR 映像(通过 GitHub Actions 创建)。
  2. 删除在 AgentCore Runtime 中部署的智能体。

结论

在本文中,我们演示了一种使用 GitHub Actions 在 AgentCore Runtime 上实现更安全、更可扩展的 AI 智能体部署的综合方法。我们的解决方案为生成式 AI 应用程序提供了一个强大、自动化和受控的环境,通过自动化依赖项管理、实施持续的代码质量检查、执行全面的漏洞扫描以及促进一致的部署流程,解决了关键的企业部署挑战。通过抽象化基础设施复杂性,此流水线有助于开发人员专注于智能体逻辑和功能,同时提供了一种框架无关的方法,支持大规模管理多个 AI 智能体。随着 AI 智能体继续改变企业能力,此解决方案代表了简化 AI 智能体开发和操作管理的重要一步,为现代生成式 AI 应用程序提供了一种标准化、安全且高效的部署机制。

作为下一步,您可以使用 Amazon Q 智能地增强和定制您的 AI 智能体部署流水线,通过先进的、上下文感知的自动化改造您的 CI/CD 流程。


关于作者

Prafful Gupta 是 AWS 驻印度古尔冈的助理交付顾问。他在一年前加入亚马逊,专注于 DevOps 和生成式 AI 解决方案,帮助客户应对云转型之旅。工作之余,他喜欢与同行交流并与家人共度美好时光。在以下链接上联系他: linkedin.com/in/praffulgupta11/

Anshu Bathla 是 AWS 的首席顾问 – SRC,驻印度古尔冈。他与跨不同垂直领域的客户合作,帮助他们加强安全基础设施并实现安全目标。工作之余,Anshu 喜欢阅读书籍并在自己的家庭花园里园艺。在以下链接上联系他: linkedin.com/in/anshu-bathla/




🚀 想要体验更好更全面的AI调用?

欢迎使用青云聚合API,约为官网价格的十分之一,支持300+全球最新模型,以及全球各种生图生视频模型,无需翻墙高速稳定,文档丰富,小白也可以简单操作。

0

评论区