使用 AWS Amplify 构建具有 AI 功能的无服务器 Web 应用程序
本文是一篇关于如何使用 AWS Amplify 和 AI 功能构建无服务器 Web 应用程序的专业指南。.

使用 AWS Amplify 构建具有 AI 功能的无服务器 Web 应用程序

本文将指导您如何使用 AWS Amplify 和其他 AWS 服务构建利用生成式 AI 功能的无服务器 Web 应用程序。文章还将探讨安全性、成本优化和数据中心位置选择等问题。.
0 股票
0
0
0
0

 

总体架构

本指南提供了一种构建 Web 应用程序的建议架构。 无服务器 它利用了*生成式人工智能*功能。目标是将AWS Amplify用于前端和持续集成/持续交付(CI/CD),并将AWS无服务器服务用于后端,从而创建一个可扩展、安全且易于维护的解决方案。.

  • 前端: React 或 Next.js 托管在 AWS Amplify 托管 + CDN(CloudFront)。.
  • 验证: Amazon Cognito(注册/登录 + 联合身份验证)。.
  • API: API 网关(REST/HTTP)或 AppSync(GraphQL)将请求路由到 Lambda。.
  • 生成逻辑: Lambda(Node/Python)向生成模型发送请求——该模型可以是托管的(OpenAI/Hugging Face/Bedrock),也可以是使用 Triton/TorchServe 在 GPU 服务器上自托管的。.
  • 贮存: 文件存储使用 S3,元数据/会话存储使用 DynamoDB 或 RDS。.
  • 安全与网络: WAF、Shield Advanced、IAM 最小权限、密钥管理器。.
  • CDN 和缓存: 使用 CloudFront + Lambda@Edge 或缓存标头来改善延迟并降低成本。.

 

创建应用程序的实用步骤(分步指南)

 

1. 准备开发环境

安装所需的基本工具:Node.js、npm 和 AWS Amplify CLI。然后克隆项目仓库并安装依赖项。.

curl -sL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt-get install -y nodejs
npm install -g @aws-amplify/cli
git clone <repo>
cd <repo>
npm install

配置 AWS CLI 和 Amplify,并初始化 Amplify 项目:

aws configure
amplify configure
amplify init

 

2. 添加与 Cognito 的身份验证

使用 Amplify,您可以快速添加身份验证功能。选项包括默认设置或手动自定义。如有需要,可使用与 Google/Facebook 的联合身份验证,并启用密码规则、多因素身份验证 (MFA) 和电子邮件验证。.

amplify add auth
# choose default or manual configuration
amplify push

 

3. 创建无服务器 API(REST 或 GraphQL)

使用 Amplify 添加 API;您可以选择使用 Lambda 的 REST 或使用 AppSync + DynamoDB 的 GraphQL。.

amplify add api
# choose REST and Lambda function template
amplify push

或者对于 GraphQL:

amplify add api
# choose GraphQL + DynamoDB
amplify push

 

4. 编写与生成式人工智能模型交互的 Lambda 函数

Lambda 充当前端和生成模型之间的接口。如果您使用 OpenAI 等外部服务,请妥善保管 API 密钥,并通过 Lambda 发送请求。.

const fetch = require('node-fetch');
exports.handler = async (event) => {
  const prompt = JSON.parse(event.body).prompt;
  const apiKey = process.env.OPENAI_API_KEY;
  const res = await fetch('https://api.openai.com/v1/chat/completions', {
    method: 'POST',
    headers: { 'Authorization': `Bearer ${apiKey}`, 'Content-Type': 'application/json' },
    body: JSON.stringify({
      model: 'gpt-4o-mini',
      messages: [{ role: 'user', content: prompt }]
    })
  });
  const data = await res.json();
  return { statusCode: 200, body: JSON.stringify(data) };
};
[p class=”wp-block-paragraph”]要加密密钥,请使用 AWS Secrets Manager 或者使用加密的环境变量。限制 Lambda 函数的 IAM 角色,使其对指定的密钥只有只读访问权限。

如果将模型托管在 GPU 服务器上,Lambda 或后端服务会将请求发送到其端点:

const res = await fetch('https://gpu.example.com/inference', {
  method: 'POST',
  headers: { 'Authorization': `Bearer ${process.env.MODEL_TOKEN}`, 'Content-Type': 'application/json' },
  body: JSON.stringify({ inputs: prompt })
});

 

5. 流媒体/实时实现(可选)

对于较长的响应或流式令牌,请使用 WebSocket 或服务器发送事件 (Server-Sent Events)。在 AWS 上,您可以使用 API Gateway WebSocket 或 AppSync 订阅。.

 

6. 使用 Amplify Hosting 进行前端托管和 CI/CD

Amplify Hosting 允许您从 Git 存储库启动 CI/CD;每次推送到特定分支都会触发自动构建和部署。.

amplify hosting add
amplify publish

 

安全、密钥管理和身份与访问管理 (IAM) 策略

 

秘密管理

AWS Secrets Manager 用于存储 API 密钥和密钥。Lambda 的 IAM 角色应仅包含对指定密钥的读取权限。.

 

示例 IAM 策略

