
执行摘要
Nextnet 是一家位于硅谷的 AI 企业软件公司,以生命科学和医疗健康行业作为其首个目标市场。该公司利用 AWS 托管服务和基础设施即代码(IaC),成功构建并部署了一个全面的 AI 驱动 SaaS 平台。本案例研究展示了 AWS CDK 与经过深思熟虑的 AWS 服务选型如何实现快速开发、在多个环境中保持一致的部署,以及前沿 AI 能力的无缝集成,同时保持企业级的安全性和可扩展性,能够经受任何级别的一线 VC 技术尽职调查。
关键成果:
- 无服务器架构,显著降低了基础设施管理开销。
- 多环境部署(开发、预发布、生产),配置一致,并实现资源隔离/共享。
- 使用 AWS Bedrock 并具备检索增强生成(RAG)能力的 AI 驱动功能。
- 跨账户安全模型,通过自动化 DNS 委派实现域名和子域名的自动化管理。
- 只需按下“部署”按钮即可完全重现整套基础设施。
- 以 AWS Cognito 和 AWS Amplify Gen 2 为核心,提供现代且安全的无密码认证流程。
项目概述
业务挑战
Nextnet 的目标是:
- 成为全球最值得信赖的、涵盖人类健康与福祉方方面面的 AI 知识平台。
- 提供 AI 驱动的对话与搜索能力,以及基于真实科学证据、完全交互式的图谱式关联分析。
- 尽管摄入了 PB 级的结构化、半结构化和非结构化多模态数据,仍能即时返回结果。
- 不仅为科学家提供对话界面,还以密集互连的知识图谱形式提供沉浸式探索工具,并能够在两者之间无缝切换。
- 处理用户认证、授权以及复杂的功能访问逻辑矩阵。
- 适应多变的流量和使用模式。
- 维护相互隔离且完全一致的环境,以支持快速迭代、由精选行业关键意见领袖组成的委员会进行科学验证,并保证生产工作负载具备弹性和容错能力。
- 确保企业级的安全性与合规性,为即将到来的美国和欧洲合规审查做好准备。
解决方案架构
该解决方案利用 AWS 托管服务堆栈,完全通过 AWS CDK 进行编排,无需手动配置基础设施,确保部署一致、可重复,并在构建时依据 AWS 良好架构(Well-Architected)原则进行验证。
技术架构
注意:所展示的代码片段是 IaC 交付物的匿名节选。前端代码已省略。
核心基础设施组件
1. 前端与托管
// AWS Amplify Gen 2,用于无服务器、分布式的 Web 托管等。
const app = new App(this, 'App', {
appName: 'Core Application',
sourceCodeProvider: new CodeCommitSourceCodeProvider({ repository }),
customRules: [CustomRule.SINGLE_PAGE_APPLICATION_REDIRECT],
…
});所使用的 AWS 服务:
- AWS Amplify Gen 2:无服务器 Web 托管,具备 CI/CD 和强大的 DX(开发者体验)
- Amazon Route53:具备跨账户委派的 DNS 管理
- AWS Certificate Manager:SSL/TLS 证书自动化
- Amazon CloudFront:全球内容分发网络
- AWS CodeCommit:基于 Git 的代码版本控制。
2. 认证与 API
// AWS Cognito,用于用户管理、身份验证和授权
const userPool = new UserPool(this, 'UserPool', {
customDomain: { domainName: `auth.${domain}` }
…
});
// AWS AppSync,用于无服务器 GraphQL API
const api = new GraphqlApi(this, 'Api', {
authorizationConfig: {
defaultAuthorization: { authorizationType: AuthorizationType.USER_POOL }
}
…
});所使用的 AWS 服务:
- AWS Cognito:用户认证与授权
- AWS AppSync:具备实时订阅的托管 GraphQL API
- AWS DynamoDB:具备自动扩展能力的 NoSQL 数据库
- AWS OpenSearch:倒排索引全文搜索引擎。
- AWS Amplify Gen 2:框架中的 “auth” 和 “data” 部分。
3. AI/ML 集成
// AWS Bedrock Knowledge Base,用于 RAG
const knowledgeBase = new KnowledgeBaseVector(this, "KnowledgeBase", {
id: env.KNOWLEDGE_BASE_ID,
executionRoleArn: env.KNOWLEDGE_BASE_EXECUTION_ROLE_ARN,
});
// 集成了 AWS Bedrock 的 AWS Lambda 函数
backend.chat.resources.lambda.addToRolePolicy(
new PolicyStatement({
actions: ["bedrock:InvokeModelWithResponseStream"],
resources: [`arn:aws:bedrock:*::foundation-model/${modelId}`],
})) 所使用的 AWS 服务:
- Amazon Bedrock:基础模型(Claude 4.6 Haiku、Claude 4.6 Sonnet、Amazon Nova 与 Titan v2)
- AWS S3:用于多模态文档存储
- Amazon Bedrock Knowledge Base:RAG
- AWS RDS:由 pgVector 驱动的向量数据库
- AWS Amplify Gen 2:用于智能体式对话和生成逻辑的 AI 套件
4. 存储与数据管理
// 用于不同数据类型的 AWS S3 存储桶
const storage = defineStorage({
name: "storage",
access: (allow) => ({
"profile-pictures/*": [allow.authenticated.to(["read", "write"])],
"knowledge-base-sources/*": [allow.authenticated.to(["read"])],
}),
});所使用的 AWS 服务:
- Amazon S3:用于文件、知识库来源和备份的对象存储
- Amazon DynamoDB:具备时间点恢复功能的主数据库
- Amplify Gen 2:用于集成认证的静态资源 CDN 云存储
多环境架构
跨账户策略
该解决方案实现了一套精细的多账户策略:
// 生产账户
const crossAccountDelegationRole = new Role(this, "CrossAccountRole", {
assumedBy: new AccountPrincipal("111111111111"),
roleName: "CrossAccountDelegationRoleCoreApplicationProduction",
});
// 开发账户
const devDelegationRole = new Role(this, "DevDelegationRole", {
assumedBy: new AccountPrincipal("222222222222"),
roleName: "CrossAccountDelegationRoleCoreApplicationDevelopment",
});环境隔离:
- 生产账户:承载完整的生产工作负载,使用主分支进行部署
- 开发账户:具备基础认证的开发环境
- 预发布(预览)账户:供精选的行业专家和顾问委员会进行全面验证
- 根账户:集中式域名管理和跨账户 IAM 角色
采用 AWS CDK 实现的关键优势
1. 基础设施即代码的优势
可重现性:每个基础设施组件都以代码形式定义,确保在各环境中的部署完全一致。
// 特定于环境的配置
if (process.env.ENV === 'prd') {
const main = app.addBranch('main', {
…
});
} else {
const develop = app.addBranch('develop', {
basicAuth: BasicAuth.fromCredentials('SOME_USERNAME',
SecretValue.unsafePlainText(process.env.SOME_PASSWORD)),
…
});
}版本控制:所有基础设施变更都通过标准的开发工作流进行跟踪、评审和批准。
一致性:CDK 确保在所有环境中的资源命名、标签和配置保持一致。
极简性:整个交付物都包含在单一代码仓库中。
2. AWS 托管服务的优势
零基础设施管理:通过采用完全托管的服务,团队省去了:
- 服务器配置与维护
- 数据库管理
- 安全补丁
- 容量规划
- 备份管理
最重要的是,它能够在极其有限的预算下快速交付符合行业标准的功能。
自动扩展:DynamoDB、Lambda 和 Amplify 等服务会根据需求自动扩展,无需人工干预。
内置安全性:得益于 AWS 责任共担模型,托管服务开箱即用地提供企业级安全功能:
- 静态和传输过程中的加密
- IAM 集成
- 在需要时进行 VPC 隔离
- 满足认证的合规性
3. 成本优化
按使用付费模式:无服务器架构确保成本随使用量直接变化。
// 采用按需计费的 DynamoDB
const table = new Table(this, "Table", {
billingMode: BillingMode.PAY_PER_REQUEST,
pointInTimeRecovery: true,
});无闲置资源:Lambda 函数和其他无服务器服务仅在实际处理请求时才产生费用。
有时,要从每月的 AWS 账单中榨出每一分钱,需要一些解决方案架构上的创造力。但如果你身处一家优秀的工程公司,就能以极低的资金消耗率运营。例如,让开发者通过发送 Slack 消息按需创建和销毁数据库,并在闲置 1 小时后自动销毁该数据库。
高级功能实现
AI 驱动的能力
检索增强生成(RAG)
// 用于提供上下文相关 AI 响应的知识库集成
backend.retrieveAndGenerateResponse.resources.lambda.addToRolePolicy(
new PolicyStatement({
actions: ["bedrock:Retrieve", "bedrock:RetrieveAndGenerate"],
resources: [`arn:aws:bedrock:*:*:knowledge-base/${knowledgeBaseId}`],
})
);多模型 AI 策略
- Claude 4.6 Haiku:关键词生成和轻量级任务
- Claude 4.6 Sonnet:复杂的 RAG 响应、文档分析,以及高级对话功能与推理
- Amazon Nova 与 Titan v2:嵌入与向量化
安全实现
跨账户访问控制
const crossAccountPolicy = new PolicyDocument({
statements: [
new PolicyStatement({
actions: ["route53:ChangeResourceRecordSets"],
resources: [hostedZone.hostedZoneArn],
conditions: {
"ForAllValues:StringEquals": {
"route53:ChangeResourceRecordSetsActions": ["UPSERT", "DELETE"],
},
},
}),
],
});密钥管理
new secretsManager.Secret(this, "SecretKey", {
secretName: "secret-key",
secretStringValue: SecretValue.unsafePlainText(props.secretKey),
});支付集成
// 使用 EventBridge 处理 Stripe 事件
new Payments(backend.createStack('payments'), 'payments', {
destinationId: env.STRIPE_EVENTBRIDGE_DESTINATION_ID,
graphqlApi: backend.data.resources.graphqlApi,
…
});部署策略
特定环境的部署
CDK 配置会根据环境变量自动适配:
// 生产配置
if (env.ENV === "prd") {
this.hostedZone = new PublicHostedZone(this, "HostedZone", {
zoneName: "domainname.com",
caaAmazon: true,
});
} else {
// 开发配置
this.hostedZone = new PublicHostedZone(this, "HostedZone", {
zoneName: `${env.ENV}.domainname.com`,
});
}CI/CD 集成
AWS Amplify 提供内置的 CI/CD,具备:
- 在代码提交时自动构建
- 特定环境的部署
- 回滚能力
- 构建产物管理
性能与监控
可观测性技术栈
// 用于分布式系统的 AWS X-Ray 追踪
backend.data.resources.cfnResources.cfnGraphqlApi.xrayEnabled = true;
// AWS CloudWatch 日志记录
const graphQlApiLogsRole = new Role(backend.data, 'GraphQlApiLogsRole', {
assumedBy: new ServicePrincipal('appsync.amazonaws.com'),
managedPolicies: [
ManagedPolicy.fromAwsManagedPolicyName('service-role/AWSAppSyncPushToCloudWatchLogs')
],
…
});数据保护
//
Object.values(
backend.data.resources.cfnResources.amplifyDynamoDbTables
).forEach((tableConfig) => {
tableConfig.pointInTimeRecoveryEnabled = true;
});成果与业务影响
技术成就
- 100% 无服务器:零服务器管理开销。
- 多区域就绪:架构支持全球扩展。
- 自动扩展:无需人工干预即可应对流量高峰。
- 成本高效:按使用付费模式优化运营成本。
开发速度
- 快速原型开发:新功能在几分钟内即可部署,而非数小时。
- 一致的环境:开发环境与生产环境保持一致。
- 自动化测试:基础设施变更在部署前经过测试。
- 团队协作:基础设施变更像应用代码一样接受评审。
卓越运营
- 高可用性:跨 AWS 可用区(AZ)内置冗余。
- 灾难恢复:自动化备份和时间点恢复。
- 安全合规:无需额外开销的企业级安全性。
- 监控:以最少的配置实现全面的可观测性。
经验教训与最佳实践
已实施的 CDK 最佳实践
- 环境参数化:使用环境变量来处理配置差异。
- 资源标签:实施一致的标签策略,以实现准确的成本分摊与管理。
- 默认安全:在所有 IAM 策略中遵循最小权限原则。
- 模块化设计:针对常见模式的可复用构造。
AWS 托管服务策略
- 优先选择托管而非自管:选择托管服务以降低运营开销
- 充分利用服务集成:使用原生的 AWS 服务集成以获得更好的性能
- 为规模化做规划:从第一天起就设计具备自动扩展能力的架构
- 监控一切:实施全面的监控与告警
结论
本案例研究展示了 AWS CDK 和 AWS 托管服务如何使组织能够构建复杂的 AI 驱动应用,而无需应对传统的基础设施复杂性。通过将基础设施视为代码并选用合适的云工具,Nextnet 实现了:
- 更快的上市速度:将基础设施搭建时间从数月/数周缩短到数天/数小时。
- 更低的运营成本:消除了基础设施管理开销。
- 增强的可靠性:充分利用了 AWS 成熟可靠的托管服务。
- 更高的安全性:内置的企业级安全功能。
- 可扩展的架构:为全球扩展和流量增长做好准备。
将 AWS CDK 用于基础设施定义、AWS 托管服务用于运行时能力,二者的结合为现代应用开发提供了坚实的基础。希望在 AWS 上进行构建的组织,应认真考虑这种方法,因为它在灵活性、可靠性和运营简易性之间取得了平衡。
也想构建它吗?
几点建议:
- 从 CDK 开始:从第一天起就使用 AWS CDK 启动基础设施项目
- 拥抱托管服务:相较于自管方案,优先选择 AWS 托管服务
- 实施多环境策略:从一开始就为开发、预发布和生产环境做好规划
- 投资于监控:在项目早期就实施全面的可观测性
- 为 AI 集成做规划:将 AI/ML 能力作为架构中的一等公民来考虑
这种架构模式为在 AWS 上构建现代、可扩展且易维护的应用提供了蓝图,同时将运营复杂性降至最低,并将开发速度最大化。
本案例研究代表了 AWS 最佳实践的真实落地,展示了基础设施即代码与托管服务相结合在构建生产就绪应用方面的强大能力。
#案例研究