一个允许 Lambda 读取特定密钥的最小策略示例:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "secretsmanager:GetSecretValue",
      "Resource": "arn:aws:secretsmanager:region:acct-id:secret:myOpenAIKey"
    }
  ]
}

 

抵御攻击和内容安全

为了保护应用程序:

  • 激活 AWS WAF 阻止恶意请求。.
  • 使用 AWS Shield (默认设置为标准模式,比 Shield Advanced 提供更强的保护)。.
  • 在 API 层面,利用 API 网关中的速率限制和使用计划。.
  • 内容审核 为了提高产出质量:使用审核模型(OpenAI/HuggingFace)审核和筛选回复。.

 

选择数据中心位置并比较其延迟和合规性

根据用户分布和法律要求选择合适的地区非常重要。常见建议:

  • us-east-1: 运送到北美速度快,基本服务费用更低。.
  • eu-west-1: 适用于隐私法律更为严格的欧洲地区。.
  • ap-southeast-1 / ap-northeast-1: 亚洲地区,面向亚洲大陆的用户。.

对于分布式用户,可以使用 CDN(CloudFront)并将模型分发到多个区域或进行边缘推理。.

如有需要 极低延迟 或者,如果您完全掌控数据,您可以将模型托管在公司位于 85 多个地点的 GPU 服务器上,这样可以降低延迟、控制数据并具备硬件防 DDoS 功能。.

 

模型托管——云端GPU vs. 托管API(优缺点分析)

GPU上托管服务和自托管服务的总体比较:

  • 托管(OpenAI/Bedrock/Hugging Face):
    • 优势: 无需维护,模型更新简单,访问快捷。.
    • 缺点: 按请求收费,隐私问题。.
  • 自托管于 GPU:
    • 优势: 服务器费用固定,完全控制,专用设置,使用我们的图形服务器进行渲染和人工智能。.
    • 缺点: 需要管理和监控,以及手动扩展能力。.

推荐: 使用托管服务器进行概念验证;对于高吞吐量和低延迟的需求,迁移到 GPU 服务器。.

 

性能和成本优化

  • 伸展运动: 将非敏感输出缓存到 CloudFront 或 Redis/ElastiCache 中。.
  • 型号选择: 使用满足实际需求的最小模型(精简版或量化版)。.
  • Lambda 限制: 对于长时间推理,请使用 ECS/EKS 或 GPU 服务器,因为 Lambda 有时间/CPU 限制。.
  • 监测: CloudWatch 用于日志和指标,X-Ray 用于追踪。.
  • 成本节省: 预留或使用预留实例或专用 GPU 服务器进行长期推理。.

 

配置 Nginx 反向代理到 GPU 上的 Triton 的示例

如果模型运行在 GPU 服务器上,您可以使用 Nginx 设置反向代理:

server {
    listen 443 ssl;
    server_name ai.example.com;
    location / {
      proxy_pass http://127.0.0.1:8000;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
    }
  }

 

最后的一些安全和隐私提示

以下是一些保护数据和遵守法律的实用建议:

  • 敏感日志记录: 避免直接存储敏感提示信息,或者对其进行加密。.
  • 数据保留: 审查 GDPR/PDPA 要求;如有需要,使用特定位置(数据驻留)。.
  • 输入/输出: 使用验证和清理措施来防止快速注入和数据泄露。.

 

应用示例和场景

  • 具有建议和摘要功能的内容创作和文本编辑器应用程序。.
  • 智能聊天机器人,会话上下文存储在 DynamoDB 中。.
  • 面向开发者的智能编码工具,具备自动补全和重构建议功能。.
  • 使用 GPU 服务器处理图像和视频的 AI 混合渲染工具。.

 

在我们公司(拥有85个以上分支机构)安顿下来的实用技巧

降低延迟、优化全球用户体验的实用技巧:

  • 对于欧洲、亚洲或拉丁美洲的用户,请使用附近的位置来减少 p99 延迟。.
  • 对于交易和游戏,请使用专用的交易 VPS 和游戏 VPS,并启用防 DDoS 和 BGP Anycast 功能,以减少延迟和丢包。.
  • 使用 GPU 云进行大型模型的训练和推理,以优化成本和延迟。.
  • 利用网络和 CDN 分发内容并缩短加载时间。.

 

快速发布前总结和检查清单

  • Amplify Hosting 和 CI 均已启用。.
  • Cognito 已配置为进行身份验证,并根据需要启用 MFA。.
  • 安全可靠,Lambda 访问控制最小化,并已配置密钥管理器。.
  • 对 API 实施 WAF 和速率限制。.
  • 应启用 CDN 和缓存以减少资源占用和延迟。.
  • 根据目标用户和法律要求选择合适的地点。.
  • 已建立监控和警报程序(CloudWatch + Slack/电子邮件)。.
  • 公开发布前应进行负载测试和渗透测试。.

 

技术支持和咨询选项

为了帮助您选择最佳的区域、GPU 和网络组合,我们提供遍布 85 多个地点的托管方案和图形服务器。技术团队可为您提供模型迁移和 CI/CD 设置方面的指导。.

 

常见问题解答

您可能也喜欢